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