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 *************************************************************/
21cdf0e10cSrcweir
22cdf0e10cSrcweir #include <vos/process.hxx>
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "VCLKDEApplication.hxx"
25cdf0e10cSrcweir
26cdf0e10cSrcweir #define Region QtXRegion
27cdf0e10cSrcweir
28cdf0e10cSrcweir #include <kapplication.h>
29cdf0e10cSrcweir #include <klocale.h>
30cdf0e10cSrcweir #include <kaboutdata.h>
31cdf0e10cSrcweir #include <kcmdlineargs.h>
32cdf0e10cSrcweir #include <kstartupinfo.h>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #undef Region
35cdf0e10cSrcweir
36cdf0e10cSrcweir #include "KDEXLib.hxx"
37cdf0e10cSrcweir
38cdf0e10cSrcweir #include <unx/i18n_im.hxx>
39cdf0e10cSrcweir #include <unx/i18n_xkb.hxx>
40cdf0e10cSrcweir
41cdf0e10cSrcweir #include <unx/saldata.hxx>
42cdf0e10cSrcweir
43cdf0e10cSrcweir #include "KDESalDisplay.hxx"
44cdf0e10cSrcweir
45cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
46cdf0e10cSrcweir #include <stdio.h>
47cdf0e10cSrcweir #endif
48cdf0e10cSrcweir
KDEXLib()49cdf0e10cSrcweir KDEXLib::KDEXLib() :
50cdf0e10cSrcweir SalXLib(), m_bStartupDone(false), m_pApplication(0),
51cdf0e10cSrcweir m_pFreeCmdLineArgs(0), m_pAppCmdLineArgs(0), m_nFakeCmdLineArgs( 0 )
52cdf0e10cSrcweir {
53cdf0e10cSrcweir }
54cdf0e10cSrcweir
~KDEXLib()55cdf0e10cSrcweir KDEXLib::~KDEXLib()
56cdf0e10cSrcweir {
57cdf0e10cSrcweir delete (VCLKDEApplication*)m_pApplication;
58cdf0e10cSrcweir
59cdf0e10cSrcweir // free the faked cmdline arguments no longer needed by KApplication
60cdf0e10cSrcweir for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
61cdf0e10cSrcweir {
62cdf0e10cSrcweir free( m_pFreeCmdLineArgs[i] );
63cdf0e10cSrcweir }
64cdf0e10cSrcweir
65cdf0e10cSrcweir delete [] m_pFreeCmdLineArgs;
66cdf0e10cSrcweir delete [] m_pAppCmdLineArgs;
67cdf0e10cSrcweir }
68cdf0e10cSrcweir
Init()69cdf0e10cSrcweir void KDEXLib::Init()
70cdf0e10cSrcweir {
71cdf0e10cSrcweir SalI18N_InputMethod* pInputMethod = new SalI18N_InputMethod;
72cdf0e10cSrcweir pInputMethod->SetLocale();
73cdf0e10cSrcweir XrmInitialize();
74cdf0e10cSrcweir
75557fdb96Sdamjan KAboutData *kAboutData = new KAboutData("OpenOffice",
76cdf0e10cSrcweir "kdelibs4",
77288dd0d8SHerbert Dürr ki18n( "Apache OpenOffice" ),
787b4f4066Spfg "4.2.0",
79288dd0d8SHerbert Dürr ki18n( "Apache OpenOffice with KDE Native Widget Support." ),
80288dd0d8SHerbert Dürr KAboutData::License_File,
81288dd0d8SHerbert Dürr ki18n( "Joint Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Novell, Inc and Apache Software Foundation"),
82288dd0d8SHerbert Dürr ki18n( "Apache OpenOffice is an office suite.\n" ),
83bf121af8SHerbert Dürr "http://openoffice.apache.org/",
847b4f4066Spfg "issues@openoffice.apache.org" );
85cdf0e10cSrcweir
86cdf0e10cSrcweir kAboutData->addAuthor( ki18n( "Jan Holesovsky" ),
87cdf0e10cSrcweir ki18n( "Original author and maintainer of the KDE NWF." ),
88cdf0e10cSrcweir "kendy@artax.karlin.mff.cuni.cz",
89cdf0e10cSrcweir "http://artax.karlin.mff.cuni.cz/~kendy" );
90cdf0e10cSrcweir kAboutData->addAuthor( ki18n("Roman Shtylman"),
91cdf0e10cSrcweir ki18n( "Porting to KDE 4." ),
92cdf0e10cSrcweir "shtylman@gmail.com", "http://shtylman.com" );
93cdf0e10cSrcweir kAboutData->addAuthor( ki18n("Eric Bischoff"),
94cdf0e10cSrcweir ki18n( "Accessibility fixes, porting to KDE 4." ),
95cdf0e10cSrcweir "bischoff@kde.org" );
96cdf0e10cSrcweir
97cdf0e10cSrcweir //kAboutData->setProgramIconName("OpenOffice");
98cdf0e10cSrcweir
99cdf0e10cSrcweir m_nFakeCmdLineArgs = 1;
100cdf0e10cSrcweir int nIdx;
101cdf0e10cSrcweir vos::OExtCommandLine aCommandLine;
102cdf0e10cSrcweir int nParams = aCommandLine.getCommandArgCount();
103cdf0e10cSrcweir rtl::OString aDisplay;
104cdf0e10cSrcweir rtl::OUString aParam, aBin;
105cdf0e10cSrcweir
106cdf0e10cSrcweir for ( nIdx = 0; nIdx < nParams; ++nIdx )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir aCommandLine.getCommandArg( nIdx, aParam );
109cdf0e10cSrcweir if ( !m_pFreeCmdLineArgs && aParam.equalsAscii( "-display" ) && nIdx + 1 < nParams )
110cdf0e10cSrcweir {
111cdf0e10cSrcweir aCommandLine.getCommandArg( nIdx + 1, aParam );
112cdf0e10cSrcweir aDisplay = rtl::OUStringToOString( aParam, osl_getThreadTextEncoding() );
113cdf0e10cSrcweir
114cdf0e10cSrcweir m_nFakeCmdLineArgs = 3;
115cdf0e10cSrcweir m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
116cdf0e10cSrcweir m_pFreeCmdLineArgs[ 1 ] = strdup( "-display" );
117cdf0e10cSrcweir m_pFreeCmdLineArgs[ 2 ] = strdup( aDisplay.getStr() );
118cdf0e10cSrcweir }
119cdf0e10cSrcweir }
120cdf0e10cSrcweir if ( !m_pFreeCmdLineArgs )
121cdf0e10cSrcweir m_pFreeCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
122cdf0e10cSrcweir
123cdf0e10cSrcweir osl_getExecutableFile( &aParam.pData );
124cdf0e10cSrcweir osl_getSystemPathFromFileURL( aParam.pData, &aBin.pData );
125cdf0e10cSrcweir rtl::OString aExec = rtl::OUStringToOString( aBin, osl_getThreadTextEncoding() );
126cdf0e10cSrcweir m_pFreeCmdLineArgs[0] = strdup( aExec.getStr() );
127cdf0e10cSrcweir
128cdf0e10cSrcweir // make a copy of the string list for freeing it since
129cdf0e10cSrcweir // KApplication manipulates the pointers inside the argument vector
130cdf0e10cSrcweir // note: KApplication bad !
131cdf0e10cSrcweir m_pAppCmdLineArgs = new char*[ m_nFakeCmdLineArgs ];
132cdf0e10cSrcweir for( int i = 0; i < m_nFakeCmdLineArgs; i++ )
133cdf0e10cSrcweir m_pAppCmdLineArgs[i] = m_pFreeCmdLineArgs[i];
134cdf0e10cSrcweir
135cdf0e10cSrcweir KCmdLineArgs::init( m_nFakeCmdLineArgs, m_pAppCmdLineArgs, kAboutData );
136cdf0e10cSrcweir
137cdf0e10cSrcweir m_pApplication = new VCLKDEApplication();
138cdf0e10cSrcweir kapp->disableSessionManagement();
139cdf0e10cSrcweir KApplication::setQuitOnLastWindowClosed(false);
140cdf0e10cSrcweir
141cdf0e10cSrcweir Display* pDisp = QX11Info::display();
142cdf0e10cSrcweir SalKDEDisplay *pSalDisplay = new SalKDEDisplay(pDisp);
143cdf0e10cSrcweir
144cdf0e10cSrcweir ((VCLKDEApplication*)m_pApplication)->disp = pSalDisplay;
145cdf0e10cSrcweir
146cdf0e10cSrcweir pInputMethod->CreateMethod( pDisp );
147cdf0e10cSrcweir pInputMethod->AddConnectionWatch( pDisp, (void*)this );
148cdf0e10cSrcweir pSalDisplay->SetInputMethod( pInputMethod );
149cdf0e10cSrcweir
150cdf0e10cSrcweir PushXErrorLevel( true );
151cdf0e10cSrcweir SalI18N_KeyboardExtension *pKbdExtension = new SalI18N_KeyboardExtension( pDisp );
152cdf0e10cSrcweir XSync( pDisp, False );
153cdf0e10cSrcweir
154cdf0e10cSrcweir pKbdExtension->UseExtension( ! HasXErrorOccured() );
155cdf0e10cSrcweir PopXErrorLevel();
156cdf0e10cSrcweir
157cdf0e10cSrcweir pSalDisplay->SetKbdExtension( pKbdExtension );
158cdf0e10cSrcweir }
159cdf0e10cSrcweir
doStartup()160cdf0e10cSrcweir void KDEXLib::doStartup()
161cdf0e10cSrcweir {
162cdf0e10cSrcweir if( ! m_bStartupDone )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir KStartupInfo::appStarted();
165cdf0e10cSrcweir m_bStartupDone = true;
166cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
167cdf0e10cSrcweir fprintf( stderr, "called KStartupInfo::appStarted()\n" );
168cdf0e10cSrcweir #endif
169cdf0e10cSrcweir }
170cdf0e10cSrcweir }
171*a89ff907Smseidel
172*a89ff907Smseidel /* vim: set noet sw=4 ts=4: */
173