1*9f62ea84SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9f62ea84SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9f62ea84SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9f62ea84SAndrew Rist * distributed with this work for additional information 6*9f62ea84SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9f62ea84SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9f62ea84SAndrew Rist * "License"); you may not use this file except in compliance 9*9f62ea84SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*9f62ea84SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*9f62ea84SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9f62ea84SAndrew Rist * software distributed under the License is distributed on an 15*9f62ea84SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9f62ea84SAndrew Rist * KIND, either express or implied. See the License for the 17*9f62ea84SAndrew Rist * specific language governing permissions and limitations 18*9f62ea84SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*9f62ea84SAndrew Rist *************************************************************/ 21*9f62ea84SAndrew Rist 22*9f62ea84SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #include <vos/process.hxx> 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include "VCLKDEApplication.hxx" 27cdf0e10cSrcweir 28cdf0e10cSrcweir #define Region QtXRegion 29cdf0e10cSrcweir 30cdf0e10cSrcweir #include <kapplication.h> 31cdf0e10cSrcweir #include <klocale.h> 32cdf0e10cSrcweir #include <kaboutdata.h> 33cdf0e10cSrcweir #include <kcmdlineargs.h> 34cdf0e10cSrcweir #include <kstartupinfo.h> 35cdf0e10cSrcweir 36cdf0e10cSrcweir #undef Region 37cdf0e10cSrcweir 38cdf0e10cSrcweir #include "KDEXLib.hxx" 39cdf0e10cSrcweir 40cdf0e10cSrcweir #include <unx/i18n_im.hxx> 41cdf0e10cSrcweir #include <unx/i18n_xkb.hxx> 42cdf0e10cSrcweir 43cdf0e10cSrcweir #include <unx/saldata.hxx> 44cdf0e10cSrcweir 45cdf0e10cSrcweir #include "KDESalDisplay.hxx" 46cdf0e10cSrcweir 47cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 48cdf0e10cSrcweir #include <stdio.h> 49cdf0e10cSrcweir #endif 50cdf0e10cSrcweir 51cdf0e10cSrcweir KDEXLib::KDEXLib() : 52cdf0e10cSrcweir SalXLib(), m_bStartupDone(false), m_pApplication(0), 53cdf0e10cSrcweir m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 ) 54cdf0e10cSrcweir { 55cdf0e10cSrcweir } 56cdf0e10cSrcweir 57cdf0e10cSrcweir KDEXLib::~KDEXLib() 58cdf0e10cSrcweir { 59cdf0e10cSrcweir delete (VCLKDEApplication*)m_pApplication; 60cdf0e10cSrcweir 61cdf0e10cSrcweir // free the faked cmdline arguments no longer needed by KApplication 62cdf0e10cSrcweir for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) 63cdf0e10cSrcweir { 64cdf0e10cSrcweir free( m_pFreeCmdLineArgs[i] ); 65cdf0e10cSrcweir } 66cdf0e10cSrcweir 67cdf0e10cSrcweir delete [] m_pFreeCmdLineArgs; 68cdf0e10cSrcweir delete [] m_pAppCmdLineArgs; 69cdf0e10cSrcweir } 70cdf0e10cSrcweir 71cdf0e10cSrcweir void KDEXLib::Init() 72cdf0e10cSrcweir { 73cdf0e10cSrcweir SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod; 74cdf0e10cSrcweir pInputMethod->SetLocale(); 75cdf0e10cSrcweir XrmInitialize(); 76cdf0e10cSrcweir 77cdf0e10cSrcweir KAboutData *kAboutData = new KAboutData("OpenOffice.org", 78cdf0e10cSrcweir "kdelibs4", 79cdf0e10cSrcweir ki18n( "OpenOffice.org" ), 80cdf0e10cSrcweir "3.0.0", 81cdf0e10cSrcweir ki18n( "OpenOffice.org with KDE Native Widget Support." ), 82cdf0e10cSrcweir KAboutData::License_LGPL, 83cdf0e10cSrcweir ki18n( "Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Novell, Inc"), 84cdf0e10cSrcweir ki18n( "OpenOffice.org is an office suite.\n" ), 85cdf0e10cSrcweir "http://kde.openoffice.org/index.html", 86cdf0e10cSrcweir "dev@kde.openoffice.org" ); 87cdf0e10cSrcweir 88cdf0e10cSrcweir kAboutData->addAuthor( ki18n( "Jan Holesovsky" ), 89cdf0e10cSrcweir ki18n( "Original author and maintainer of the KDE NWF." ), 90cdf0e10cSrcweir "kendy@artax.karlin.mff.cuni.cz", 91cdf0e10cSrcweir "http://artax.karlin.mff.cuni.cz/~kendy" ); 92cdf0e10cSrcweir kAboutData->addAuthor( ki18n("Roman Shtylman"), 93cdf0e10cSrcweir ki18n( "Porting to KDE 4." ), 94cdf0e10cSrcweir "shtylman@gmail.com", "http://shtylman.com" ); 95cdf0e10cSrcweir kAboutData->addAuthor( ki18n("Eric Bischoff"), 96cdf0e10cSrcweir ki18n( "Accessibility fixes, porting to KDE 4." ), 97cdf0e10cSrcweir "bischoff@kde.org" ); 98cdf0e10cSrcweir 99cdf0e10cSrcweir //kAboutData->setProgramIconName("OpenOffice"); 100cdf0e10cSrcweir 101cdf0e10cSrcweir m_nFakeCmdLineArgs = 1; 102cdf0e10cSrcweir int nIdx; 103cdf0e10cSrcweir vos::OExtCommandLine aCommandLine; 104cdf0e10cSrcweir int nParams = aCommandLine.getCommandArgCount(); 105cdf0e10cSrcweir rtl::OString aDisplay; 106cdf0e10cSrcweir rtl::OUString aParam, aBin; 107cdf0e10cSrcweir 108cdf0e10cSrcweir for ( nIdx = 0; nIdx < nParams; ++nIdx ) 109cdf0e10cSrcweir { 110cdf0e10cSrcweir aCommandLine.getCommandArg( nIdx, aParam ); 111cdf0e10cSrcweir if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams ) 112cdf0e10cSrcweir { 113cdf0e10cSrcweir aCommandLine.getCommandArg( nIdx + 1, aParam ); 114cdf0e10cSrcweir aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() ); 115cdf0e10cSrcweir 116cdf0e10cSrcweir m_nFakeCmdLineArgs = 3; 117cdf0e10cSrcweir m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; 118cdf0e10cSrcweir m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" ); 119cdf0e10cSrcweir m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() ); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir } 122cdf0e10cSrcweir if ( !m_pFreeCmdLineArgs ) 123cdf0e10cSrcweir m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; 124cdf0e10cSrcweir 125cdf0e10cSrcweir osl_getExecutableFile( &aParam.pData ); 126cdf0e10cSrcweir osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData ); 127cdf0e10cSrcweir rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() ); 128cdf0e10cSrcweir m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() ); 129cdf0e10cSrcweir 130cdf0e10cSrcweir // make a copy of the string list for freeing it since 131cdf0e10cSrcweir // KApplication manipulates the pointers inside the argument vector 132cdf0e10cSrcweir // note: KApplication bad ! 133cdf0e10cSrcweir m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ]; 134cdf0e10cSrcweir for( int i = 0; i < m_nFakeCmdLineArgs; i++ ) 135cdf0e10cSrcweir m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i]; 136cdf0e10cSrcweir 137cdf0e10cSrcweir KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData ); 138cdf0e10cSrcweir 139cdf0e10cSrcweir m_pApplication = new VCLKDEApplication(); 140cdf0e10cSrcweir kapp->disableSessionManagement(); 141cdf0e10cSrcweir KApplication::setQuitOnLastWindowClosed(false); 142cdf0e10cSrcweir 143cdf0e10cSrcweir Display* pDisp = QX11Info::display(); 144cdf0e10cSrcweir SalKDEDisplay *pSalDisplay = new SalKDEDisplay(pDisp); 145cdf0e10cSrcweir 146cdf0e10cSrcweir ((VCLKDEApplication*)m_pApplication)->disp = pSalDisplay; 147cdf0e10cSrcweir 148cdf0e10cSrcweir pInputMethod->CreateMethod( pDisp ); 149cdf0e10cSrcweir pInputMethod->AddConnectionWatch( pDisp, (void*)this ); 150cdf0e10cSrcweir pSalDisplay->SetInputMethod( pInputMethod ); 151cdf0e10cSrcweir 152cdf0e10cSrcweir PushXErrorLevel( true ); 153cdf0e10cSrcweir SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp ); 154cdf0e10cSrcweir XSync( pDisp, False ); 155cdf0e10cSrcweir 156cdf0e10cSrcweir pKbdExtension->UseExtension( ! HasXErrorOccured() ); 157cdf0e10cSrcweir PopXErrorLevel(); 158cdf0e10cSrcweir 159cdf0e10cSrcweir pSalDisplay->SetKbdExtension( pKbdExtension ); 160cdf0e10cSrcweir } 161cdf0e10cSrcweir 162cdf0e10cSrcweir void KDEXLib::doStartup() 163cdf0e10cSrcweir { 164cdf0e10cSrcweir if( ! m_bStartupDone ) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir KStartupInfo::appStarted(); 167cdf0e10cSrcweir m_bStartupDone = true; 168cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1 169cdf0e10cSrcweir fprintf( stderr, "called KStartupInfo::appStarted()\n" ); 170cdf0e10cSrcweir #endif 171cdf0e10cSrcweir } 172cdf0e10cSrcweir } 173