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