xref: /AOO41X/main/vcl/unx/kde4/KDEXLib.cxx (revision bf121af8c1f7c0dd9de1f4f4a4718a7d889f0e41)
19f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
39f62ea84SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
49f62ea84SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
59f62ea84SAndrew Rist  * distributed with this work for additional information
69f62ea84SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
79f62ea84SAndrew Rist  * to you under the Apache License, Version 2.0 (the
89f62ea84SAndrew Rist  * "License"); you may not use this file except in compliance
99f62ea84SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
119f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
139f62ea84SAndrew Rist  * Unless required by applicable law or agreed to in writing,
149f62ea84SAndrew Rist  * software distributed under the License is distributed on an
159f62ea84SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169f62ea84SAndrew Rist  * KIND, either express or implied.  See the License for the
179f62ea84SAndrew Rist  * specific language governing permissions and limitations
189f62ea84SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
209f62ea84SAndrew Rist  *************************************************************/
219f62ea84SAndrew Rist 
229f62ea84SAndrew 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 
KDEXLib()51cdf0e10cSrcweir KDEXLib::KDEXLib() :
52cdf0e10cSrcweir 	SalXLib(),	m_bStartupDone(false), m_pApplication(0),
53cdf0e10cSrcweir 	m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 )
54cdf0e10cSrcweir {
55cdf0e10cSrcweir }
56cdf0e10cSrcweir 
~KDEXLib()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 
Init()71cdf0e10cSrcweir void KDEXLib::Init()
72cdf0e10cSrcweir {
73cdf0e10cSrcweir 	SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod;
74cdf0e10cSrcweir 	pInputMethod->SetLocale();
75cdf0e10cSrcweir 	XrmInitialize();
76cdf0e10cSrcweir 
77288dd0d8SHerbert Dürr 	KAboutData *kAboutData = new KAboutData("Apache OpenOffice",
78cdf0e10cSrcweir 			"kdelibs4",
79288dd0d8SHerbert Dürr 			ki18n( "Apache OpenOffice" ),
80288dd0d8SHerbert Dürr 			"3.4.0",
81288dd0d8SHerbert Dürr 			ki18n( "Apache OpenOffice with KDE Native Widget Support." ),
82288dd0d8SHerbert Dürr 			KAboutData::License_File,
83288dd0d8SHerbert Dürr 			ki18n( "Joint Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Novell, Inc and Apache Software Foundation"),
84288dd0d8SHerbert Dürr 			ki18n( "Apache OpenOffice is an office suite.\n" ),
85*bf121af8SHerbert Dürr 			"http://openoffice.apache.org/",
86288dd0d8SHerbert Dürr 			"ooo-issues@incubator.apache.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 
doStartup()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