1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_vcl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir //#include "svsys.h" 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir #include "comphelper/processfactory.hxx" 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include "osl/module.h" 36*cdf0e10cSrcweir #include "osl/file.hxx" 37*cdf0e10cSrcweir #include "osl/thread.h" 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #include "rtl/tencinfo.h" 40*cdf0e10cSrcweir #include "rtl/instance.hxx" 41*cdf0e10cSrcweir 42*cdf0e10cSrcweir #include "vos/process.hxx" 43*cdf0e10cSrcweir #include "vos/mutex.hxx" 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir #include "tools/tools.h" 46*cdf0e10cSrcweir #include "tools/debug.hxx" 47*cdf0e10cSrcweir #include "tools/time.hxx" 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir #include "i18npool/mslangid.hxx" 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir #include "unotools/syslocaleoptions.hxx" 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir #include "vcl/settings.hxx" 54*cdf0e10cSrcweir #include "vcl/keycod.hxx" 55*cdf0e10cSrcweir #include "vcl/event.hxx" 56*cdf0e10cSrcweir #include "vcl/vclevent.hxx" 57*cdf0e10cSrcweir #include "vcl/virdev.hxx" 58*cdf0e10cSrcweir #include "vcl/wrkwin.hxx" 59*cdf0e10cSrcweir #include "vcl/svapp.hxx" 60*cdf0e10cSrcweir #include "vcl/cvtgrf.hxx" 61*cdf0e10cSrcweir #include "vcl/unowrap.hxx" 62*cdf0e10cSrcweir #include "vcl/timer.hxx" 63*cdf0e10cSrcweir #include "vcl/unohelp.hxx" 64*cdf0e10cSrcweir #include "vcl/lazydelete.hxx" 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir #include "salinst.hxx" 67*cdf0e10cSrcweir #include "salframe.hxx" 68*cdf0e10cSrcweir #include "salsys.hxx" 69*cdf0e10cSrcweir #include "svdata.hxx" 70*cdf0e10cSrcweir #include "salimestatus.hxx" 71*cdf0e10cSrcweir #include "xconnection.hxx" 72*cdf0e10cSrcweir #include "window.h" 73*cdf0e10cSrcweir #include "accmgr.hxx" 74*cdf0e10cSrcweir #include "idlemgr.hxx" 75*cdf0e10cSrcweir #include "svids.hrc" 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir #include "com/sun/star/uno/Reference.h" 78*cdf0e10cSrcweir #include "com/sun/star/awt/XToolkit.hpp" 79*cdf0e10cSrcweir #include "com/sun/star/uno/XNamingService.hpp" 80*cdf0e10cSrcweir #include "com/sun/star/lang/XMultiServiceFactory.hpp" 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir #include <utility> 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir // keycodes handled internally by VCL 87*cdf0e10cSrcweir class ImplReservedKey 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir public: 90*cdf0e10cSrcweir ImplReservedKey( KeyCode aKeyCode, sal_uInt16 nResId ) : 91*cdf0e10cSrcweir mKeyCode(aKeyCode), mnResId( nResId) 92*cdf0e10cSrcweir {} 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir KeyCode mKeyCode; 95*cdf0e10cSrcweir sal_uInt16 mnResId; 96*cdf0e10cSrcweir }; 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir typedef std::pair<ImplReservedKey*, size_t> ReservedKeys; 99*cdf0e10cSrcweir namespace 100*cdf0e10cSrcweir { 101*cdf0e10cSrcweir struct ImplReservedKeysImpl 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir ReservedKeys* operator()() 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir static ImplReservedKey ImplReservedKeys[] = 106*cdf0e10cSrcweir { 107*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F1,0), SV_SHORTCUT_HELP), 108*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F1,KEY_SHIFT), SV_SHORTCUT_ACTIVEHELP), 109*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F1,KEY_MOD1), SV_SHORTCUT_CONTEXTHELP), 110*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F2,KEY_SHIFT), SV_SHORTCUT_CONTEXTHELP), 111*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F4,KEY_MOD1), SV_SHORTCUT_DOCKUNDOCK), 112*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F4,KEY_MOD2), SV_SHORTCUT_DOCKUNDOCK), 113*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F4,KEY_MOD1|KEY_MOD2), SV_SHORTCUT_DOCKUNDOCK), 114*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F6,0), SV_SHORTCUT_NEXTSUBWINDOW), 115*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F6,KEY_MOD1), SV_SHORTCUT_TODOCUMENT), 116*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F6,KEY_SHIFT), SV_SHORTCUT_PREVSUBWINDOW), 117*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F6,KEY_MOD1|KEY_SHIFT), SV_SHORTCUT_SPLITTER), 118*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_F10,0), SV_SHORTCUT_MENUBAR) 119*cdf0e10cSrcweir #ifdef UNX 120*cdf0e10cSrcweir , 121*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_1,KEY_SHIFT|KEY_MOD1), 0), 122*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_2,KEY_SHIFT|KEY_MOD1), 0), 123*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_3,KEY_SHIFT|KEY_MOD1), 0), 124*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_4,KEY_SHIFT|KEY_MOD1), 0), 125*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_5,KEY_SHIFT|KEY_MOD1), 0), 126*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_6,KEY_SHIFT|KEY_MOD1), 0), 127*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_7,KEY_SHIFT|KEY_MOD1), 0), 128*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_8,KEY_SHIFT|KEY_MOD1), 0), 129*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_9,KEY_SHIFT|KEY_MOD1), 0), 130*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_0,KEY_SHIFT|KEY_MOD1), 0), 131*cdf0e10cSrcweir ImplReservedKey(KeyCode(KEY_ADD,KEY_SHIFT|KEY_MOD1), 0) 132*cdf0e10cSrcweir #endif 133*cdf0e10cSrcweir }; 134*cdf0e10cSrcweir static ReservedKeys aKeys 135*cdf0e10cSrcweir ( 136*cdf0e10cSrcweir &ImplReservedKeys[0], 137*cdf0e10cSrcweir sizeof(ImplReservedKeys) / sizeof(ImplReservedKey) 138*cdf0e10cSrcweir ); 139*cdf0e10cSrcweir return &aKeys; 140*cdf0e10cSrcweir } 141*cdf0e10cSrcweir }; 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir struct ImplReservedKeys 144*cdf0e10cSrcweir : public rtl::StaticAggregate<ReservedKeys, ImplReservedKeysImpl> {}; 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir // #include <usr/refl.hxx> 149*cdf0e10cSrcweir class Reflection; 150*cdf0e10cSrcweir 151*cdf0e10cSrcweir 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir extern "C" { 154*cdf0e10cSrcweir typedef UnoWrapperBase* (SAL_CALL *FN_TkCreateUnoWrapper)(); 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir // ======================================================================= 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir // -------------- 160*cdf0e10cSrcweir // - ImplHotKey - 161*cdf0e10cSrcweir // -------------- 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir struct ImplHotKey 164*cdf0e10cSrcweir { 165*cdf0e10cSrcweir ImplHotKey* mpNext; 166*cdf0e10cSrcweir void* mpUserData; 167*cdf0e10cSrcweir KeyCode maKeyCode; 168*cdf0e10cSrcweir Link maLink; 169*cdf0e10cSrcweir }; 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir // ======================================================================= 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir // ----------------- 174*cdf0e10cSrcweir // - ImplEventHook - 175*cdf0e10cSrcweir // ----------------- 176*cdf0e10cSrcweir 177*cdf0e10cSrcweir struct ImplEventHook 178*cdf0e10cSrcweir { 179*cdf0e10cSrcweir ImplEventHook* mpNext; 180*cdf0e10cSrcweir void* mpUserData; 181*cdf0e10cSrcweir VCLEventHookProc mpProc; 182*cdf0e10cSrcweir }; 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir // ======================================================================= 185*cdf0e10cSrcweir 186*cdf0e10cSrcweir // --------------------- 187*cdf0e10cSrcweir // - ImplPostEventData - 188*cdf0e10cSrcweir // --------------------- 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir struct ImplPostEventData 191*cdf0e10cSrcweir { 192*cdf0e10cSrcweir sal_uLong mnEvent; 193*cdf0e10cSrcweir const Window* mpWin; 194*cdf0e10cSrcweir sal_uLong mnEventId; 195*cdf0e10cSrcweir KeyEvent maKeyEvent; 196*cdf0e10cSrcweir MouseEvent maMouseEvent; 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir 199*cdf0e10cSrcweir ImplPostEventData( sal_uLong nEvent, const Window* pWin, const KeyEvent& rKeyEvent ) : 200*cdf0e10cSrcweir mnEvent( nEvent ), mpWin( pWin ), mnEventId( 0 ), maKeyEvent( rKeyEvent ) {} 201*cdf0e10cSrcweir ImplPostEventData( sal_uLong nEvent, const Window* pWin, const MouseEvent& rMouseEvent ) : 202*cdf0e10cSrcweir mnEvent( nEvent ), mpWin( pWin ), mnEventId( 0 ), maMouseEvent( rMouseEvent ) {} 203*cdf0e10cSrcweir 204*cdf0e10cSrcweir ~ImplPostEventData() {} 205*cdf0e10cSrcweir }; 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir typedef ::std::pair< Window*, ImplPostEventData* > ImplPostEventPair; 208*cdf0e10cSrcweir 209*cdf0e10cSrcweir static ::std::list< ImplPostEventPair > aPostedEventList; 210*cdf0e10cSrcweir 211*cdf0e10cSrcweir // ======================================================================= 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir Application* GetpApp() 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 216*cdf0e10cSrcweir if ( !pSVData ) 217*cdf0e10cSrcweir return NULL; 218*cdf0e10cSrcweir return pSVData->mpApp; 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir 221*cdf0e10cSrcweir // ----------------------------------------------------------------------- 222*cdf0e10cSrcweir 223*cdf0e10cSrcweir Application::Application() 224*cdf0e10cSrcweir { 225*cdf0e10cSrcweir if( ! ImplGetSVData() ) 226*cdf0e10cSrcweir ImplInitSVData(); 227*cdf0e10cSrcweir ImplGetSVData()->mpApp = this; 228*cdf0e10cSrcweir InitSalData(); 229*cdf0e10cSrcweir } 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir // ----------------------------------------------------------------------- 232*cdf0e10cSrcweir 233*cdf0e10cSrcweir Application::~Application() 234*cdf0e10cSrcweir { 235*cdf0e10cSrcweir ImplDeInitSVData(); 236*cdf0e10cSrcweir DeInitSalData(); 237*cdf0e10cSrcweir ImplGetSVData()->mpApp = NULL; 238*cdf0e10cSrcweir ImplDestroySVData(); 239*cdf0e10cSrcweir GlobalDeInitTools(); 240*cdf0e10cSrcweir } 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir // ----------------------------------------------------------------------- 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir void Application::InitAppRes( const ResId& ) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir // ----------------------------------------------------------------------- 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir sal_Bool Application::QueryExit() 251*cdf0e10cSrcweir { 252*cdf0e10cSrcweir WorkWindow* pAppWin = ImplGetSVData()->maWinData.mpAppWin; 253*cdf0e10cSrcweir 254*cdf0e10cSrcweir // Aufruf des Close-Handlers des Applikationsfensters 255*cdf0e10cSrcweir if ( pAppWin ) 256*cdf0e10cSrcweir return pAppWin->Close(); 257*cdf0e10cSrcweir else 258*cdf0e10cSrcweir return sal_True; 259*cdf0e10cSrcweir } 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir // ----------------------------------------------------------------------- 262*cdf0e10cSrcweir 263*cdf0e10cSrcweir void Application::UserEvent( sal_uLong, void* ) 264*cdf0e10cSrcweir { 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir // ----------------------------------------------------------------------- 268*cdf0e10cSrcweir 269*cdf0e10cSrcweir void Application::ShowStatusText( const XubString& ) 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir // ----------------------------------------------------------------------- 274*cdf0e10cSrcweir 275*cdf0e10cSrcweir void Application::ShowHelpStatusText( const XubString& ) 276*cdf0e10cSrcweir { 277*cdf0e10cSrcweir } 278*cdf0e10cSrcweir 279*cdf0e10cSrcweir // ----------------------------------------------------------------------- 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir void Application::ActivateExtHelp() 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir 285*cdf0e10cSrcweir // ----------------------------------------------------------------------- 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir void Application::DeactivateExtHelp() 288*cdf0e10cSrcweir { 289*cdf0e10cSrcweir } 290*cdf0e10cSrcweir 291*cdf0e10cSrcweir // ----------------------------------------------------------------------- 292*cdf0e10cSrcweir 293*cdf0e10cSrcweir void Application::HideStatusText() 294*cdf0e10cSrcweir { 295*cdf0e10cSrcweir } 296*cdf0e10cSrcweir 297*cdf0e10cSrcweir // ----------------------------------------------------------------------- 298*cdf0e10cSrcweir 299*cdf0e10cSrcweir void Application::HideHelpStatusText() 300*cdf0e10cSrcweir { 301*cdf0e10cSrcweir } 302*cdf0e10cSrcweir 303*cdf0e10cSrcweir // ----------------------------------------------------------------------- 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir void Application::FocusChanged() 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir // ----------------------------------------------------------------------- 310*cdf0e10cSrcweir 311*cdf0e10cSrcweir void Application::DataChanged( const DataChangedEvent& ) 312*cdf0e10cSrcweir { 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir // ----------------------------------------------------------------------- 316*cdf0e10cSrcweir void Application::Init() 317*cdf0e10cSrcweir { 318*cdf0e10cSrcweir } 319*cdf0e10cSrcweir 320*cdf0e10cSrcweir // ----------------------------------------------------------------------- 321*cdf0e10cSrcweir 322*cdf0e10cSrcweir void Application::DeInit() 323*cdf0e10cSrcweir { 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir 326*cdf0e10cSrcweir // ----------------------------------------------------------------------- 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir sal_uInt16 Application::GetCommandLineParamCount() 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir vos::OStartupInfo aStartInfo; 331*cdf0e10cSrcweir return (sal_uInt16)aStartInfo.getCommandArgCount(); 332*cdf0e10cSrcweir } 333*cdf0e10cSrcweir 334*cdf0e10cSrcweir // ----------------------------------------------------------------------- 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir XubString Application::GetCommandLineParam( sal_uInt16 nParam ) 337*cdf0e10cSrcweir { 338*cdf0e10cSrcweir vos::OStartupInfo aStartInfo; 339*cdf0e10cSrcweir rtl::OUString aParam; 340*cdf0e10cSrcweir aStartInfo.getCommandArg( nParam, aParam ); 341*cdf0e10cSrcweir return XubString( aParam ); 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir 344*cdf0e10cSrcweir // ----------------------------------------------------------------------- 345*cdf0e10cSrcweir 346*cdf0e10cSrcweir const XubString& Application::GetAppFileName() 347*cdf0e10cSrcweir { 348*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 349*cdf0e10cSrcweir DBG_ASSERT( pSVData->maAppData.mpAppFileName, "AppFileName vor SVMain ?!" ); 350*cdf0e10cSrcweir if ( pSVData->maAppData.mpAppFileName ) 351*cdf0e10cSrcweir return *pSVData->maAppData.mpAppFileName; 352*cdf0e10cSrcweir 353*cdf0e10cSrcweir /* 354*cdf0e10cSrcweir * #91147# provide a fallback for people without initialized 355*cdf0e10cSrcweir * vcl here (like setup in responsefile mode) 356*cdf0e10cSrcweir */ 357*cdf0e10cSrcweir static String aAppFileName; 358*cdf0e10cSrcweir if( !aAppFileName.Len() ) 359*cdf0e10cSrcweir { 360*cdf0e10cSrcweir vos::OStartupInfo aStartInfo; 361*cdf0e10cSrcweir ::rtl::OUString aExeFileName; 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir aStartInfo.getExecutableFile( aExeFileName ); 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir // convert path to native file format 366*cdf0e10cSrcweir rtl::OUString aNativeFileName; 367*cdf0e10cSrcweir osl::FileBase::getSystemPathFromFileURL( aExeFileName, aNativeFileName ); 368*cdf0e10cSrcweir aAppFileName = aNativeFileName; 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir return aAppFileName; 372*cdf0e10cSrcweir } 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir // ----------------------------------------------------------------------- 375*cdf0e10cSrcweir 376*cdf0e10cSrcweir sal_uInt16 Application::Exception( sal_uInt16 nError ) 377*cdf0e10cSrcweir { 378*cdf0e10cSrcweir switch ( nError & EXC_MAJORTYPE ) 379*cdf0e10cSrcweir { 380*cdf0e10cSrcweir // Bei System machen wir nichts und lassen dem System den 381*cdf0e10cSrcweir // vortritt 382*cdf0e10cSrcweir case EXC_SYSTEM: 383*cdf0e10cSrcweir return 0; 384*cdf0e10cSrcweir 385*cdf0e10cSrcweir case EXC_DISPLAY: 386*cdf0e10cSrcweir case EXC_REMOTE: 387*cdf0e10cSrcweir return 0; 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir #ifdef DBG_UTIL 390*cdf0e10cSrcweir case EXC_RSCNOTLOADED: 391*cdf0e10cSrcweir Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "Resource not loaded" ) ) ); 392*cdf0e10cSrcweir break; 393*cdf0e10cSrcweir case EXC_SYSOBJNOTCREATED: 394*cdf0e10cSrcweir Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "System Object not created" ) ) ); 395*cdf0e10cSrcweir break; 396*cdf0e10cSrcweir default: 397*cdf0e10cSrcweir Abort( XubString( RTL_CONSTASCII_USTRINGPARAM( "Unknown Error" ) ) ); 398*cdf0e10cSrcweir break; 399*cdf0e10cSrcweir #else 400*cdf0e10cSrcweir default: 401*cdf0e10cSrcweir Abort( ImplGetSVEmptyStr() ); 402*cdf0e10cSrcweir break; 403*cdf0e10cSrcweir #endif 404*cdf0e10cSrcweir } 405*cdf0e10cSrcweir 406*cdf0e10cSrcweir return 0; 407*cdf0e10cSrcweir } 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir // ----------------------------------------------------------------------- 410*cdf0e10cSrcweir 411*cdf0e10cSrcweir void Application::Abort( const XubString& rErrorText ) 412*cdf0e10cSrcweir { 413*cdf0e10cSrcweir SalAbort( rErrorText ); 414*cdf0e10cSrcweir } 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir // ----------------------------------------------------------------------- 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir sal_uLong Application::GetReservedKeyCodeCount() 419*cdf0e10cSrcweir { 420*cdf0e10cSrcweir return ImplReservedKeys::get()->second; 421*cdf0e10cSrcweir } 422*cdf0e10cSrcweir 423*cdf0e10cSrcweir const KeyCode* Application::GetReservedKeyCode( sal_uLong i ) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir if( i >= GetReservedKeyCodeCount() ) 426*cdf0e10cSrcweir return NULL; 427*cdf0e10cSrcweir else 428*cdf0e10cSrcweir return &ImplReservedKeys::get()->first[i].mKeyCode; 429*cdf0e10cSrcweir } 430*cdf0e10cSrcweir 431*cdf0e10cSrcweir String Application::GetReservedKeyCodeDescription( sal_uLong i ) 432*cdf0e10cSrcweir { 433*cdf0e10cSrcweir ResMgr* pResMgr = ImplGetResMgr(); 434*cdf0e10cSrcweir if( ! pResMgr ) 435*cdf0e10cSrcweir return String(); 436*cdf0e10cSrcweir ImplReservedKey *pImplReservedKeys = ImplReservedKeys::get()->first; 437*cdf0e10cSrcweir if( i >= GetReservedKeyCodeCount() || ! pImplReservedKeys[i].mnResId ) 438*cdf0e10cSrcweir return String(); 439*cdf0e10cSrcweir else 440*cdf0e10cSrcweir return String( ResId( pImplReservedKeys[i].mnResId, *pResMgr ) ); 441*cdf0e10cSrcweir } 442*cdf0e10cSrcweir 443*cdf0e10cSrcweir // ----------------------------------------------------------------------- 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir void Application::Execute() 446*cdf0e10cSrcweir { 447*cdf0e10cSrcweir DBG_STARTAPPEXECUTE(); 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 450*cdf0e10cSrcweir pSVData->maAppData.mbInAppExecute = sal_True; 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir while ( !pSVData->maAppData.mbAppQuit ) 453*cdf0e10cSrcweir Application::Yield(); 454*cdf0e10cSrcweir 455*cdf0e10cSrcweir pSVData->maAppData.mbInAppExecute = sal_False; 456*cdf0e10cSrcweir 457*cdf0e10cSrcweir DBG_ENDAPPEXECUTE(); 458*cdf0e10cSrcweir } 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir // ----------------------------------------------------------------------- 461*cdf0e10cSrcweir 462*cdf0e10cSrcweir inline void ImplYield( bool i_bWait, bool i_bAllEvents ) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 465*cdf0e10cSrcweir 466*cdf0e10cSrcweir // run timers that have timed out 467*cdf0e10cSrcweir if ( !pSVData->mbNoCallTimer ) 468*cdf0e10cSrcweir while ( pSVData->mbNotAllTimerCalled ) 469*cdf0e10cSrcweir Timer::ImplTimerCallbackProc(); 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir pSVData->maAppData.mnDispatchLevel++; 472*cdf0e10cSrcweir // do not wait for events if application was already quit; in that 473*cdf0e10cSrcweir // case only dispatch events already available 474*cdf0e10cSrcweir // do not wait for events either if the app decided that it is too busy for timers 475*cdf0e10cSrcweir // (feature added for the slideshow) 476*cdf0e10cSrcweir pSVData->mpDefInst->Yield( i_bWait && !pSVData->maAppData.mbAppQuit && !pSVData->maAppData.mbNoYield, i_bAllEvents ); 477*cdf0e10cSrcweir pSVData->maAppData.mnDispatchLevel--; 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir // flush lazy deleted objects 480*cdf0e10cSrcweir if( pSVData->maAppData.mnDispatchLevel == 0 ) 481*cdf0e10cSrcweir vcl::LazyDelete::flush(); 482*cdf0e10cSrcweir 483*cdf0e10cSrcweir // the system timer events will not necesseraly come in in non waiting mode 484*cdf0e10cSrcweir // e.g. on aqua; need to trigger timer checks manually 485*cdf0e10cSrcweir if( pSVData->maAppData.mbNoYield && !pSVData->mbNoCallTimer ) 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir do 488*cdf0e10cSrcweir { 489*cdf0e10cSrcweir Timer::ImplTimerCallbackProc(); 490*cdf0e10cSrcweir } 491*cdf0e10cSrcweir while( pSVData->mbNotAllTimerCalled ); 492*cdf0e10cSrcweir } 493*cdf0e10cSrcweir 494*cdf0e10cSrcweir // call post yield listeners 495*cdf0e10cSrcweir if( pSVData->maAppData.mpPostYieldListeners ) 496*cdf0e10cSrcweir pSVData->maAppData.mpPostYieldListeners->callListeners( NULL ); 497*cdf0e10cSrcweir } 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir // ----------------------------------------------------------------------- 500*cdf0e10cSrcweir 501*cdf0e10cSrcweir void Application::Reschedule( bool i_bAllEvents ) 502*cdf0e10cSrcweir { 503*cdf0e10cSrcweir ImplYield( false, i_bAllEvents ); 504*cdf0e10cSrcweir } 505*cdf0e10cSrcweir 506*cdf0e10cSrcweir // ----------------------------------------------------------------------- 507*cdf0e10cSrcweir 508*cdf0e10cSrcweir void Application::Yield( bool i_bAllEvents ) 509*cdf0e10cSrcweir { 510*cdf0e10cSrcweir ImplYield( true, i_bAllEvents ); 511*cdf0e10cSrcweir } 512*cdf0e10cSrcweir 513*cdf0e10cSrcweir // ----------------------------------------------------------------------- 514*cdf0e10cSrcweir 515*cdf0e10cSrcweir IMPL_STATIC_LINK_NOINSTANCE( ImplSVAppData, ImplQuitMsg, void*, EMPTYARG ) 516*cdf0e10cSrcweir { 517*cdf0e10cSrcweir ImplGetSVData()->maAppData.mbAppQuit = sal_True; 518*cdf0e10cSrcweir return 0; 519*cdf0e10cSrcweir } 520*cdf0e10cSrcweir 521*cdf0e10cSrcweir // ----------------------------------------------------------------------- 522*cdf0e10cSrcweir 523*cdf0e10cSrcweir void Application::Quit() 524*cdf0e10cSrcweir { 525*cdf0e10cSrcweir Application::PostUserEvent( STATIC_LINK( NULL, ImplSVAppData, ImplQuitMsg ) ); 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir // ----------------------------------------------------------------------- 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir vos::IMutex& Application::GetSolarMutex() 531*cdf0e10cSrcweir { 532*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 533*cdf0e10cSrcweir return *(pSVData->mpDefInst->GetYieldMutex()); 534*cdf0e10cSrcweir } 535*cdf0e10cSrcweir 536*cdf0e10cSrcweir // ----------------------------------------------------------------------- 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir vos::OThread::TThreadIdentifier Application::GetMainThreadIdentifier() 539*cdf0e10cSrcweir { 540*cdf0e10cSrcweir return ImplGetSVData()->mnMainThreadId; 541*cdf0e10cSrcweir } 542*cdf0e10cSrcweir 543*cdf0e10cSrcweir // ----------------------------------------------------------------------- 544*cdf0e10cSrcweir 545*cdf0e10cSrcweir sal_uLong Application::ReleaseSolarMutex() 546*cdf0e10cSrcweir { 547*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 548*cdf0e10cSrcweir return pSVData->mpDefInst->ReleaseYieldMutex(); 549*cdf0e10cSrcweir } 550*cdf0e10cSrcweir 551*cdf0e10cSrcweir // ----------------------------------------------------------------------- 552*cdf0e10cSrcweir 553*cdf0e10cSrcweir void Application::AcquireSolarMutex( sal_uLong nCount ) 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 556*cdf0e10cSrcweir pSVData->mpDefInst->AcquireYieldMutex( nCount ); 557*cdf0e10cSrcweir } 558*cdf0e10cSrcweir 559*cdf0e10cSrcweir // ----------------------------------------------------------------------- 560*cdf0e10cSrcweir 561*cdf0e10cSrcweir sal_Bool Application::IsInMain() 562*cdf0e10cSrcweir { 563*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mbInAppMain; 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir // ----------------------------------------------------------------------- 567*cdf0e10cSrcweir 568*cdf0e10cSrcweir sal_Bool Application::IsInExecute() 569*cdf0e10cSrcweir { 570*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mbInAppExecute; 571*cdf0e10cSrcweir } 572*cdf0e10cSrcweir 573*cdf0e10cSrcweir // ----------------------------------------------------------------------- 574*cdf0e10cSrcweir 575*cdf0e10cSrcweir sal_Bool Application::IsShutDown() 576*cdf0e10cSrcweir { 577*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mbAppQuit; 578*cdf0e10cSrcweir } 579*cdf0e10cSrcweir 580*cdf0e10cSrcweir // ----------------------------------------------------------------------- 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir sal_Bool Application::IsInModalMode() 583*cdf0e10cSrcweir { 584*cdf0e10cSrcweir return (ImplGetSVData()->maAppData.mnModalMode != 0); 585*cdf0e10cSrcweir } 586*cdf0e10cSrcweir 587*cdf0e10cSrcweir // ----------------------------------------------------------------------- 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir sal_uInt16 Application::GetModalModeCount() 590*cdf0e10cSrcweir { 591*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mnModalMode; 592*cdf0e10cSrcweir } 593*cdf0e10cSrcweir 594*cdf0e10cSrcweir // ----------------------------------------------------------------------- 595*cdf0e10cSrcweir 596*cdf0e10cSrcweir sal_uInt16 Application::GetDispatchLevel() 597*cdf0e10cSrcweir { 598*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mnDispatchLevel; 599*cdf0e10cSrcweir } 600*cdf0e10cSrcweir 601*cdf0e10cSrcweir // ----------------------------------------------------------------------- 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir sal_Bool Application::AnyInput( sal_uInt16 nType ) 604*cdf0e10cSrcweir { 605*cdf0e10cSrcweir return (sal_Bool)ImplGetSVData()->mpDefInst->AnyInput( nType ); 606*cdf0e10cSrcweir } 607*cdf0e10cSrcweir 608*cdf0e10cSrcweir // ----------------------------------------------------------------------- 609*cdf0e10cSrcweir 610*cdf0e10cSrcweir sal_uLong Application::GetLastInputInterval() 611*cdf0e10cSrcweir { 612*cdf0e10cSrcweir return (Time::GetSystemTicks()-ImplGetSVData()->maAppData.mnLastInputTime); 613*cdf0e10cSrcweir } 614*cdf0e10cSrcweir 615*cdf0e10cSrcweir // ----------------------------------------------------------------------- 616*cdf0e10cSrcweir 617*cdf0e10cSrcweir extern int nImplSysDialog; 618*cdf0e10cSrcweir 619*cdf0e10cSrcweir sal_Bool Application::IsUICaptured() 620*cdf0e10cSrcweir { 621*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 622*cdf0e10cSrcweir // Wenn Mouse gecaptured, oder im TrackingModus oder im Auswahlmodus 623*cdf0e10cSrcweir // eines FloatingWindows (wie Menus, Aufklapp-ToolBoxen) soll kein 624*cdf0e10cSrcweir // weiteres Fenster aufgezogen werden 625*cdf0e10cSrcweir // D&D aktive !!! 626*cdf0e10cSrcweir if ( pSVData->maWinData.mpCaptureWin || pSVData->maWinData.mpTrackWin || 627*cdf0e10cSrcweir pSVData->maWinData.mpFirstFloat || nImplSysDialog ) 628*cdf0e10cSrcweir return sal_True; 629*cdf0e10cSrcweir else 630*cdf0e10cSrcweir return sal_False; 631*cdf0e10cSrcweir } 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir // ----------------------------------------------------------------------- 634*cdf0e10cSrcweir 635*cdf0e10cSrcweir sal_Bool Application::IsUserActive( sal_uInt16 nTest ) 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir if ( nTest & (USERACTIVE_MOUSEDRAG | USERACTIVE_INPUT) ) 638*cdf0e10cSrcweir { 639*cdf0e10cSrcweir if ( IsUICaptured() ) 640*cdf0e10cSrcweir return sal_True; 641*cdf0e10cSrcweir } 642*cdf0e10cSrcweir 643*cdf0e10cSrcweir if ( nTest & USERACTIVE_INPUT ) 644*cdf0e10cSrcweir { 645*cdf0e10cSrcweir if ( GetLastInputInterval() < 500 ) 646*cdf0e10cSrcweir return sal_True; 647*cdf0e10cSrcweir 648*cdf0e10cSrcweir if ( AnyInput( INPUT_KEYBOARD ) ) 649*cdf0e10cSrcweir return sal_True; 650*cdf0e10cSrcweir } 651*cdf0e10cSrcweir 652*cdf0e10cSrcweir if ( nTest & USERACTIVE_MODALDIALOG ) 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir if ( ImplGetSVData()->maAppData.mnModalDialog ) 655*cdf0e10cSrcweir return sal_True; 656*cdf0e10cSrcweir } 657*cdf0e10cSrcweir 658*cdf0e10cSrcweir return sal_False; 659*cdf0e10cSrcweir } 660*cdf0e10cSrcweir 661*cdf0e10cSrcweir // ----------------------------------------------------------------------- 662*cdf0e10cSrcweir 663*cdf0e10cSrcweir void Application::SystemSettingsChanging( AllSettings& /*rSettings*/, 664*cdf0e10cSrcweir Window* /*pFrame*/ ) 665*cdf0e10cSrcweir { 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir 668*cdf0e10cSrcweir // ----------------------------------------------------------------------- 669*cdf0e10cSrcweir 670*cdf0e10cSrcweir void Application::MergeSystemSettings( AllSettings& rSettings ) 671*cdf0e10cSrcweir { 672*cdf0e10cSrcweir Window* pWindow = ImplGetSVData()->maWinData.mpFirstFrame; 673*cdf0e10cSrcweir if( ! pWindow ) 674*cdf0e10cSrcweir pWindow = ImplGetDefaultWindow(); 675*cdf0e10cSrcweir if( pWindow ) 676*cdf0e10cSrcweir { 677*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 678*cdf0e10cSrcweir if ( !pSVData->maAppData.mbSettingsInit ) 679*cdf0e10cSrcweir { 680*cdf0e10cSrcweir // side effect: ImplUpdateGlobalSettings does an ImplGetFrame()->UpdateSettings 681*cdf0e10cSrcweir pWindow->ImplUpdateGlobalSettings( *pSVData->maAppData.mpSettings ); 682*cdf0e10cSrcweir pSVData->maAppData.mbSettingsInit = sal_True; 683*cdf0e10cSrcweir } 684*cdf0e10cSrcweir // side effect: ImplUpdateGlobalSettings does an ImplGetFrame()->UpdateSettings 685*cdf0e10cSrcweir pWindow->ImplUpdateGlobalSettings( rSettings, sal_False ); 686*cdf0e10cSrcweir } 687*cdf0e10cSrcweir } 688*cdf0e10cSrcweir 689*cdf0e10cSrcweir // ----------------------------------------------------------------------- 690*cdf0e10cSrcweir 691*cdf0e10cSrcweir bool Application::ValidateSystemFont() 692*cdf0e10cSrcweir { 693*cdf0e10cSrcweir Window* pWindow = ImplGetSVData()->maWinData.mpFirstFrame; 694*cdf0e10cSrcweir if( ! pWindow ) 695*cdf0e10cSrcweir pWindow = ImplGetDefaultWindow(); 696*cdf0e10cSrcweir 697*cdf0e10cSrcweir if( pWindow ) 698*cdf0e10cSrcweir { 699*cdf0e10cSrcweir AllSettings aSettings; 700*cdf0e10cSrcweir pWindow->ImplGetFrame()->UpdateSettings( aSettings ); 701*cdf0e10cSrcweir return pWindow->ImplCheckUIFont( aSettings.GetStyleSettings().GetAppFont() ); 702*cdf0e10cSrcweir } 703*cdf0e10cSrcweir return false; 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir 706*cdf0e10cSrcweir // ----------------------------------------------------------------------- 707*cdf0e10cSrcweir 708*cdf0e10cSrcweir void Application::SetSettings( const AllSettings& rSettings ) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 711*cdf0e10cSrcweir if ( !pSVData->maAppData.mpSettings ) 712*cdf0e10cSrcweir { 713*cdf0e10cSrcweir GetSettings(); 714*cdf0e10cSrcweir *pSVData->maAppData.mpSettings = rSettings; 715*cdf0e10cSrcweir ResMgr::SetDefaultLocale( rSettings.GetUILocale() ); 716*cdf0e10cSrcweir } 717*cdf0e10cSrcweir else 718*cdf0e10cSrcweir { 719*cdf0e10cSrcweir AllSettings aOldSettings = *pSVData->maAppData.mpSettings; 720*cdf0e10cSrcweir if( aOldSettings.GetUILanguage() != rSettings.GetUILanguage() && pSVData->mpResMgr ) 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir delete pSVData->mpResMgr; 723*cdf0e10cSrcweir pSVData->mpResMgr = NULL; 724*cdf0e10cSrcweir } 725*cdf0e10cSrcweir ResMgr::SetDefaultLocale( rSettings.GetUILocale() ); 726*cdf0e10cSrcweir *pSVData->maAppData.mpSettings = rSettings; 727*cdf0e10cSrcweir sal_uLong nChangeFlags = aOldSettings.GetChangeFlags( *pSVData->maAppData.mpSettings ); 728*cdf0e10cSrcweir if ( nChangeFlags ) 729*cdf0e10cSrcweir { 730*cdf0e10cSrcweir DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags ); 731*cdf0e10cSrcweir GetpApp()->DataChanged( aDCEvt ); 732*cdf0e10cSrcweir 733*cdf0e10cSrcweir // notify data change handler 734*cdf0e10cSrcweir ImplCallEventListeners( VCLEVENT_APPLICATION_DATACHANGED, NULL, &aDCEvt); 735*cdf0e10cSrcweir 736*cdf0e10cSrcweir // Update all windows 737*cdf0e10cSrcweir Window* pFirstFrame = pSVData->maWinData.mpFirstFrame; 738*cdf0e10cSrcweir // Daten, die neu berechnet werden muessen, zuruecksetzen 739*cdf0e10cSrcweir long nOldDPIX = 0; 740*cdf0e10cSrcweir long nOldDPIY = 0; 741*cdf0e10cSrcweir if ( pFirstFrame ) 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir nOldDPIX = pFirstFrame->mnDPIX; 744*cdf0e10cSrcweir nOldDPIY = pFirstFrame->mnDPIY; 745*cdf0e10cSrcweir pSVData->maGDIData.mnAppFontX = 0; 746*cdf0e10cSrcweir } 747*cdf0e10cSrcweir Window* pFrame = pFirstFrame; 748*cdf0e10cSrcweir while ( pFrame ) 749*cdf0e10cSrcweir { 750*cdf0e10cSrcweir // AppFont-Cache-Daten zuruecksetzen 751*cdf0e10cSrcweir pFrame->mpWindowImpl->mpFrameData->meMapUnit = MAP_PIXEL; 752*cdf0e10cSrcweir 753*cdf0e10cSrcweir // UpdateSettings am ClientWindow aufrufen, damit 754*cdf0e10cSrcweir // die Daten nicht doppelt geupdatet werden 755*cdf0e10cSrcweir Window* pClientWin = pFrame; 756*cdf0e10cSrcweir while ( pClientWin->ImplGetClientWindow() ) 757*cdf0e10cSrcweir pClientWin = pClientWin->ImplGetClientWindow(); 758*cdf0e10cSrcweir pClientWin->UpdateSettings( rSettings, sal_True ); 759*cdf0e10cSrcweir 760*cdf0e10cSrcweir Window* pTempWin = pFrame->mpWindowImpl->mpFrameData->mpFirstOverlap; 761*cdf0e10cSrcweir while ( pTempWin ) 762*cdf0e10cSrcweir { 763*cdf0e10cSrcweir // UpdateSettings am ClientWindow aufrufen, damit 764*cdf0e10cSrcweir // die Daten nicht doppelt geupdatet werden 765*cdf0e10cSrcweir pClientWin = pTempWin; 766*cdf0e10cSrcweir while ( pClientWin->ImplGetClientWindow() ) 767*cdf0e10cSrcweir pClientWin = pClientWin->ImplGetClientWindow(); 768*cdf0e10cSrcweir pClientWin->UpdateSettings( rSettings, sal_True ); 769*cdf0e10cSrcweir pTempWin = pTempWin->mpWindowImpl->mpNextOverlap; 770*cdf0e10cSrcweir } 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir pFrame = pFrame->mpWindowImpl->mpFrameData->mpNextFrame; 773*cdf0e10cSrcweir } 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir // Wenn sich die DPI-Aufloesung fuer Screen-Ausgaben 776*cdf0e10cSrcweir // geaendert hat, setzen wir auch bei allen 777*cdf0e10cSrcweir // Screen-Kompatiblen VirDev's die neue Aufloesung 778*cdf0e10cSrcweir pFirstFrame = pSVData->maWinData.mpFirstFrame; 779*cdf0e10cSrcweir if ( pFirstFrame ) 780*cdf0e10cSrcweir { 781*cdf0e10cSrcweir if ( (pFirstFrame->mnDPIX != nOldDPIX) || 782*cdf0e10cSrcweir (pFirstFrame->mnDPIY != nOldDPIY) ) 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir VirtualDevice* pVirDev = pSVData->maGDIData.mpFirstVirDev; 785*cdf0e10cSrcweir while ( pVirDev ) 786*cdf0e10cSrcweir { 787*cdf0e10cSrcweir if ( pVirDev->mbScreenComp && 788*cdf0e10cSrcweir (pVirDev->mnDPIX == nOldDPIX) && 789*cdf0e10cSrcweir (pVirDev->mnDPIY == nOldDPIY) ) 790*cdf0e10cSrcweir { 791*cdf0e10cSrcweir pVirDev->mnDPIX = pFirstFrame->mnDPIX; 792*cdf0e10cSrcweir pVirDev->mnDPIY = pFirstFrame->mnDPIY; 793*cdf0e10cSrcweir if ( pVirDev->IsMapMode() ) 794*cdf0e10cSrcweir { 795*cdf0e10cSrcweir MapMode aMapMode = pVirDev->GetMapMode(); 796*cdf0e10cSrcweir pVirDev->SetMapMode(); 797*cdf0e10cSrcweir pVirDev->SetMapMode( aMapMode ); 798*cdf0e10cSrcweir } 799*cdf0e10cSrcweir } 800*cdf0e10cSrcweir 801*cdf0e10cSrcweir pVirDev = pVirDev->mpNext; 802*cdf0e10cSrcweir } 803*cdf0e10cSrcweir } 804*cdf0e10cSrcweir } 805*cdf0e10cSrcweir } 806*cdf0e10cSrcweir } 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir 809*cdf0e10cSrcweir // ----------------------------------------------------------------------- 810*cdf0e10cSrcweir 811*cdf0e10cSrcweir const AllSettings& Application::GetSettings() 812*cdf0e10cSrcweir { 813*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 814*cdf0e10cSrcweir if ( !pSVData->maAppData.mpSettings ) 815*cdf0e10cSrcweir { 816*cdf0e10cSrcweir pSVData->maAppData.mpCfgListener = new LocaleConfigurationListener; 817*cdf0e10cSrcweir pSVData->maAppData.mpSettings = new AllSettings(); 818*cdf0e10cSrcweir pSVData->maAppData.mpSettings->GetSysLocale().GetOptions().AddListener( pSVData->maAppData.mpCfgListener ); 819*cdf0e10cSrcweir } 820*cdf0e10cSrcweir 821*cdf0e10cSrcweir return *(pSVData->maAppData.mpSettings); 822*cdf0e10cSrcweir } 823*cdf0e10cSrcweir 824*cdf0e10cSrcweir // ----------------------------------------------------------------------- 825*cdf0e10cSrcweir 826*cdf0e10cSrcweir void Application::NotifyAllWindows( DataChangedEvent& rDCEvt ) 827*cdf0e10cSrcweir { 828*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 829*cdf0e10cSrcweir Window* pFrame = pSVData->maWinData.mpFirstFrame; 830*cdf0e10cSrcweir while ( pFrame ) 831*cdf0e10cSrcweir { 832*cdf0e10cSrcweir pFrame->NotifyAllChilds( rDCEvt ); 833*cdf0e10cSrcweir 834*cdf0e10cSrcweir Window* pSysWin = pFrame->mpWindowImpl->mpFrameData->mpFirstOverlap; 835*cdf0e10cSrcweir while ( pSysWin ) 836*cdf0e10cSrcweir { 837*cdf0e10cSrcweir pSysWin->NotifyAllChilds( rDCEvt ); 838*cdf0e10cSrcweir pSysWin = pSysWin->mpWindowImpl->mpNextOverlap; 839*cdf0e10cSrcweir } 840*cdf0e10cSrcweir 841*cdf0e10cSrcweir pFrame = pFrame->mpWindowImpl->mpFrameData->mpNextFrame; 842*cdf0e10cSrcweir } 843*cdf0e10cSrcweir } 844*cdf0e10cSrcweir 845*cdf0e10cSrcweir // ----------------------------------------------------------------------- 846*cdf0e10cSrcweir 847*cdf0e10cSrcweir void Application::ImplCallEventListeners( sal_uLong nEvent, Window *pWin, void* pData ) 848*cdf0e10cSrcweir { 849*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 850*cdf0e10cSrcweir VclWindowEvent aEvent( pWin, nEvent, pData ); 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir if ( pSVData->maAppData.mpEventListeners ) 853*cdf0e10cSrcweir if ( !pSVData->maAppData.mpEventListeners->empty() ) 854*cdf0e10cSrcweir pSVData->maAppData.mpEventListeners->Call( &aEvent ); 855*cdf0e10cSrcweir } 856*cdf0e10cSrcweir 857*cdf0e10cSrcweir // ----------------------------------------------------------------------- 858*cdf0e10cSrcweir 859*cdf0e10cSrcweir void Application::ImplCallEventListeners( VclSimpleEvent* pEvent ) 860*cdf0e10cSrcweir { 861*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 862*cdf0e10cSrcweir 863*cdf0e10cSrcweir if ( pSVData->maAppData.mpEventListeners ) 864*cdf0e10cSrcweir if ( !pSVData->maAppData.mpEventListeners->empty() ) 865*cdf0e10cSrcweir pSVData->maAppData.mpEventListeners->Call( pEvent ); 866*cdf0e10cSrcweir } 867*cdf0e10cSrcweir 868*cdf0e10cSrcweir // ----------------------------------------------------------------------- 869*cdf0e10cSrcweir 870*cdf0e10cSrcweir void Application::AddEventListener( const Link& rEventListener ) 871*cdf0e10cSrcweir { 872*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 873*cdf0e10cSrcweir if( !pSVData->maAppData.mpEventListeners ) 874*cdf0e10cSrcweir pSVData->maAppData.mpEventListeners = new VclEventListeners; 875*cdf0e10cSrcweir pSVData->maAppData.mpEventListeners->push_back( rEventListener ); 876*cdf0e10cSrcweir } 877*cdf0e10cSrcweir 878*cdf0e10cSrcweir // ----------------------------------------------------------------------- 879*cdf0e10cSrcweir 880*cdf0e10cSrcweir void Application::RemoveEventListener( const Link& rEventListener ) 881*cdf0e10cSrcweir { 882*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 883*cdf0e10cSrcweir if( pSVData->maAppData.mpEventListeners ) 884*cdf0e10cSrcweir pSVData->maAppData.mpEventListeners->remove( rEventListener ); 885*cdf0e10cSrcweir } 886*cdf0e10cSrcweir 887*cdf0e10cSrcweir // ----------------------------------------------------------------------- 888*cdf0e10cSrcweir void Application::AddKeyListener( const Link& rKeyListener ) 889*cdf0e10cSrcweir { 890*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 891*cdf0e10cSrcweir if( !pSVData->maAppData.mpKeyListeners ) 892*cdf0e10cSrcweir pSVData->maAppData.mpKeyListeners = new VclEventListeners; 893*cdf0e10cSrcweir pSVData->maAppData.mpKeyListeners->push_back( rKeyListener ); 894*cdf0e10cSrcweir } 895*cdf0e10cSrcweir 896*cdf0e10cSrcweir // ----------------------------------------------------------------------- 897*cdf0e10cSrcweir 898*cdf0e10cSrcweir void Application::RemoveKeyListener( const Link& rKeyListener ) 899*cdf0e10cSrcweir { 900*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 901*cdf0e10cSrcweir if( pSVData->maAppData.mpKeyListeners ) 902*cdf0e10cSrcweir pSVData->maAppData.mpKeyListeners->remove( rKeyListener ); 903*cdf0e10cSrcweir } 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir // ----------------------------------------------------------------------- 906*cdf0e10cSrcweir 907*cdf0e10cSrcweir sal_Bool Application::HandleKey( sal_uLong nEvent, Window *pWin, KeyEvent* pKeyEvent ) 908*cdf0e10cSrcweir { 909*cdf0e10cSrcweir // let listeners process the key event 910*cdf0e10cSrcweir VclWindowEvent aEvent( pWin, nEvent, (void *) pKeyEvent ); 911*cdf0e10cSrcweir 912*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 913*cdf0e10cSrcweir sal_Bool bProcessed = sal_False; 914*cdf0e10cSrcweir 915*cdf0e10cSrcweir if ( pSVData->maAppData.mpKeyListeners ) 916*cdf0e10cSrcweir if ( !pSVData->maAppData.mpKeyListeners->empty() ) 917*cdf0e10cSrcweir bProcessed = pSVData->maAppData.mpKeyListeners->Process( &aEvent ); 918*cdf0e10cSrcweir 919*cdf0e10cSrcweir return bProcessed; 920*cdf0e10cSrcweir } 921*cdf0e10cSrcweir 922*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 923*cdf0e10cSrcweir 924*cdf0e10cSrcweir sal_uLong Application::PostKeyEvent( sal_uLong nEvent, Window *pWin, KeyEvent* pKeyEvent ) 925*cdf0e10cSrcweir { 926*cdf0e10cSrcweir const ::vos::OGuard aGuard( GetSolarMutex() ); 927*cdf0e10cSrcweir sal_uLong nEventId = 0; 928*cdf0e10cSrcweir 929*cdf0e10cSrcweir if( pWin && pKeyEvent ) 930*cdf0e10cSrcweir { 931*cdf0e10cSrcweir ImplPostEventData* pPostEventData = new ImplPostEventData( nEvent, pWin, *pKeyEvent ); 932*cdf0e10cSrcweir 933*cdf0e10cSrcweir PostUserEvent( nEventId, 934*cdf0e10cSrcweir STATIC_LINK( NULL, Application, PostEventHandler ), 935*cdf0e10cSrcweir pPostEventData ); 936*cdf0e10cSrcweir 937*cdf0e10cSrcweir if( nEventId ) 938*cdf0e10cSrcweir { 939*cdf0e10cSrcweir pPostEventData->mnEventId = nEventId; 940*cdf0e10cSrcweir aPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) ); 941*cdf0e10cSrcweir } 942*cdf0e10cSrcweir else 943*cdf0e10cSrcweir delete pPostEventData; 944*cdf0e10cSrcweir } 945*cdf0e10cSrcweir 946*cdf0e10cSrcweir return nEventId; 947*cdf0e10cSrcweir } 948*cdf0e10cSrcweir 949*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 950*cdf0e10cSrcweir 951*cdf0e10cSrcweir sal_uLong Application::PostMouseEvent( sal_uLong nEvent, Window *pWin, MouseEvent* pMouseEvent ) 952*cdf0e10cSrcweir { 953*cdf0e10cSrcweir const ::vos::OGuard aGuard( GetSolarMutex() ); 954*cdf0e10cSrcweir sal_uLong nEventId = 0; 955*cdf0e10cSrcweir 956*cdf0e10cSrcweir if( pWin && pMouseEvent ) 957*cdf0e10cSrcweir { 958*cdf0e10cSrcweir Point aTransformedPos( pMouseEvent->GetPosPixel() ); 959*cdf0e10cSrcweir 960*cdf0e10cSrcweir aTransformedPos.X() += pWin->mnOutOffX; 961*cdf0e10cSrcweir aTransformedPos.Y() += pWin->mnOutOffY; 962*cdf0e10cSrcweir 963*cdf0e10cSrcweir const MouseEvent aTransformedEvent( aTransformedPos, pMouseEvent->GetClicks(), pMouseEvent->GetMode(), 964*cdf0e10cSrcweir pMouseEvent->GetButtons(), pMouseEvent->GetModifier() ); 965*cdf0e10cSrcweir 966*cdf0e10cSrcweir ImplPostEventData* pPostEventData = new ImplPostEventData( nEvent, pWin, aTransformedEvent ); 967*cdf0e10cSrcweir 968*cdf0e10cSrcweir PostUserEvent( nEventId, 969*cdf0e10cSrcweir STATIC_LINK( NULL, Application, PostEventHandler ), 970*cdf0e10cSrcweir pPostEventData ); 971*cdf0e10cSrcweir 972*cdf0e10cSrcweir if( nEventId ) 973*cdf0e10cSrcweir { 974*cdf0e10cSrcweir pPostEventData->mnEventId = nEventId; 975*cdf0e10cSrcweir aPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) ); 976*cdf0e10cSrcweir } 977*cdf0e10cSrcweir else 978*cdf0e10cSrcweir delete pPostEventData; 979*cdf0e10cSrcweir } 980*cdf0e10cSrcweir 981*cdf0e10cSrcweir return nEventId; 982*cdf0e10cSrcweir } 983*cdf0e10cSrcweir 984*cdf0e10cSrcweir // ----------------------------------------------------------------------------- 985*cdf0e10cSrcweir 986*cdf0e10cSrcweir IMPL_STATIC_LINK_NOINSTANCE( Application, PostEventHandler, void*, pCallData ) 987*cdf0e10cSrcweir { 988*cdf0e10cSrcweir const ::vos::OGuard aGuard( GetSolarMutex() ); 989*cdf0e10cSrcweir ImplPostEventData* pData = static_cast< ImplPostEventData * >( pCallData ); 990*cdf0e10cSrcweir const void* pEventData; 991*cdf0e10cSrcweir sal_uLong nEvent; 992*cdf0e10cSrcweir const sal_uLong nEventId = pData->mnEventId; 993*cdf0e10cSrcweir 994*cdf0e10cSrcweir switch( pData->mnEvent ) 995*cdf0e10cSrcweir { 996*cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEMOVE: 997*cdf0e10cSrcweir nEvent = SALEVENT_EXTERNALMOUSEMOVE; 998*cdf0e10cSrcweir pEventData = &pData->maMouseEvent; 999*cdf0e10cSrcweir break; 1000*cdf0e10cSrcweir 1001*cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEBUTTONDOWN: 1002*cdf0e10cSrcweir nEvent = SALEVENT_EXTERNALMOUSEBUTTONDOWN; 1003*cdf0e10cSrcweir pEventData = &pData->maMouseEvent; 1004*cdf0e10cSrcweir break; 1005*cdf0e10cSrcweir 1006*cdf0e10cSrcweir case VCLEVENT_WINDOW_MOUSEBUTTONUP: 1007*cdf0e10cSrcweir nEvent = SALEVENT_EXTERNALMOUSEBUTTONUP; 1008*cdf0e10cSrcweir pEventData = &pData->maMouseEvent; 1009*cdf0e10cSrcweir break; 1010*cdf0e10cSrcweir 1011*cdf0e10cSrcweir case VCLEVENT_WINDOW_KEYINPUT: 1012*cdf0e10cSrcweir nEvent = SALEVENT_EXTERNALKEYINPUT; 1013*cdf0e10cSrcweir pEventData = &pData->maKeyEvent; 1014*cdf0e10cSrcweir break; 1015*cdf0e10cSrcweir 1016*cdf0e10cSrcweir case VCLEVENT_WINDOW_KEYUP: 1017*cdf0e10cSrcweir nEvent = SALEVENT_EXTERNALKEYUP; 1018*cdf0e10cSrcweir pEventData = &pData->maKeyEvent; 1019*cdf0e10cSrcweir break; 1020*cdf0e10cSrcweir 1021*cdf0e10cSrcweir default: 1022*cdf0e10cSrcweir nEvent = 0; 1023*cdf0e10cSrcweir pEventData = NULL; 1024*cdf0e10cSrcweir break; 1025*cdf0e10cSrcweir }; 1026*cdf0e10cSrcweir 1027*cdf0e10cSrcweir if( pData->mpWin && pData->mpWin->mpWindowImpl->mpFrameWindow && pEventData ) 1028*cdf0e10cSrcweir ImplWindowFrameProc( pData->mpWin->mpWindowImpl->mpFrameWindow, NULL, (sal_uInt16) nEvent, pEventData ); 1029*cdf0e10cSrcweir 1030*cdf0e10cSrcweir // remove this event from list of posted events, watch for destruction of internal data 1031*cdf0e10cSrcweir ::std::list< ImplPostEventPair >::iterator aIter( aPostedEventList.begin() ); 1032*cdf0e10cSrcweir 1033*cdf0e10cSrcweir while( aIter != aPostedEventList.end() ) 1034*cdf0e10cSrcweir { 1035*cdf0e10cSrcweir if( nEventId == (*aIter).second->mnEventId ) 1036*cdf0e10cSrcweir { 1037*cdf0e10cSrcweir delete (*aIter).second; 1038*cdf0e10cSrcweir aIter = aPostedEventList.erase( aIter ); 1039*cdf0e10cSrcweir } 1040*cdf0e10cSrcweir else 1041*cdf0e10cSrcweir ++aIter; 1042*cdf0e10cSrcweir } 1043*cdf0e10cSrcweir 1044*cdf0e10cSrcweir return 0; 1045*cdf0e10cSrcweir } 1046*cdf0e10cSrcweir 1047*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1048*cdf0e10cSrcweir 1049*cdf0e10cSrcweir void Application::RemoveMouseAndKeyEvents( Window* pWin ) 1050*cdf0e10cSrcweir { 1051*cdf0e10cSrcweir const ::vos::OGuard aGuard( GetSolarMutex() ); 1052*cdf0e10cSrcweir 1053*cdf0e10cSrcweir // remove all events for specific window, watch for destruction of internal data 1054*cdf0e10cSrcweir ::std::list< ImplPostEventPair >::iterator aIter( aPostedEventList.begin() ); 1055*cdf0e10cSrcweir 1056*cdf0e10cSrcweir while( aIter != aPostedEventList.end() ) 1057*cdf0e10cSrcweir { 1058*cdf0e10cSrcweir if( pWin == (*aIter).first ) 1059*cdf0e10cSrcweir { 1060*cdf0e10cSrcweir if( (*aIter).second->mnEventId ) 1061*cdf0e10cSrcweir RemoveUserEvent( (*aIter).second->mnEventId ); 1062*cdf0e10cSrcweir 1063*cdf0e10cSrcweir delete (*aIter).second; 1064*cdf0e10cSrcweir aIter = aPostedEventList.erase( aIter ); 1065*cdf0e10cSrcweir } 1066*cdf0e10cSrcweir else 1067*cdf0e10cSrcweir ++aIter; 1068*cdf0e10cSrcweir } 1069*cdf0e10cSrcweir } 1070*cdf0e10cSrcweir 1071*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir sal_Bool Application::IsProcessedMouseOrKeyEvent( sal_uLong nEventId ) 1074*cdf0e10cSrcweir { 1075*cdf0e10cSrcweir const ::vos::OGuard aGuard( GetSolarMutex() ); 1076*cdf0e10cSrcweir 1077*cdf0e10cSrcweir // find event 1078*cdf0e10cSrcweir ::std::list< ImplPostEventPair >::iterator aIter( aPostedEventList.begin() ); 1079*cdf0e10cSrcweir 1080*cdf0e10cSrcweir while( aIter != aPostedEventList.end() ) 1081*cdf0e10cSrcweir { 1082*cdf0e10cSrcweir if( (*aIter).second->mnEventId == nEventId ) 1083*cdf0e10cSrcweir return sal_False; 1084*cdf0e10cSrcweir 1085*cdf0e10cSrcweir else 1086*cdf0e10cSrcweir ++aIter; 1087*cdf0e10cSrcweir } 1088*cdf0e10cSrcweir return sal_True; 1089*cdf0e10cSrcweir } 1090*cdf0e10cSrcweir 1091*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir sal_uLong Application::PostUserEvent( sal_uLong nEvent, void* pEventData ) 1094*cdf0e10cSrcweir { 1095*cdf0e10cSrcweir sal_uLong nEventId; 1096*cdf0e10cSrcweir PostUserEvent( nEventId, nEvent, pEventData ); 1097*cdf0e10cSrcweir return nEventId; 1098*cdf0e10cSrcweir } 1099*cdf0e10cSrcweir 1100*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1101*cdf0e10cSrcweir 1102*cdf0e10cSrcweir sal_uLong Application::PostUserEvent( const Link& rLink, void* pCaller ) 1103*cdf0e10cSrcweir { 1104*cdf0e10cSrcweir sal_uLong nEventId; 1105*cdf0e10cSrcweir PostUserEvent( nEventId, rLink, pCaller ); 1106*cdf0e10cSrcweir return nEventId; 1107*cdf0e10cSrcweir } 1108*cdf0e10cSrcweir 1109*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1110*cdf0e10cSrcweir 1111*cdf0e10cSrcweir sal_Bool Application::PostUserEvent( sal_uLong& rEventId, sal_uLong nEvent, void* pEventData ) 1112*cdf0e10cSrcweir { 1113*cdf0e10cSrcweir ImplSVEvent* pSVEvent = new ImplSVEvent; 1114*cdf0e10cSrcweir pSVEvent->mnEvent = nEvent; 1115*cdf0e10cSrcweir pSVEvent->mpData = pEventData; 1116*cdf0e10cSrcweir pSVEvent->mpLink = NULL; 1117*cdf0e10cSrcweir pSVEvent->mpWindow = NULL; 1118*cdf0e10cSrcweir pSVEvent->mbCall = sal_True; 1119*cdf0e10cSrcweir rEventId = (sal_uLong)pSVEvent; 1120*cdf0e10cSrcweir Window* pDefWindow = ImplGetDefaultWindow(); 1121*cdf0e10cSrcweir if ( pDefWindow && pDefWindow->ImplGetFrame()->PostEvent( pSVEvent ) ) 1122*cdf0e10cSrcweir return sal_True; 1123*cdf0e10cSrcweir else 1124*cdf0e10cSrcweir { 1125*cdf0e10cSrcweir rEventId = 0; 1126*cdf0e10cSrcweir delete pSVEvent; 1127*cdf0e10cSrcweir return sal_False; 1128*cdf0e10cSrcweir } 1129*cdf0e10cSrcweir } 1130*cdf0e10cSrcweir 1131*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1132*cdf0e10cSrcweir 1133*cdf0e10cSrcweir sal_Bool Application::PostUserEvent( sal_uLong& rEventId, const Link& rLink, void* pCaller ) 1134*cdf0e10cSrcweir { 1135*cdf0e10cSrcweir ImplSVEvent* pSVEvent = new ImplSVEvent; 1136*cdf0e10cSrcweir pSVEvent->mnEvent = 0; 1137*cdf0e10cSrcweir pSVEvent->mpData = pCaller; 1138*cdf0e10cSrcweir pSVEvent->mpLink = new Link( rLink ); 1139*cdf0e10cSrcweir pSVEvent->mpWindow = NULL; 1140*cdf0e10cSrcweir pSVEvent->mbCall = sal_True; 1141*cdf0e10cSrcweir rEventId = (sal_uLong)pSVEvent; 1142*cdf0e10cSrcweir Window* pDefWindow = ImplGetDefaultWindow(); 1143*cdf0e10cSrcweir if ( pDefWindow && pDefWindow->ImplGetFrame()->PostEvent( pSVEvent ) ) 1144*cdf0e10cSrcweir return sal_True; 1145*cdf0e10cSrcweir else 1146*cdf0e10cSrcweir { 1147*cdf0e10cSrcweir rEventId = 0; 1148*cdf0e10cSrcweir delete pSVEvent; 1149*cdf0e10cSrcweir return sal_False; 1150*cdf0e10cSrcweir } 1151*cdf0e10cSrcweir } 1152*cdf0e10cSrcweir 1153*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1154*cdf0e10cSrcweir 1155*cdf0e10cSrcweir void Application::RemoveUserEvent( sal_uLong nUserEvent ) 1156*cdf0e10cSrcweir { 1157*cdf0e10cSrcweir if(nUserEvent) 1158*cdf0e10cSrcweir { 1159*cdf0e10cSrcweir ImplSVEvent* pSVEvent = (ImplSVEvent*)nUserEvent; 1160*cdf0e10cSrcweir 1161*cdf0e10cSrcweir DBG_ASSERT( !pSVEvent->mpWindow, 1162*cdf0e10cSrcweir "Application::RemoveUserEvent(): Event is send to a window" ); 1163*cdf0e10cSrcweir DBG_ASSERT( pSVEvent->mbCall, 1164*cdf0e10cSrcweir "Application::RemoveUserEvent(): Event is already removed" ); 1165*cdf0e10cSrcweir 1166*cdf0e10cSrcweir if ( pSVEvent->mpWindow ) 1167*cdf0e10cSrcweir { 1168*cdf0e10cSrcweir if( ! pSVEvent->maDelData.IsDelete() ) 1169*cdf0e10cSrcweir pSVEvent->mpWindow->ImplRemoveDel( &(pSVEvent->maDelData) ); 1170*cdf0e10cSrcweir pSVEvent->mpWindow = NULL; 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir 1173*cdf0e10cSrcweir pSVEvent->mbCall = sal_False; 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir } 1176*cdf0e10cSrcweir 1177*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1178*cdf0e10cSrcweir 1179*cdf0e10cSrcweir sal_Bool Application::InsertIdleHdl( const Link& rLink, sal_uInt16 nPrio ) 1180*cdf0e10cSrcweir { 1181*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1182*cdf0e10cSrcweir 1183*cdf0e10cSrcweir // Falls er noch nicht existiert, dann anlegen 1184*cdf0e10cSrcweir if ( !pSVData->maAppData.mpIdleMgr ) 1185*cdf0e10cSrcweir pSVData->maAppData.mpIdleMgr = new ImplIdleMgr; 1186*cdf0e10cSrcweir 1187*cdf0e10cSrcweir return pSVData->maAppData.mpIdleMgr->InsertIdleHdl( rLink, nPrio ); 1188*cdf0e10cSrcweir } 1189*cdf0e10cSrcweir 1190*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1191*cdf0e10cSrcweir 1192*cdf0e10cSrcweir void Application::RemoveIdleHdl( const Link& rLink ) 1193*cdf0e10cSrcweir { 1194*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1195*cdf0e10cSrcweir 1196*cdf0e10cSrcweir if ( pSVData->maAppData.mpIdleMgr ) 1197*cdf0e10cSrcweir pSVData->maAppData.mpIdleMgr->RemoveIdleHdl( rLink ); 1198*cdf0e10cSrcweir } 1199*cdf0e10cSrcweir 1200*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1201*cdf0e10cSrcweir 1202*cdf0e10cSrcweir void Application::EnableNoYieldMode( bool i_bNoYield ) 1203*cdf0e10cSrcweir { 1204*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1205*cdf0e10cSrcweir pSVData->maAppData.mbNoYield = i_bNoYield; 1206*cdf0e10cSrcweir } 1207*cdf0e10cSrcweir 1208*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1209*cdf0e10cSrcweir 1210*cdf0e10cSrcweir void Application::AddPostYieldListener( const Link& i_rListener ) 1211*cdf0e10cSrcweir { 1212*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1213*cdf0e10cSrcweir if( ! pSVData->maAppData.mpPostYieldListeners ) 1214*cdf0e10cSrcweir pSVData->maAppData.mpPostYieldListeners = new VclEventListeners2(); 1215*cdf0e10cSrcweir pSVData->maAppData.mpPostYieldListeners->addListener( i_rListener ); 1216*cdf0e10cSrcweir } 1217*cdf0e10cSrcweir 1218*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1219*cdf0e10cSrcweir 1220*cdf0e10cSrcweir void Application::RemovePostYieldListener( const Link& i_rListener ) 1221*cdf0e10cSrcweir { 1222*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1223*cdf0e10cSrcweir if( pSVData->maAppData.mpPostYieldListeners ) 1224*cdf0e10cSrcweir pSVData->maAppData.mpPostYieldListeners->removeListener( i_rListener ); 1225*cdf0e10cSrcweir } 1226*cdf0e10cSrcweir 1227*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1228*cdf0e10cSrcweir 1229*cdf0e10cSrcweir WorkWindow* Application::GetAppWindow() 1230*cdf0e10cSrcweir { 1231*cdf0e10cSrcweir return ImplGetSVData()->maWinData.mpAppWin; 1232*cdf0e10cSrcweir } 1233*cdf0e10cSrcweir 1234*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1235*cdf0e10cSrcweir 1236*cdf0e10cSrcweir Window* Application::GetFocusWindow() 1237*cdf0e10cSrcweir { 1238*cdf0e10cSrcweir return ImplGetSVData()->maWinData.mpFocusWin; 1239*cdf0e10cSrcweir } 1240*cdf0e10cSrcweir 1241*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1242*cdf0e10cSrcweir 1243*cdf0e10cSrcweir OutputDevice* Application::GetDefaultDevice() 1244*cdf0e10cSrcweir { 1245*cdf0e10cSrcweir return ImplGetDefaultWindow(); 1246*cdf0e10cSrcweir } 1247*cdf0e10cSrcweir 1248*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1249*cdf0e10cSrcweir 1250*cdf0e10cSrcweir Window* Application::GetFirstTopLevelWindow() 1251*cdf0e10cSrcweir { 1252*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1253*cdf0e10cSrcweir return pSVData->maWinData.mpFirstFrame; 1254*cdf0e10cSrcweir } 1255*cdf0e10cSrcweir 1256*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1257*cdf0e10cSrcweir 1258*cdf0e10cSrcweir Window* Application::GetNextTopLevelWindow( Window* pWindow ) 1259*cdf0e10cSrcweir { 1260*cdf0e10cSrcweir return pWindow->mpWindowImpl->mpFrameData->mpNextFrame; 1261*cdf0e10cSrcweir } 1262*cdf0e10cSrcweir 1263*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1264*cdf0e10cSrcweir 1265*cdf0e10cSrcweir long Application::GetTopWindowCount() 1266*cdf0e10cSrcweir { 1267*cdf0e10cSrcweir long nRet = 0; 1268*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1269*cdf0e10cSrcweir Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame : NULL; 1270*cdf0e10cSrcweir while( pWin ) 1271*cdf0e10cSrcweir { 1272*cdf0e10cSrcweir if( pWin->ImplGetWindow()->IsTopWindow() ) 1273*cdf0e10cSrcweir nRet++; 1274*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpFrameData->mpNextFrame; 1275*cdf0e10cSrcweir } 1276*cdf0e10cSrcweir return nRet; 1277*cdf0e10cSrcweir } 1278*cdf0e10cSrcweir 1279*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1280*cdf0e10cSrcweir 1281*cdf0e10cSrcweir Window* Application::GetTopWindow( long nIndex ) 1282*cdf0e10cSrcweir { 1283*cdf0e10cSrcweir long nIdx = 0; 1284*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1285*cdf0e10cSrcweir Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame : NULL; 1286*cdf0e10cSrcweir while( pWin ) 1287*cdf0e10cSrcweir { 1288*cdf0e10cSrcweir if( pWin->ImplGetWindow()->IsTopWindow() ) 1289*cdf0e10cSrcweir { 1290*cdf0e10cSrcweir if( nIdx == nIndex ) 1291*cdf0e10cSrcweir return pWin->ImplGetWindow(); 1292*cdf0e10cSrcweir else 1293*cdf0e10cSrcweir nIdx++; 1294*cdf0e10cSrcweir } 1295*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpFrameData->mpNextFrame; 1296*cdf0e10cSrcweir } 1297*cdf0e10cSrcweir return NULL; 1298*cdf0e10cSrcweir } 1299*cdf0e10cSrcweir 1300*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1301*cdf0e10cSrcweir 1302*cdf0e10cSrcweir Window* Application::GetActiveTopWindow() 1303*cdf0e10cSrcweir { 1304*cdf0e10cSrcweir Window *pWin = ImplGetSVData()->maWinData.mpFocusWin; 1305*cdf0e10cSrcweir while( pWin ) 1306*cdf0e10cSrcweir { 1307*cdf0e10cSrcweir if( pWin->IsTopWindow() ) 1308*cdf0e10cSrcweir return pWin; 1309*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpParent; 1310*cdf0e10cSrcweir } 1311*cdf0e10cSrcweir return NULL; 1312*cdf0e10cSrcweir } 1313*cdf0e10cSrcweir 1314*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1315*cdf0e10cSrcweir 1316*cdf0e10cSrcweir void Application::SetAppName( const XubString& rUniqueName ) 1317*cdf0e10cSrcweir { 1318*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1319*cdf0e10cSrcweir 1320*cdf0e10cSrcweir // Falls er noch nicht existiert, dann anlegen 1321*cdf0e10cSrcweir if ( !pSVData->maAppData.mpAppName ) 1322*cdf0e10cSrcweir pSVData->maAppData.mpAppName = new XubString( rUniqueName ); 1323*cdf0e10cSrcweir else 1324*cdf0e10cSrcweir *(pSVData->maAppData.mpAppName) = rUniqueName; 1325*cdf0e10cSrcweir } 1326*cdf0e10cSrcweir 1327*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1328*cdf0e10cSrcweir 1329*cdf0e10cSrcweir XubString Application::GetAppName() 1330*cdf0e10cSrcweir { 1331*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1332*cdf0e10cSrcweir if ( pSVData->maAppData.mpAppName ) 1333*cdf0e10cSrcweir return *(pSVData->maAppData.mpAppName); 1334*cdf0e10cSrcweir else 1335*cdf0e10cSrcweir return ImplGetSVEmptyStr(); 1336*cdf0e10cSrcweir } 1337*cdf0e10cSrcweir 1338*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1339*cdf0e10cSrcweir 1340*cdf0e10cSrcweir void Application::SetDisplayName( const UniString& rName ) 1341*cdf0e10cSrcweir { 1342*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1343*cdf0e10cSrcweir 1344*cdf0e10cSrcweir // Falls er noch nicht existiert, dann anlegen 1345*cdf0e10cSrcweir if ( !pSVData->maAppData.mpDisplayName ) 1346*cdf0e10cSrcweir pSVData->maAppData.mpDisplayName = new UniString( rName ); 1347*cdf0e10cSrcweir else 1348*cdf0e10cSrcweir *(pSVData->maAppData.mpDisplayName) = rName; 1349*cdf0e10cSrcweir } 1350*cdf0e10cSrcweir 1351*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1352*cdf0e10cSrcweir 1353*cdf0e10cSrcweir UniString Application::GetDisplayName() 1354*cdf0e10cSrcweir { 1355*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1356*cdf0e10cSrcweir if ( pSVData->maAppData.mpDisplayName ) 1357*cdf0e10cSrcweir return *(pSVData->maAppData.mpDisplayName); 1358*cdf0e10cSrcweir else if ( pSVData->maWinData.mpAppWin ) 1359*cdf0e10cSrcweir return pSVData->maWinData.mpAppWin->GetText(); 1360*cdf0e10cSrcweir else 1361*cdf0e10cSrcweir return ImplGetSVEmptyStr(); 1362*cdf0e10cSrcweir } 1363*cdf0e10cSrcweir 1364*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1365*cdf0e10cSrcweir 1366*cdf0e10cSrcweir unsigned int Application::GetScreenCount() 1367*cdf0e10cSrcweir { 1368*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1369*cdf0e10cSrcweir return pSys ? pSys->GetDisplayScreenCount() : 0; 1370*cdf0e10cSrcweir } 1371*cdf0e10cSrcweir 1372*cdf0e10cSrcweir rtl::OUString Application::GetScreenName( unsigned int nScreen ) 1373*cdf0e10cSrcweir { 1374*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1375*cdf0e10cSrcweir return pSys ? pSys->GetScreenName( nScreen ) : rtl::OUString(); 1376*cdf0e10cSrcweir } 1377*cdf0e10cSrcweir 1378*cdf0e10cSrcweir bool Application::IsMultiDisplay() 1379*cdf0e10cSrcweir { 1380*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1381*cdf0e10cSrcweir return pSys ? pSys->IsMultiDisplay() : false; 1382*cdf0e10cSrcweir } 1383*cdf0e10cSrcweir 1384*cdf0e10cSrcweir unsigned int Application::GetDefaultDisplayNumber() 1385*cdf0e10cSrcweir { 1386*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1387*cdf0e10cSrcweir return pSys ? pSys->GetDefaultDisplayNumber() : 0; 1388*cdf0e10cSrcweir } 1389*cdf0e10cSrcweir 1390*cdf0e10cSrcweir Rectangle Application::GetScreenPosSizePixel( unsigned int nScreen ) 1391*cdf0e10cSrcweir { 1392*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1393*cdf0e10cSrcweir return pSys ? pSys->GetDisplayScreenPosSizePixel( nScreen ) : Rectangle(); 1394*cdf0e10cSrcweir } 1395*cdf0e10cSrcweir 1396*cdf0e10cSrcweir Rectangle Application::GetWorkAreaPosSizePixel( unsigned int nScreen ) 1397*cdf0e10cSrcweir { 1398*cdf0e10cSrcweir SalSystem* pSys = ImplGetSalSystem(); 1399*cdf0e10cSrcweir return pSys ? pSys->GetDisplayWorkAreaPosSizePixel( nScreen ) : Rectangle(); 1400*cdf0e10cSrcweir } 1401*cdf0e10cSrcweir 1402*cdf0e10cSrcweir namespace { 1403*cdf0e10cSrcweir unsigned long calcDistSquare( const Point& i_rPoint, const Rectangle& i_rRect ) 1404*cdf0e10cSrcweir { 1405*cdf0e10cSrcweir const Point aRectCenter( (i_rRect.Left() + i_rRect.Right())/2, 1406*cdf0e10cSrcweir (i_rRect.Top() + i_rRect.Bottom())/ 2 ); 1407*cdf0e10cSrcweir const long nDX = aRectCenter.X() - i_rPoint.X(); 1408*cdf0e10cSrcweir const long nDY = aRectCenter.Y() - i_rPoint.Y(); 1409*cdf0e10cSrcweir return nDX*nDX + nDY*nDY; 1410*cdf0e10cSrcweir } 1411*cdf0e10cSrcweir } 1412*cdf0e10cSrcweir 1413*cdf0e10cSrcweir unsigned int Application::GetBestScreen( const Rectangle& i_rRect ) 1414*cdf0e10cSrcweir { 1415*cdf0e10cSrcweir if( IsMultiDisplay() ) 1416*cdf0e10cSrcweir return GetDefaultDisplayNumber(); 1417*cdf0e10cSrcweir 1418*cdf0e10cSrcweir const unsigned int nScreens = GetScreenCount(); 1419*cdf0e10cSrcweir unsigned int nBestMatchScreen = 0; 1420*cdf0e10cSrcweir unsigned long nOverlap = 0; 1421*cdf0e10cSrcweir for( unsigned int i = 0; i < nScreens; i++ ) 1422*cdf0e10cSrcweir { 1423*cdf0e10cSrcweir const Rectangle aCurScreenRect( GetScreenPosSizePixel( i ) ); 1424*cdf0e10cSrcweir // if a screen contains the rectangle completely it is obviously the best screen 1425*cdf0e10cSrcweir if( aCurScreenRect.IsInside( i_rRect ) ) 1426*cdf0e10cSrcweir return i; 1427*cdf0e10cSrcweir // next the screen which contains most of the area of the rect is the best 1428*cdf0e10cSrcweir Rectangle aIntersection( aCurScreenRect.GetIntersection( i_rRect ) ); 1429*cdf0e10cSrcweir if( ! aIntersection.IsEmpty() ) 1430*cdf0e10cSrcweir { 1431*cdf0e10cSrcweir const unsigned long nCurOverlap( aIntersection.GetWidth() * aIntersection.GetHeight() ); 1432*cdf0e10cSrcweir if( nCurOverlap > nOverlap ) 1433*cdf0e10cSrcweir { 1434*cdf0e10cSrcweir nOverlap = nCurOverlap; 1435*cdf0e10cSrcweir nBestMatchScreen = i; 1436*cdf0e10cSrcweir } 1437*cdf0e10cSrcweir } 1438*cdf0e10cSrcweir } 1439*cdf0e10cSrcweir if( nOverlap > 0 ) 1440*cdf0e10cSrcweir return nBestMatchScreen; 1441*cdf0e10cSrcweir 1442*cdf0e10cSrcweir // finally the screen which center is nearest to the rect is the best 1443*cdf0e10cSrcweir const Point aCenter( (i_rRect.Left() + i_rRect.Right())/2, 1444*cdf0e10cSrcweir (i_rRect.Top() + i_rRect.Bottom())/2 ); 1445*cdf0e10cSrcweir unsigned long nDist = ULONG_MAX; 1446*cdf0e10cSrcweir for( unsigned int i = 0; i < nScreens; i++ ) 1447*cdf0e10cSrcweir { 1448*cdf0e10cSrcweir const Rectangle aCurScreenRect( GetScreenPosSizePixel( i ) ); 1449*cdf0e10cSrcweir const unsigned long nCurDist( calcDistSquare( aCenter, aCurScreenRect ) ); 1450*cdf0e10cSrcweir if( nCurDist < nDist ) 1451*cdf0e10cSrcweir { 1452*cdf0e10cSrcweir nBestMatchScreen = i; 1453*cdf0e10cSrcweir nDist = nCurDist; 1454*cdf0e10cSrcweir } 1455*cdf0e10cSrcweir } 1456*cdf0e10cSrcweir return nBestMatchScreen; 1457*cdf0e10cSrcweir } 1458*cdf0e10cSrcweir 1459*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1460*cdf0e10cSrcweir 1461*cdf0e10cSrcweir sal_Bool Application::InsertAccel( Accelerator* pAccel ) 1462*cdf0e10cSrcweir { 1463*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1464*cdf0e10cSrcweir 1465*cdf0e10cSrcweir if ( !pSVData->maAppData.mpAccelMgr ) 1466*cdf0e10cSrcweir pSVData->maAppData.mpAccelMgr = new ImplAccelManager(); 1467*cdf0e10cSrcweir return pSVData->maAppData.mpAccelMgr->InsertAccel( pAccel ); 1468*cdf0e10cSrcweir } 1469*cdf0e10cSrcweir 1470*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1471*cdf0e10cSrcweir 1472*cdf0e10cSrcweir void Application::RemoveAccel( Accelerator* pAccel ) 1473*cdf0e10cSrcweir { 1474*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1475*cdf0e10cSrcweir 1476*cdf0e10cSrcweir if ( pSVData->maAppData.mpAccelMgr ) 1477*cdf0e10cSrcweir pSVData->maAppData.mpAccelMgr->RemoveAccel( pAccel ); 1478*cdf0e10cSrcweir } 1479*cdf0e10cSrcweir 1480*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1481*cdf0e10cSrcweir 1482*cdf0e10cSrcweir void Application::FlushAccel() 1483*cdf0e10cSrcweir { 1484*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1485*cdf0e10cSrcweir 1486*cdf0e10cSrcweir if ( pSVData->maAppData.mpAccelMgr ) 1487*cdf0e10cSrcweir pSVData->maAppData.mpAccelMgr->FlushAccel(); 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir 1490*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1491*cdf0e10cSrcweir 1492*cdf0e10cSrcweir sal_Bool Application::CallAccel( const KeyCode& rKeyCode, sal_uInt16 nRepeat ) 1493*cdf0e10cSrcweir { 1494*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1495*cdf0e10cSrcweir 1496*cdf0e10cSrcweir if ( pSVData->maAppData.mpAccelMgr ) 1497*cdf0e10cSrcweir { 1498*cdf0e10cSrcweir if ( pSVData->maAppData.mpAccelMgr->IsAccelKey( rKeyCode, nRepeat ) ) 1499*cdf0e10cSrcweir return sal_True; 1500*cdf0e10cSrcweir } 1501*cdf0e10cSrcweir 1502*cdf0e10cSrcweir return sal_False; 1503*cdf0e10cSrcweir } 1504*cdf0e10cSrcweir 1505*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1506*cdf0e10cSrcweir 1507*cdf0e10cSrcweir void Application::SetHelp( Help* pHelp ) 1508*cdf0e10cSrcweir { 1509*cdf0e10cSrcweir ImplGetSVData()->maAppData.mpHelp = pHelp; 1510*cdf0e10cSrcweir } 1511*cdf0e10cSrcweir 1512*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1513*cdf0e10cSrcweir 1514*cdf0e10cSrcweir Help* Application::GetHelp() 1515*cdf0e10cSrcweir { 1516*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mpHelp; 1517*cdf0e10cSrcweir } 1518*cdf0e10cSrcweir 1519*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1520*cdf0e10cSrcweir 1521*cdf0e10cSrcweir void Application::EnableAutoHelpId( sal_Bool bEnabled ) 1522*cdf0e10cSrcweir { 1523*cdf0e10cSrcweir ImplGetSVData()->maHelpData.mbAutoHelpId = bEnabled; 1524*cdf0e10cSrcweir } 1525*cdf0e10cSrcweir 1526*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1527*cdf0e10cSrcweir 1528*cdf0e10cSrcweir sal_Bool Application::IsAutoHelpIdEnabled() 1529*cdf0e10cSrcweir { 1530*cdf0e10cSrcweir return ImplGetSVData()->maHelpData.mbAutoHelpId; 1531*cdf0e10cSrcweir } 1532*cdf0e10cSrcweir 1533*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1534*cdf0e10cSrcweir 1535*cdf0e10cSrcweir void Application::EnableAutoMnemonic( sal_Bool bEnabled ) 1536*cdf0e10cSrcweir { 1537*cdf0e10cSrcweir AllSettings aSettings = GetSettings(); 1538*cdf0e10cSrcweir StyleSettings aStyle = aSettings.GetStyleSettings(); 1539*cdf0e10cSrcweir aStyle.SetAutoMnemonic( bEnabled ); 1540*cdf0e10cSrcweir aSettings.SetStyleSettings( aStyle ); 1541*cdf0e10cSrcweir SetSettings( aSettings ); 1542*cdf0e10cSrcweir } 1543*cdf0e10cSrcweir 1544*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1545*cdf0e10cSrcweir 1546*cdf0e10cSrcweir sal_Bool Application::IsAutoMnemonicEnabled() 1547*cdf0e10cSrcweir { 1548*cdf0e10cSrcweir return GetSettings().GetStyleSettings().GetAutoMnemonic(); 1549*cdf0e10cSrcweir } 1550*cdf0e10cSrcweir 1551*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1552*cdf0e10cSrcweir 1553*cdf0e10cSrcweir void Application::SetDialogScaleX( short nScale ) 1554*cdf0e10cSrcweir { 1555*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1556*cdf0e10cSrcweir pSVData->maAppData.mnDialogScaleX = nScale; 1557*cdf0e10cSrcweir pSVData->maGDIData.mnAppFontX = pSVData->maGDIData.mnRealAppFontX; 1558*cdf0e10cSrcweir if ( nScale ) 1559*cdf0e10cSrcweir pSVData->maGDIData.mnAppFontX += (pSVData->maGDIData.mnAppFontX*nScale)/100; 1560*cdf0e10cSrcweir } 1561*cdf0e10cSrcweir 1562*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1563*cdf0e10cSrcweir 1564*cdf0e10cSrcweir short Application::GetDialogScaleX() 1565*cdf0e10cSrcweir { 1566*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mnDialogScaleX; 1567*cdf0e10cSrcweir } 1568*cdf0e10cSrcweir 1569*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1570*cdf0e10cSrcweir 1571*cdf0e10cSrcweir void Application::SetDefDialogParent( Window* pWindow ) 1572*cdf0e10cSrcweir { 1573*cdf0e10cSrcweir ImplGetSVData()->maWinData.mpDefDialogParent = pWindow; 1574*cdf0e10cSrcweir } 1575*cdf0e10cSrcweir 1576*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1577*cdf0e10cSrcweir 1578*cdf0e10cSrcweir Window* Application::GetDefDialogParent() 1579*cdf0e10cSrcweir { 1580*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1581*cdf0e10cSrcweir // #103442# find some useful dialog parent if there 1582*cdf0e10cSrcweir // was no default set 1583*cdf0e10cSrcweir // NOTE: currently even the default is not used 1584*cdf0e10cSrcweir if( sal_False && pSVData->maWinData.mpDefDialogParent != NULL ) 1585*cdf0e10cSrcweir return pSVData->maWinData.mpDefDialogParent; 1586*cdf0e10cSrcweir else 1587*cdf0e10cSrcweir { 1588*cdf0e10cSrcweir // always use the topmost parent of the candidate 1589*cdf0e10cSrcweir // window to avoid using dialogs or floaters 1590*cdf0e10cSrcweir // as DefDialogParent 1591*cdf0e10cSrcweir 1592*cdf0e10cSrcweir // current focus frame 1593*cdf0e10cSrcweir Window *pWin = NULL; 1594*cdf0e10cSrcweir if( (pWin = pSVData->maWinData.mpFocusWin) != NULL ) 1595*cdf0e10cSrcweir { 1596*cdf0e10cSrcweir while( pWin->mpWindowImpl && pWin->mpWindowImpl->mpParent ) 1597*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpParent; 1598*cdf0e10cSrcweir 1599*cdf0e10cSrcweir if( (pWin->mpWindowImpl->mnStyle & WB_INTROWIN) == 0 ) 1600*cdf0e10cSrcweir { 1601*cdf0e10cSrcweir // check for corrupted window hierarchy, #122232#, may be we now crash somewhere else 1602*cdf0e10cSrcweir if( !pWin->mpWindowImpl ) 1603*cdf0e10cSrcweir { 1604*cdf0e10cSrcweir DBG_ERROR( "Window hierarchy corrupted!" ); 1605*cdf0e10cSrcweir pSVData->maWinData.mpFocusWin = NULL; // avoid further access 1606*cdf0e10cSrcweir return NULL; 1607*cdf0e10cSrcweir } 1608*cdf0e10cSrcweir 1609*cdf0e10cSrcweir // MAV: before the implementation has used only decorated windows, 1610*cdf0e10cSrcweir // but it is not true in case of ActiveX or plugin scenario, 1611*cdf0e10cSrcweir // so this check is commented out 1612*cdf0e10cSrcweir // if( pWin->mpWindowImpl->mpFrameWindow->GetStyle() & (WB_MOVEABLE | WB_SIZEABLE) ) 1613*cdf0e10cSrcweir return pWin->mpWindowImpl->mpFrameWindow->ImplGetWindow(); 1614*cdf0e10cSrcweir // else 1615*cdf0e10cSrcweir // return NULL; 1616*cdf0e10cSrcweir } 1617*cdf0e10cSrcweir } 1618*cdf0e10cSrcweir // last active application frame 1619*cdf0e10cSrcweir if( NULL != (pWin = pSVData->maWinData.mpActiveApplicationFrame) ) 1620*cdf0e10cSrcweir { 1621*cdf0e10cSrcweir return pWin->mpWindowImpl->mpFrameWindow->ImplGetWindow(); 1622*cdf0e10cSrcweir } 1623*cdf0e10cSrcweir else 1624*cdf0e10cSrcweir { 1625*cdf0e10cSrcweir // first visible top window (may be totally wrong....) 1626*cdf0e10cSrcweir pWin = pSVData->maWinData.mpFirstFrame; 1627*cdf0e10cSrcweir while( pWin ) 1628*cdf0e10cSrcweir { 1629*cdf0e10cSrcweir if( pWin->ImplGetWindow()->IsTopWindow() && 1630*cdf0e10cSrcweir pWin->mpWindowImpl->mbReallyVisible && 1631*cdf0e10cSrcweir (pWin->mpWindowImpl->mnStyle & WB_INTROWIN) == 0 1632*cdf0e10cSrcweir ) 1633*cdf0e10cSrcweir { 1634*cdf0e10cSrcweir while( pWin->mpWindowImpl->mpParent ) 1635*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpParent; 1636*cdf0e10cSrcweir return pWin->mpWindowImpl->mpFrameWindow->ImplGetWindow(); 1637*cdf0e10cSrcweir } 1638*cdf0e10cSrcweir pWin = pWin->mpWindowImpl->mpFrameData->mpNextFrame; 1639*cdf0e10cSrcweir } 1640*cdf0e10cSrcweir // use the desktop 1641*cdf0e10cSrcweir return NULL; 1642*cdf0e10cSrcweir } 1643*cdf0e10cSrcweir } 1644*cdf0e10cSrcweir } 1645*cdf0e10cSrcweir 1646*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1647*cdf0e10cSrcweir 1648*cdf0e10cSrcweir void Application::EnableDialogCancel( sal_Bool bDialogCancel ) 1649*cdf0e10cSrcweir { 1650*cdf0e10cSrcweir ImplGetSVData()->maAppData.mbDialogCancel = bDialogCancel; 1651*cdf0e10cSrcweir } 1652*cdf0e10cSrcweir 1653*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1654*cdf0e10cSrcweir 1655*cdf0e10cSrcweir sal_Bool Application::IsDialogCancelEnabled() 1656*cdf0e10cSrcweir { 1657*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mbDialogCancel; 1658*cdf0e10cSrcweir } 1659*cdf0e10cSrcweir 1660*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1661*cdf0e10cSrcweir 1662*cdf0e10cSrcweir void Application::SetSystemWindowMode( sal_uInt16 nMode ) 1663*cdf0e10cSrcweir { 1664*cdf0e10cSrcweir ImplGetSVData()->maAppData.mnSysWinMode = nMode; 1665*cdf0e10cSrcweir } 1666*cdf0e10cSrcweir 1667*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1668*cdf0e10cSrcweir 1669*cdf0e10cSrcweir sal_uInt16 Application::GetSystemWindowMode() 1670*cdf0e10cSrcweir { 1671*cdf0e10cSrcweir return ImplGetSVData()->maAppData.mnSysWinMode; 1672*cdf0e10cSrcweir } 1673*cdf0e10cSrcweir 1674*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1675*cdf0e10cSrcweir 1676*cdf0e10cSrcweir const String& Application::GetFontPath() 1677*cdf0e10cSrcweir { 1678*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1679*cdf0e10cSrcweir if( !pSVData->maAppData.mpFontPath ) 1680*cdf0e10cSrcweir { 1681*cdf0e10cSrcweir if( const char* pFontPath = ::getenv( "SAL_FONTPATH_PRIVATE" ) ) 1682*cdf0e10cSrcweir pSVData->maAppData.mpFontPath = new String( String::CreateFromAscii( pFontPath ) ); 1683*cdf0e10cSrcweir } 1684*cdf0e10cSrcweir 1685*cdf0e10cSrcweir if( pSVData->maAppData.mpFontPath ) 1686*cdf0e10cSrcweir return *(pSVData->maAppData.mpFontPath); 1687*cdf0e10cSrcweir return ImplGetSVEmptyStr(); 1688*cdf0e10cSrcweir } 1689*cdf0e10cSrcweir 1690*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1691*cdf0e10cSrcweir 1692*cdf0e10cSrcweir void Application::SetFontPath( const String& rPath ) 1693*cdf0e10cSrcweir { 1694*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1695*cdf0e10cSrcweir 1696*cdf0e10cSrcweir // if it doesn't exist create a new one 1697*cdf0e10cSrcweir if( !pSVData->maAppData.mpFontPath ) 1698*cdf0e10cSrcweir pSVData->maAppData.mpFontPath = new String( rPath ); 1699*cdf0e10cSrcweir else 1700*cdf0e10cSrcweir *(pSVData->maAppData.mpFontPath) = rPath; 1701*cdf0e10cSrcweir } 1702*cdf0e10cSrcweir 1703*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1704*cdf0e10cSrcweir 1705*cdf0e10cSrcweir UniqueItemId Application::CreateUniqueId() 1706*cdf0e10cSrcweir { 1707*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1708*cdf0e10cSrcweir 1709*cdf0e10cSrcweir if ( !pSVData->maAppData.mpUniqueIdCont ) 1710*cdf0e10cSrcweir pSVData->maAppData.mpUniqueIdCont = new UniqueIdContainer( UNIQUEID_SV_BEGIN ); 1711*cdf0e10cSrcweir return pSVData->maAppData.mpUniqueIdCont->CreateId(); 1712*cdf0e10cSrcweir } 1713*cdf0e10cSrcweir 1714*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1715*cdf0e10cSrcweir 1716*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > Application::GetVCLToolkit() 1717*cdf0e10cSrcweir { 1718*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > xT; 1719*cdf0e10cSrcweir UnoWrapperBase* pWrapper = Application::GetUnoWrapper( sal_True ); 1720*cdf0e10cSrcweir if ( pWrapper ) 1721*cdf0e10cSrcweir xT = pWrapper->GetVCLToolkit(); 1722*cdf0e10cSrcweir return xT; 1723*cdf0e10cSrcweir } 1724*cdf0e10cSrcweir 1725*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1726*cdf0e10cSrcweir 1727*cdf0e10cSrcweir extern "C" { static void SAL_CALL thisModule() {} } 1728*cdf0e10cSrcweir 1729*cdf0e10cSrcweir UnoWrapperBase* Application::GetUnoWrapper( sal_Bool bCreateIfNotExist ) 1730*cdf0e10cSrcweir { 1731*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1732*cdf0e10cSrcweir static sal_Bool bAlreadyTriedToCreate = sal_False; 1733*cdf0e10cSrcweir if ( !pSVData->mpUnoWrapper && bCreateIfNotExist && !bAlreadyTriedToCreate ) 1734*cdf0e10cSrcweir { 1735*cdf0e10cSrcweir ::rtl::OUString aLibName = ::vcl::unohelper::CreateLibraryName( "tk", sal_True ); 1736*cdf0e10cSrcweir oslModule hTkLib = osl_loadModuleRelative( 1737*cdf0e10cSrcweir &thisModule, aLibName.pData, SAL_LOADMODULE_DEFAULT ); 1738*cdf0e10cSrcweir if ( hTkLib ) 1739*cdf0e10cSrcweir { 1740*cdf0e10cSrcweir ::rtl::OUString aFunctionName( RTL_CONSTASCII_USTRINGPARAM( "CreateUnoWrapper" ) ); 1741*cdf0e10cSrcweir FN_TkCreateUnoWrapper fnCreateWrapper = (FN_TkCreateUnoWrapper)osl_getFunctionSymbol( hTkLib, aFunctionName.pData ); 1742*cdf0e10cSrcweir if ( fnCreateWrapper ) 1743*cdf0e10cSrcweir { 1744*cdf0e10cSrcweir pSVData->mpUnoWrapper = fnCreateWrapper(); 1745*cdf0e10cSrcweir } 1746*cdf0e10cSrcweir } 1747*cdf0e10cSrcweir DBG_ASSERT( pSVData->mpUnoWrapper, "UnoWrapper could not be created!" ); 1748*cdf0e10cSrcweir bAlreadyTriedToCreate = sal_True; 1749*cdf0e10cSrcweir } 1750*cdf0e10cSrcweir return pSVData->mpUnoWrapper; 1751*cdf0e10cSrcweir } 1752*cdf0e10cSrcweir 1753*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1754*cdf0e10cSrcweir 1755*cdf0e10cSrcweir void Application::SetUnoWrapper( UnoWrapperBase* pWrapper ) 1756*cdf0e10cSrcweir { 1757*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1758*cdf0e10cSrcweir DBG_ASSERT( !pSVData->mpUnoWrapper, "SetUnoWrapper: Wrapper allready exists" ); 1759*cdf0e10cSrcweir pSVData->mpUnoWrapper = pWrapper; 1760*cdf0e10cSrcweir } 1761*cdf0e10cSrcweir 1762*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1763*cdf0e10cSrcweir 1764*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDisplayConnection > Application::GetDisplayConnection() 1765*cdf0e10cSrcweir { 1766*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1767*cdf0e10cSrcweir 1768*cdf0e10cSrcweir if( !pSVData->mxDisplayConnection.is() ) 1769*cdf0e10cSrcweir { 1770*cdf0e10cSrcweir pSVData->mxDisplayConnection.set( new ::vcl::DisplayConnection ); 1771*cdf0e10cSrcweir pSVData->mxDisplayConnection->start(); 1772*cdf0e10cSrcweir } 1773*cdf0e10cSrcweir 1774*cdf0e10cSrcweir return pSVData->mxDisplayConnection.get(); 1775*cdf0e10cSrcweir } 1776*cdf0e10cSrcweir 1777*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1778*cdf0e10cSrcweir 1779*cdf0e10cSrcweir void Application::SetFilterHdl( const Link& rLink ) 1780*cdf0e10cSrcweir { 1781*cdf0e10cSrcweir ImplGetSVData()->maGDIData.mpGrfConverter->SetFilterHdl( rLink ); 1782*cdf0e10cSrcweir } 1783*cdf0e10cSrcweir 1784*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1785*cdf0e10cSrcweir 1786*cdf0e10cSrcweir const Link& Application::GetFilterHdl() 1787*cdf0e10cSrcweir { 1788*cdf0e10cSrcweir return ImplGetSVData()->maGDIData.mpGrfConverter->GetFilterHdl(); 1789*cdf0e10cSrcweir } 1790*cdf0e10cSrcweir 1791*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1792*cdf0e10cSrcweir 1793*cdf0e10cSrcweir sal_Bool ImplCallHotKey( const KeyCode& rKeyCode ) 1794*cdf0e10cSrcweir { 1795*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1796*cdf0e10cSrcweir ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey; 1797*cdf0e10cSrcweir while ( pHotKeyData ) 1798*cdf0e10cSrcweir { 1799*cdf0e10cSrcweir if ( pHotKeyData->maKeyCode.IsDefinedKeyCodeEqual( rKeyCode ) ) 1800*cdf0e10cSrcweir { 1801*cdf0e10cSrcweir pHotKeyData->maLink.Call( pHotKeyData->mpUserData ); 1802*cdf0e10cSrcweir return sal_True; 1803*cdf0e10cSrcweir } 1804*cdf0e10cSrcweir 1805*cdf0e10cSrcweir pHotKeyData = pHotKeyData->mpNext; 1806*cdf0e10cSrcweir } 1807*cdf0e10cSrcweir 1808*cdf0e10cSrcweir return sal_False; 1809*cdf0e10cSrcweir } 1810*cdf0e10cSrcweir 1811*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1812*cdf0e10cSrcweir 1813*cdf0e10cSrcweir void ImplFreeHotKeyData() 1814*cdf0e10cSrcweir { 1815*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1816*cdf0e10cSrcweir ImplHotKey* pTempHotKeyData; 1817*cdf0e10cSrcweir ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey; 1818*cdf0e10cSrcweir while ( pHotKeyData ) 1819*cdf0e10cSrcweir { 1820*cdf0e10cSrcweir pTempHotKeyData = pHotKeyData->mpNext; 1821*cdf0e10cSrcweir delete pHotKeyData; 1822*cdf0e10cSrcweir pHotKeyData = pTempHotKeyData; 1823*cdf0e10cSrcweir } 1824*cdf0e10cSrcweir 1825*cdf0e10cSrcweir pSVData->maAppData.mpFirstHotKey = NULL; 1826*cdf0e10cSrcweir } 1827*cdf0e10cSrcweir 1828*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1829*cdf0e10cSrcweir 1830*cdf0e10cSrcweir sal_uIntPtr Application::AddHotKey( const KeyCode& rKeyCode, const Link& rLink, void* pData ) 1831*cdf0e10cSrcweir { 1832*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1833*cdf0e10cSrcweir ImplHotKey* pHotKeyData = new ImplHotKey; 1834*cdf0e10cSrcweir pHotKeyData->mpUserData = pData; 1835*cdf0e10cSrcweir pHotKeyData->maKeyCode = rKeyCode; 1836*cdf0e10cSrcweir pHotKeyData->maLink = rLink; 1837*cdf0e10cSrcweir pHotKeyData->mpNext = pSVData->maAppData.mpFirstHotKey; 1838*cdf0e10cSrcweir pSVData->maAppData.mpFirstHotKey = pHotKeyData; 1839*cdf0e10cSrcweir return (sal_uIntPtr)pHotKeyData; 1840*cdf0e10cSrcweir } 1841*cdf0e10cSrcweir 1842*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1843*cdf0e10cSrcweir 1844*cdf0e10cSrcweir void Application::RemoveHotKey( sal_uIntPtr nId ) 1845*cdf0e10cSrcweir { 1846*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1847*cdf0e10cSrcweir ImplHotKey* pFindHotKeyData = (ImplHotKey*)nId; 1848*cdf0e10cSrcweir ImplHotKey* pPrevHotKeyData = NULL; 1849*cdf0e10cSrcweir ImplHotKey* pHotKeyData = pSVData->maAppData.mpFirstHotKey; 1850*cdf0e10cSrcweir while ( pHotKeyData ) 1851*cdf0e10cSrcweir { 1852*cdf0e10cSrcweir if ( pHotKeyData == pFindHotKeyData ) 1853*cdf0e10cSrcweir { 1854*cdf0e10cSrcweir if ( pPrevHotKeyData ) 1855*cdf0e10cSrcweir pPrevHotKeyData->mpNext = pFindHotKeyData->mpNext; 1856*cdf0e10cSrcweir else 1857*cdf0e10cSrcweir pSVData->maAppData.mpFirstHotKey = pFindHotKeyData->mpNext; 1858*cdf0e10cSrcweir delete pFindHotKeyData; 1859*cdf0e10cSrcweir break; 1860*cdf0e10cSrcweir } 1861*cdf0e10cSrcweir 1862*cdf0e10cSrcweir pPrevHotKeyData = pHotKeyData; 1863*cdf0e10cSrcweir pHotKeyData = pHotKeyData->mpNext; 1864*cdf0e10cSrcweir } 1865*cdf0e10cSrcweir 1866*cdf0e10cSrcweir DBG_ASSERT( pHotKeyData, "Application::RemoveHotKey() - HotKey is not added" ); 1867*cdf0e10cSrcweir } 1868*cdf0e10cSrcweir 1869*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1870*cdf0e10cSrcweir 1871*cdf0e10cSrcweir void ImplFreeEventHookData() 1872*cdf0e10cSrcweir { 1873*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1874*cdf0e10cSrcweir ImplEventHook* pTempEventHookData; 1875*cdf0e10cSrcweir ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook; 1876*cdf0e10cSrcweir while ( pEventHookData ) 1877*cdf0e10cSrcweir { 1878*cdf0e10cSrcweir pTempEventHookData = pEventHookData->mpNext; 1879*cdf0e10cSrcweir delete pEventHookData; 1880*cdf0e10cSrcweir pEventHookData = pTempEventHookData; 1881*cdf0e10cSrcweir } 1882*cdf0e10cSrcweir 1883*cdf0e10cSrcweir pSVData->maAppData.mpFirstEventHook = NULL; 1884*cdf0e10cSrcweir } 1885*cdf0e10cSrcweir 1886*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1887*cdf0e10cSrcweir 1888*cdf0e10cSrcweir sal_uIntPtr Application::AddEventHook( VCLEventHookProc pProc, void* pData ) 1889*cdf0e10cSrcweir { 1890*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1891*cdf0e10cSrcweir ImplEventHook* pEventHookData = new ImplEventHook; 1892*cdf0e10cSrcweir pEventHookData->mpUserData = pData; 1893*cdf0e10cSrcweir pEventHookData->mpProc = pProc; 1894*cdf0e10cSrcweir pEventHookData->mpNext = pSVData->maAppData.mpFirstEventHook; 1895*cdf0e10cSrcweir pSVData->maAppData.mpFirstEventHook = pEventHookData; 1896*cdf0e10cSrcweir return (sal_uIntPtr)pEventHookData; 1897*cdf0e10cSrcweir } 1898*cdf0e10cSrcweir 1899*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1900*cdf0e10cSrcweir 1901*cdf0e10cSrcweir void Application::RemoveEventHook( sal_uIntPtr nId ) 1902*cdf0e10cSrcweir { 1903*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1904*cdf0e10cSrcweir ImplEventHook* pFindEventHookData = (ImplEventHook*)nId; 1905*cdf0e10cSrcweir ImplEventHook* pPrevEventHookData = NULL; 1906*cdf0e10cSrcweir ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook; 1907*cdf0e10cSrcweir while ( pEventHookData ) 1908*cdf0e10cSrcweir { 1909*cdf0e10cSrcweir if ( pEventHookData == pFindEventHookData ) 1910*cdf0e10cSrcweir { 1911*cdf0e10cSrcweir if ( pPrevEventHookData ) 1912*cdf0e10cSrcweir pPrevEventHookData->mpNext = pFindEventHookData->mpNext; 1913*cdf0e10cSrcweir else 1914*cdf0e10cSrcweir pSVData->maAppData.mpFirstEventHook = pFindEventHookData->mpNext; 1915*cdf0e10cSrcweir delete pFindEventHookData; 1916*cdf0e10cSrcweir break; 1917*cdf0e10cSrcweir } 1918*cdf0e10cSrcweir 1919*cdf0e10cSrcweir pPrevEventHookData = pEventHookData; 1920*cdf0e10cSrcweir pEventHookData = pEventHookData->mpNext; 1921*cdf0e10cSrcweir } 1922*cdf0e10cSrcweir 1923*cdf0e10cSrcweir DBG_ASSERT( pEventHookData, "Application::RemoveEventHook() - EventHook is not added" ); 1924*cdf0e10cSrcweir } 1925*cdf0e10cSrcweir 1926*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1927*cdf0e10cSrcweir 1928*cdf0e10cSrcweir long Application::CallEventHooks( NotifyEvent& rEvt ) 1929*cdf0e10cSrcweir { 1930*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 1931*cdf0e10cSrcweir long nRet = 0; 1932*cdf0e10cSrcweir ImplEventHook* pTempEventHookData; 1933*cdf0e10cSrcweir ImplEventHook* pEventHookData = pSVData->maAppData.mpFirstEventHook; 1934*cdf0e10cSrcweir while ( pEventHookData ) 1935*cdf0e10cSrcweir { 1936*cdf0e10cSrcweir pTempEventHookData = pEventHookData->mpNext; 1937*cdf0e10cSrcweir nRet = pEventHookData->mpProc( rEvt, pEventHookData->mpUserData ); 1938*cdf0e10cSrcweir if ( nRet ) 1939*cdf0e10cSrcweir break; 1940*cdf0e10cSrcweir pEventHookData = pTempEventHookData; 1941*cdf0e10cSrcweir } 1942*cdf0e10cSrcweir 1943*cdf0e10cSrcweir return nRet; 1944*cdf0e10cSrcweir } 1945*cdf0e10cSrcweir 1946*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1947*cdf0e10cSrcweir 1948*cdf0e10cSrcweir long Application::CallPreNotify( NotifyEvent& rEvt ) 1949*cdf0e10cSrcweir { 1950*cdf0e10cSrcweir return ImplCallPreNotify( rEvt ); 1951*cdf0e10cSrcweir } 1952*cdf0e10cSrcweir 1953*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1954*cdf0e10cSrcweir 1955*cdf0e10cSrcweir long Application::CallEvent( NotifyEvent& rEvt ) 1956*cdf0e10cSrcweir { 1957*cdf0e10cSrcweir return ImplCallEvent( rEvt ); 1958*cdf0e10cSrcweir } 1959*cdf0e10cSrcweir 1960*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1961*cdf0e10cSrcweir 1962*cdf0e10cSrcweir const LocaleDataWrapper& Application::GetAppLocaleDataWrapper() 1963*cdf0e10cSrcweir { 1964*cdf0e10cSrcweir return GetSettings().GetLocaleDataWrapper(); 1965*cdf0e10cSrcweir } 1966*cdf0e10cSrcweir 1967*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1968*cdf0e10cSrcweir 1969*cdf0e10cSrcweir void Application::EnableHeadlessMode( sal_Bool bEnable ) 1970*cdf0e10cSrcweir { 1971*cdf0e10cSrcweir EnableDialogCancel( bEnable ); 1972*cdf0e10cSrcweir } 1973*cdf0e10cSrcweir 1974*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1975*cdf0e10cSrcweir 1976*cdf0e10cSrcweir sal_Bool Application::IsHeadlessModeEnabled() 1977*cdf0e10cSrcweir { 1978*cdf0e10cSrcweir return IsDialogCancelEnabled(); 1979*cdf0e10cSrcweir } 1980*cdf0e10cSrcweir 1981*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1982*cdf0e10cSrcweir 1983*cdf0e10cSrcweir void Application::ShowNativeErrorBox(const String& sTitle , 1984*cdf0e10cSrcweir const String& sMessage) 1985*cdf0e10cSrcweir { 1986*cdf0e10cSrcweir int btn = ImplGetSalSystem()->ShowNativeMessageBox ( 1987*cdf0e10cSrcweir sTitle, 1988*cdf0e10cSrcweir sMessage, 1989*cdf0e10cSrcweir SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK, 1990*cdf0e10cSrcweir SALSYSTEM_SHOWNATIVEMSGBOX_BTN_OK); 1991*cdf0e10cSrcweir if (btn != SALSYSTEM_SHOWNATIVEMSGBOX_BTN_OK) { 1992*cdf0e10cSrcweir OSL_TRACE("ShowNativeMessageBox returned %d\n", btn); 1993*cdf0e10cSrcweir } 1994*cdf0e10cSrcweir } 1995*cdf0e10cSrcweir 1996*cdf0e10cSrcweir // ----------------------------------------------------------------------- 1997*cdf0e10cSrcweir 1998*cdf0e10cSrcweir bool Application::CanToggleImeStatusWindow() 1999*cdf0e10cSrcweir { 2000*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 2001*cdf0e10cSrcweir if( ! pSVData->mpImeStatus ) 2002*cdf0e10cSrcweir pSVData->mpImeStatus = pSVData->mpDefInst->CreateI18NImeStatus(); 2003*cdf0e10cSrcweir return pSVData->mpImeStatus->canToggle(); 2004*cdf0e10cSrcweir } 2005*cdf0e10cSrcweir 2006*cdf0e10cSrcweir void Application::ShowImeStatusWindow(bool bShow) 2007*cdf0e10cSrcweir { 2008*cdf0e10cSrcweir ImplGetSVData()->maAppData.meShowImeStatusWindow = bShow 2009*cdf0e10cSrcweir ? ImplSVAppData::ImeStatusWindowMode_SHOW 2010*cdf0e10cSrcweir : ImplSVAppData::ImeStatusWindowMode_HIDE; 2011*cdf0e10cSrcweir 2012*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 2013*cdf0e10cSrcweir if( ! pSVData->mpImeStatus ) 2014*cdf0e10cSrcweir pSVData->mpImeStatus = pSVData->mpDefInst->CreateI18NImeStatus(); 2015*cdf0e10cSrcweir pSVData->mpImeStatus->toggle(); 2016*cdf0e10cSrcweir } 2017*cdf0e10cSrcweir 2018*cdf0e10cSrcweir bool Application::GetShowImeStatusWindowDefault() 2019*cdf0e10cSrcweir { 2020*cdf0e10cSrcweir rtl_TextEncodingInfo aInfo; 2021*cdf0e10cSrcweir aInfo.StructSize = sizeof aInfo; 2022*cdf0e10cSrcweir return rtl_getTextEncodingInfo(osl_getThreadTextEncoding(), &aInfo) 2023*cdf0e10cSrcweir && aInfo.MaximumCharSize > 1; 2024*cdf0e10cSrcweir } 2025*cdf0e10cSrcweir 2026*cdf0e10cSrcweir const ::rtl::OUString& Application::GetDesktopEnvironment() 2027*cdf0e10cSrcweir { 2028*cdf0e10cSrcweir return SalGetDesktopEnvironment(); 2029*cdf0e10cSrcweir } 2030*cdf0e10cSrcweir 2031*cdf0e10cSrcweir void Application::AddToRecentDocumentList(const rtl::OUString& rFileUrl, const rtl::OUString& rMimeType) 2032*cdf0e10cSrcweir { 2033*cdf0e10cSrcweir ImplSVData* pSVData = ImplGetSVData(); 2034*cdf0e10cSrcweir pSVData->mpDefInst->AddToRecentDocumentList(rFileUrl, rMimeType); 2035*cdf0e10cSrcweir } 2036*cdf0e10cSrcweir 2037*cdf0e10cSrcweir sal_Bool Application::IsAccessibilityEnabled() 2038*cdf0e10cSrcweir { 2039*cdf0e10cSrcweir return sal_False; 2040*cdf0e10cSrcweir } 2041*cdf0e10cSrcweir 2042*cdf0e10cSrcweir sal_Bool InitAccessBridge( sal_Bool bShowCancel, sal_Bool &rCancelled ) 2043*cdf0e10cSrcweir { 2044*cdf0e10cSrcweir sal_Bool bRet = true; 2045*cdf0e10cSrcweir 2046*cdf0e10cSrcweir // Disable Java bridge on UNIX 2047*cdf0e10cSrcweir #if defined UNX 2048*cdf0e10cSrcweir (void) bShowCancel; // unsued 2049*cdf0e10cSrcweir (void) rCancelled; // unused 2050*cdf0e10cSrcweir #else 2051*cdf0e10cSrcweir bRet = ImplInitAccessBridge( bShowCancel, rCancelled ); 2052*cdf0e10cSrcweir 2053*cdf0e10cSrcweir if( !bRet && bShowCancel && !rCancelled ) 2054*cdf0e10cSrcweir { 2055*cdf0e10cSrcweir // disable accessibility if the user chooses to continue 2056*cdf0e10cSrcweir AllSettings aSettings = Application::GetSettings(); 2057*cdf0e10cSrcweir MiscSettings aMisc = aSettings.GetMiscSettings(); 2058*cdf0e10cSrcweir aMisc.SetEnableATToolSupport( sal_False ); 2059*cdf0e10cSrcweir aSettings.SetMiscSettings( aMisc ); 2060*cdf0e10cSrcweir Application::SetSettings( aSettings ); 2061*cdf0e10cSrcweir } 2062*cdf0e10cSrcweir #endif // !UNX 2063*cdf0e10cSrcweir 2064*cdf0e10cSrcweir return bRet; 2065*cdf0e10cSrcweir } 2066*cdf0e10cSrcweir 2067*cdf0e10cSrcweir // MT: AppProperty, AppEvent was in oldsv.cxx, but is still needed... 2068*cdf0e10cSrcweir // ------------------------------------------------------------------------ 2069*cdf0e10cSrcweir 2070*cdf0e10cSrcweir TYPEINIT0(ApplicationProperty) 2071*cdf0e10cSrcweir 2072*cdf0e10cSrcweir // ------------------------------------------------------------------------ 2073*cdf0e10cSrcweir 2074*cdf0e10cSrcweir static PropertyHandler* pHandler=NULL; 2075*cdf0e10cSrcweir 2076*cdf0e10cSrcweir void Application::Property( ApplicationProperty& rProp ) 2077*cdf0e10cSrcweir { 2078*cdf0e10cSrcweir if ( pHandler ) 2079*cdf0e10cSrcweir pHandler->Property( rProp ); 2080*cdf0e10cSrcweir } 2081*cdf0e10cSrcweir 2082*cdf0e10cSrcweir void Application::SetPropertyHandler( PropertyHandler* p ) 2083*cdf0e10cSrcweir { 2084*cdf0e10cSrcweir if ( pHandler ) 2085*cdf0e10cSrcweir delete pHandler; 2086*cdf0e10cSrcweir pHandler = p; 2087*cdf0e10cSrcweir } 2088*cdf0e10cSrcweir 2089*cdf0e10cSrcweir 2090*cdf0e10cSrcweir 2091*cdf0e10cSrcweir void Application::AppEvent( const ApplicationEvent& /*rAppEvent*/ ) 2092*cdf0e10cSrcweir { 2093*cdf0e10cSrcweir } 2094