xref: /trunk/main/vcl/unx/kde4/KDEXLib.cxx (revision a89ff9078abb366bc00625aa098662a5b9455273)
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