xref: /aoo42x/main/vcl/source/app/svdata.cxx (revision 86e1cf34)
19f62ea84SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
39f62ea84SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
49f62ea84SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
59f62ea84SAndrew Rist  * distributed with this work for additional information
69f62ea84SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
79f62ea84SAndrew Rist  * to you under the Apache License, Version 2.0 (the
89f62ea84SAndrew Rist  * "License"); you may not use this file except in compliance
99f62ea84SAndrew Rist  * with the License.  You may obtain a copy of the License at
109f62ea84SAndrew Rist  *
119f62ea84SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
129f62ea84SAndrew Rist  *
139f62ea84SAndrew Rist  * Unless required by applicable law or agreed to in writing,
149f62ea84SAndrew Rist  * software distributed under the License is distributed on an
159f62ea84SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169f62ea84SAndrew Rist  * KIND, either express or implied.  See the License for the
179f62ea84SAndrew Rist  * specific language governing permissions and limitations
189f62ea84SAndrew Rist  * under the License.
199f62ea84SAndrew Rist  *
209f62ea84SAndrew Rist  *************************************************************/
219f62ea84SAndrew Rist 
229f62ea84SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <string.h>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include "rtl/instance.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include "osl/process.h"
32cdf0e10cSrcweir #include "osl/file.hxx"
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include "tools/debug.hxx"
35cdf0e10cSrcweir #include "tools/resary.hxx"
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include "unotools/fontcfg.hxx"
38cdf0e10cSrcweir 
39df906e24SSteve Yin #ifdef WNT
40df906e24SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_XACCESSIBLE_HPP_
41df906e24SSteve Yin #include <com/sun/star/accessibility/XAccessible.hpp>
42df906e24SSteve Yin #endif
43df906e24SSteve Yin #ifndef _COM_SUN_STAR_ACCESSIBILITY_ACCESSIBLEROLE_HPP_
44df906e24SSteve Yin #include <com/sun/star/accessibility/AccessibleRole.hpp>
45df906e24SSteve Yin #endif
46df906e24SSteve Yin #endif
47cdf0e10cSrcweir #include "vos/mutex.hxx"
48cdf0e10cSrcweir 
49cdf0e10cSrcweir #include "cppuhelper/implbase1.hxx"
50cdf0e10cSrcweir 
51cdf0e10cSrcweir #include "uno/current_context.hxx"
52cdf0e10cSrcweir 
53cdf0e10cSrcweir #include "vcl/configsettings.hxx"
54cdf0e10cSrcweir #include "vcl/svapp.hxx"
55cdf0e10cSrcweir #include "vcl/wrkwin.hxx"
56cdf0e10cSrcweir #include "vcl/msgbox.hxx"
57cdf0e10cSrcweir #include "vcl/unohelp.hxx"
58cdf0e10cSrcweir #include "vcl/button.hxx" // for Button::GetStandardText
59cdf0e10cSrcweir #include "vcl/dockwin.hxx"  // for DockingManager
60cdf0e10cSrcweir 
61cdf0e10cSrcweir #include "salinst.hxx"
62cdf0e10cSrcweir #include "salframe.hxx"
63cdf0e10cSrcweir #include "svdata.hxx"
64cdf0e10cSrcweir #include "window.h"
65cdf0e10cSrcweir #include "salimestatus.hxx"
66cdf0e10cSrcweir #include "salsys.hxx"
67cdf0e10cSrcweir #include "svids.hrc"
68cdf0e10cSrcweir 
69cdf0e10cSrcweir #include "com/sun/star/lang/XMultiServiceFactory.hpp"
70cdf0e10cSrcweir #include "com/sun/star/lang/XComponent.hpp"
71cdf0e10cSrcweir #include "com/sun/star/awt/XExtendedToolkit.hpp"
72cdf0e10cSrcweir #include "com/sun/star/java/JavaNotConfiguredException.hpp"
73cdf0e10cSrcweir #include "com/sun/star/java/JavaVMCreationFailureException.hpp"
74cdf0e10cSrcweir #include "com/sun/star/java/MissingJavaRuntimeException.hpp"
75cdf0e10cSrcweir #include "com/sun/star/java/JavaDisabledException.hpp"
76cdf0e10cSrcweir 
77cdf0e10cSrcweir #include <stdio.h>
78df906e24SSteve Yin #ifdef WNT
79df906e24SSteve Yin #include <unotools/processfactory.hxx>
80df906e24SSteve Yin #include <com/sun/star/accessibility/XMSAAService.hpp>
81df906e24SSteve Yin #include <win/g_msaasvc.h>
82df906e24SSteve Yin #endif
83cdf0e10cSrcweir 
84cdf0e10cSrcweir namespace {
85cdf0e10cSrcweir 
86cdf0e10cSrcweir namespace css = com::sun::star;
87cdf0e10cSrcweir 
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir using namespace com::sun::star::uno;
91cdf0e10cSrcweir using namespace com::sun::star::lang;
92cdf0e10cSrcweir using namespace com::sun::star::awt;
93cdf0e10cSrcweir using namespace rtl;
94cdf0e10cSrcweir 
95cdf0e10cSrcweir // =======================================================================
96cdf0e10cSrcweir 
97cdf0e10cSrcweir namespace
98cdf0e10cSrcweir {
99cdf0e10cSrcweir     struct private_aImplSVData :
100cdf0e10cSrcweir         public rtl::Static<ImplSVData, private_aImplSVData> {};
101cdf0e10cSrcweir }
102cdf0e10cSrcweir 
103cdf0e10cSrcweir // static SV-Data
104cdf0e10cSrcweir ImplSVData* pImplSVData = NULL;
105cdf0e10cSrcweir 
ImplGetSalSystem()106cdf0e10cSrcweir SalSystem* ImplGetSalSystem()
107cdf0e10cSrcweir {
108cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
109cdf0e10cSrcweir     if( ! pSVData->mpSalSystem )
110cdf0e10cSrcweir         pSVData->mpSalSystem = pSVData->mpDefInst->CreateSalSystem();
111cdf0e10cSrcweir     return pSVData->mpSalSystem;
112cdf0e10cSrcweir }
113cdf0e10cSrcweir 
114cdf0e10cSrcweir 
ReplaceJavaErrorMessages(String & rString)115cdf0e10cSrcweir static String& ReplaceJavaErrorMessages( String& rString )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir     rString.SearchAndReplaceAllAscii( "%OK", Button::GetStandardText( BUTTON_OK ) );
118cdf0e10cSrcweir     rString.SearchAndReplaceAllAscii( "%IGNORE", Button::GetStandardText( BUTTON_IGNORE ) );
119cdf0e10cSrcweir     rString.SearchAndReplaceAllAscii( "%CANCEL", Button::GetStandardText( BUTTON_CANCEL ) );
120cdf0e10cSrcweir 
121cdf0e10cSrcweir     return rString;
122cdf0e10cSrcweir }
123cdf0e10cSrcweir 
124cdf0e10cSrcweir // =======================================================================
125cdf0e10cSrcweir 
ImplInitSVData()126cdf0e10cSrcweir void ImplInitSVData()
127cdf0e10cSrcweir {
128cdf0e10cSrcweir     pImplSVData = &private_aImplSVData::get();
129cdf0e10cSrcweir 
130cdf0e10cSrcweir     // init global instance data
131cdf0e10cSrcweir     memset( pImplSVData, 0, sizeof( ImplSVData ) );
132cdf0e10cSrcweir     pImplSVData->maHelpData.mbAutoHelpId = sal_True;
133cdf0e10cSrcweir     pImplSVData->maNWFData.maMenuBarHighlightTextColor = Color( COL_TRANSPARENT );
134cdf0e10cSrcweir 
135cdf0e10cSrcweir     // find out whether we are running in the testtool
136cdf0e10cSrcweir     // in this case we need some special workarounds
137cdf0e10cSrcweir     sal_uInt32 nArgs = osl_getCommandArgCount();
138cdf0e10cSrcweir     for( sal_uInt32 i = 0; i < nArgs; i++ )
139cdf0e10cSrcweir     {
140cdf0e10cSrcweir         rtl::OUString aArg;
141cdf0e10cSrcweir         osl_getCommandArg( i, &aArg.pData );
142cdf0e10cSrcweir         if( aArg.equalsAscii( "-enableautomation" ) )
143cdf0e10cSrcweir         {
144cdf0e10cSrcweir             pImplSVData->mbIsTestTool = true;
145cdf0e10cSrcweir             break;
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir     }
1483a700b0aSSteve Yin #ifdef WNT
149df906e24SSteve Yin 	//Default enable the acc bridge interface
150df906e24SSteve Yin 	pImplSVData->maAppData.m_bEnableAccessInterface =true;
1513a700b0aSSteve Yin #endif
152cdf0e10cSrcweir 
153cdf0e10cSrcweir     // mark default layout border as unitialized
154cdf0e10cSrcweir     pImplSVData->maAppData.mnDefaultLayoutBorder = -1;
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir // -----------------------------------------------------------------------
158cdf0e10cSrcweir 
ImplDeInitSVData()159cdf0e10cSrcweir void ImplDeInitSVData()
160cdf0e10cSrcweir {
161cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     // delete global instance data
164cdf0e10cSrcweir     if( pSVData->mpSettingsConfigItem )
165cdf0e10cSrcweir         delete pSVData->mpSettingsConfigItem;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     if( pSVData->mpDockingManager )
168cdf0e10cSrcweir         delete pSVData->mpDockingManager;
169cdf0e10cSrcweir 
170cdf0e10cSrcweir     if( pSVData->maGDIData.mpDefaultFontConfiguration )
171cdf0e10cSrcweir         delete pSVData->maGDIData.mpDefaultFontConfiguration;
172cdf0e10cSrcweir     if( pSVData->maGDIData.mpFontSubstConfiguration )
173cdf0e10cSrcweir         delete pSVData->maGDIData.mpFontSubstConfiguration;
174cdf0e10cSrcweir 
175cdf0e10cSrcweir     if ( pSVData->maAppData.mpMSFTempFileName )
176cdf0e10cSrcweir     {
177cdf0e10cSrcweir         if ( pSVData->maAppData.mxMSF.is() )
178cdf0e10cSrcweir         {
179cdf0e10cSrcweir             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xComp( pSVData->maAppData.mxMSF, ::com::sun::star::uno::UNO_QUERY );
180cdf0e10cSrcweir             xComp->dispose();
181cdf0e10cSrcweir             pSVData->maAppData.mxMSF = NULL;
182cdf0e10cSrcweir         }
183cdf0e10cSrcweir 
184cdf0e10cSrcweir         ::rtl::OUString aFileUrl;
185cdf0e10cSrcweir         ::osl::File::getFileURLFromSystemPath( *pSVData->maAppData.mpMSFTempFileName, aFileUrl );
186cdf0e10cSrcweir         osl::File::remove( aFileUrl );
187cdf0e10cSrcweir         delete pSVData->maAppData.mpMSFTempFileName;
188cdf0e10cSrcweir         pSVData->maAppData.mpMSFTempFileName = NULL;
189cdf0e10cSrcweir     }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir     if( pSVData->maCtrlData.mpFieldUnitStrings )
192cdf0e10cSrcweir         delete pSVData->maCtrlData.mpFieldUnitStrings, pSVData->maCtrlData.mpFieldUnitStrings = NULL;
193cdf0e10cSrcweir     if( pSVData->maCtrlData.mpCleanUnitStrings )
194cdf0e10cSrcweir         delete pSVData->maCtrlData.mpCleanUnitStrings, pSVData->maCtrlData.mpCleanUnitStrings = NULL;
195cdf0e10cSrcweir     if( pSVData->mpPaperNames )
196cdf0e10cSrcweir         delete pSVData->mpPaperNames, pSVData->mpPaperNames = NULL;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir // -----------------------------------------------------------------------
200cdf0e10cSrcweir 
ImplDestroySVData()201cdf0e10cSrcweir void ImplDestroySVData()
202cdf0e10cSrcweir {
203cdf0e10cSrcweir     pImplSVData = NULL;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir 
206cdf0e10cSrcweir // -----------------------------------------------------------------------
207cdf0e10cSrcweir 
ImplGetDefaultWindow()208cdf0e10cSrcweir Window* ImplGetDefaultWindow()
209cdf0e10cSrcweir {
210cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
211cdf0e10cSrcweir     if ( pSVData->maWinData.mpAppWin )
212cdf0e10cSrcweir         return pSVData->maWinData.mpAppWin;
213cdf0e10cSrcweir 
214cdf0e10cSrcweir 	// First test if we already have a default window.
215cdf0e10cSrcweir 	// Don't only place a single if..else inside solar mutex lockframe
216*86e1cf34SPedro Giffuni 	// because then we might have to wait for the solar mutex what is not necessary
217cdf0e10cSrcweir 	// if we already have a default window.
218cdf0e10cSrcweir 
219cdf0e10cSrcweir     if ( !pSVData->mpDefaultWin )
220cdf0e10cSrcweir 	{
221cdf0e10cSrcweir 		Application::GetSolarMutex().acquire();
222cdf0e10cSrcweir 
223cdf0e10cSrcweir 		// Test again because the thread who released the solar mutex could have called
224cdf0e10cSrcweir 		// the same method
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 		if ( !pSVData->mpDefaultWin && !pSVData->mbDeInit )
227cdf0e10cSrcweir 		{
228cdf0e10cSrcweir 			DBG_WARNING( "ImplGetDefaultWindow(): No AppWindow" );
229cdf0e10cSrcweir 			pSVData->mpDefaultWin = new WorkWindow( 0, WB_DEFAULTWIN );
230cdf0e10cSrcweir             pSVData->mpDefaultWin->SetText( OUString( RTL_CONSTASCII_USTRINGPARAM( "VCL ImplGetDefaultWindow" ) ) );
231cdf0e10cSrcweir 		}
232cdf0e10cSrcweir 		Application::GetSolarMutex().release();
233cdf0e10cSrcweir 	}
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     return pSVData->mpDefaultWin;
236cdf0e10cSrcweir }
237cdf0e10cSrcweir 
238cdf0e10cSrcweir // -----------------------------------------------------------------------
239cdf0e10cSrcweir 
240cdf0e10cSrcweir #define VCL_CREATERESMGR_NAME( Name )   #Name
241cdf0e10cSrcweir 
ImplGetResMgr()242cdf0e10cSrcweir ResMgr* ImplGetResMgr()
243cdf0e10cSrcweir {
244cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
245cdf0e10cSrcweir     if ( !pSVData->mpResMgr )
246cdf0e10cSrcweir     {
247cdf0e10cSrcweir         ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
248cdf0e10cSrcweir         pSVData->mpResMgr = ResMgr::SearchCreateResMgr( VCL_CREATERESMGR_NAME( vcl ), aLocale );
249cdf0e10cSrcweir 
250cdf0e10cSrcweir         static bool bMessageOnce = false;
251cdf0e10cSrcweir         if( !pSVData->mpResMgr && ! bMessageOnce )
252cdf0e10cSrcweir         {
253cdf0e10cSrcweir             bMessageOnce = true;
254cdf0e10cSrcweir             const char* pMsg =
255cdf0e10cSrcweir                 "Missing vcl resource. This indicates that files vital to localization are missing. "
256cdf0e10cSrcweir                 "You might have a corrupt installation.";
257cdf0e10cSrcweir             fprintf( stderr, "%s\n", pMsg );
258cdf0e10cSrcweir             ErrorBox aBox( NULL, WB_OK | WB_DEF_OK, rtl::OUString( pMsg, strlen( pMsg ), RTL_TEXTENCODING_ASCII_US ) );
259cdf0e10cSrcweir             aBox.Execute();
260cdf0e10cSrcweir         }
261cdf0e10cSrcweir     }
262cdf0e10cSrcweir     return pSVData->mpResMgr;
263cdf0e10cSrcweir }
264cdf0e10cSrcweir 
VclResId(sal_Int32 nId)265cdf0e10cSrcweir ResId VclResId( sal_Int32 nId )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir     ResMgr* pMgr = ImplGetResMgr();
268cdf0e10cSrcweir     if( ! pMgr )
269cdf0e10cSrcweir         throw std::bad_alloc();
270cdf0e10cSrcweir 
271cdf0e10cSrcweir     return ResId( nId, *pMgr );
272cdf0e10cSrcweir }
273cdf0e10cSrcweir 
ImplGetFieldUnits()274cdf0e10cSrcweir FieldUnitStringList* ImplGetFieldUnits()
275cdf0e10cSrcweir {
276cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
277cdf0e10cSrcweir     if( ! pSVData->maCtrlData.mpFieldUnitStrings )
278cdf0e10cSrcweir     {
279cdf0e10cSrcweir         ResMgr* pResMgr = ImplGetResMgr();
280cdf0e10cSrcweir         if( pResMgr )
281cdf0e10cSrcweir         {
282cdf0e10cSrcweir             ResStringArray aUnits( ResId (SV_FUNIT_STRINGS, *pResMgr) );
283cdf0e10cSrcweir             sal_uInt32 nUnits = aUnits.Count();
284cdf0e10cSrcweir             pSVData->maCtrlData.mpFieldUnitStrings = new FieldUnitStringList();
285cdf0e10cSrcweir             pSVData->maCtrlData.mpFieldUnitStrings->reserve( nUnits );
286cdf0e10cSrcweir             for( sal_uInt32 i = 0; i < nUnits; i++ )
287cdf0e10cSrcweir             {
288cdf0e10cSrcweir                 std::pair< String, FieldUnit > aElement( aUnits.GetString(i), static_cast<FieldUnit>(aUnits.GetValue(i)) );
289cdf0e10cSrcweir                 pSVData->maCtrlData.mpFieldUnitStrings->push_back( aElement );
290cdf0e10cSrcweir             }
291cdf0e10cSrcweir         }
292cdf0e10cSrcweir     }
293cdf0e10cSrcweir     return pSVData->maCtrlData.mpFieldUnitStrings;
294cdf0e10cSrcweir }
295cdf0e10cSrcweir 
ImplGetCleanedFieldUnits()296cdf0e10cSrcweir FieldUnitStringList* ImplGetCleanedFieldUnits()
297cdf0e10cSrcweir {
298cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
299cdf0e10cSrcweir     if( ! pSVData->maCtrlData.mpCleanUnitStrings )
300cdf0e10cSrcweir     {
301cdf0e10cSrcweir         FieldUnitStringList* pUnits = ImplGetFieldUnits();
302cdf0e10cSrcweir         if( pUnits )
303cdf0e10cSrcweir         {
304cdf0e10cSrcweir             size_t nUnits = pUnits->size();
305cdf0e10cSrcweir             pSVData->maCtrlData.mpCleanUnitStrings = new FieldUnitStringList();
306cdf0e10cSrcweir             pSVData->maCtrlData.mpCleanUnitStrings->reserve( nUnits );
307cdf0e10cSrcweir             for( size_t i = 0; i < nUnits; i++ )
308cdf0e10cSrcweir             {
309cdf0e10cSrcweir                 String aUnit( (*pUnits)[i].first );
310cdf0e10cSrcweir                 aUnit.EraseAllChars( sal_Unicode( ' ' ) );
311cdf0e10cSrcweir                 aUnit.ToLowerAscii();
312cdf0e10cSrcweir                 std::pair< String, FieldUnit > aElement( aUnit, (*pUnits)[i].second );
313cdf0e10cSrcweir                 pSVData->maCtrlData.mpCleanUnitStrings->push_back( aElement );
314cdf0e10cSrcweir             }
315cdf0e10cSrcweir         }
316cdf0e10cSrcweir     }
317cdf0e10cSrcweir     return pSVData->maCtrlData.mpCleanUnitStrings;
318cdf0e10cSrcweir }
319cdf0e10cSrcweir 
ImplGetDockingManager()320cdf0e10cSrcweir DockingManager* ImplGetDockingManager()
321cdf0e10cSrcweir {
322cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
323cdf0e10cSrcweir     if ( !pSVData->mpDockingManager )
324cdf0e10cSrcweir         pSVData->mpDockingManager = new DockingManager();
325cdf0e10cSrcweir 
326cdf0e10cSrcweir     return pSVData->mpDockingManager;
327cdf0e10cSrcweir }
328cdf0e10cSrcweir 
329cdf0e10cSrcweir class AccessBridgeCurrentContext: public cppu::WeakImplHelper1< com::sun::star::uno::XCurrentContext >
330cdf0e10cSrcweir {
331cdf0e10cSrcweir public:
AccessBridgeCurrentContext(const com::sun::star::uno::Reference<com::sun::star::uno::XCurrentContext> & context)332cdf0e10cSrcweir     AccessBridgeCurrentContext(
333cdf0e10cSrcweir         const com::sun::star::uno::Reference< com::sun::star::uno::XCurrentContext > &context ) :
334cdf0e10cSrcweir         m_prevContext( context ) {}
335cdf0e10cSrcweir 
336cdf0e10cSrcweir     // XCurrentContext
337cdf0e10cSrcweir     virtual com::sun::star::uno::Any SAL_CALL getValueByName( const rtl::OUString& Name )
338cdf0e10cSrcweir         throw (com::sun::star::uno::RuntimeException);
339cdf0e10cSrcweir private:
340cdf0e10cSrcweir     com::sun::star::uno::Reference< com::sun::star::uno::XCurrentContext > m_prevContext;
341cdf0e10cSrcweir };
342cdf0e10cSrcweir 
getValueByName(const rtl::OUString & Name)343cdf0e10cSrcweir com::sun::star::uno::Any AccessBridgeCurrentContext::getValueByName( const rtl::OUString & Name )
344cdf0e10cSrcweir     throw (com::sun::star::uno::RuntimeException)
345cdf0e10cSrcweir {
346cdf0e10cSrcweir     com::sun::star::uno::Any ret;
347cdf0e10cSrcweir     if( Name.equalsAscii( "java-vm.interaction-handler" ) )
348cdf0e10cSrcweir     {
349cdf0e10cSrcweir         // Currently, for accessbility no interaction handler shall be offered.
350cdf0e10cSrcweir         // There may be introduced later on a handler using native toolkits
351cdf0e10cSrcweir         // jbu->obr: Instantiate here your interaction handler
352cdf0e10cSrcweir     }
353cdf0e10cSrcweir     else if( m_prevContext.is() )
354cdf0e10cSrcweir     {
355cdf0e10cSrcweir         ret = m_prevContext->getValueByName( Name );
356cdf0e10cSrcweir     }
357cdf0e10cSrcweir     return ret;
358cdf0e10cSrcweir }
359df906e24SSteve Yin #ifdef WNT
AccessBridgehandleExistingWindow(Window * pWindow,bool bShow)360df906e24SSteve Yin void AccessBridgehandleExistingWindow(Window * pWindow, bool bShow)
361df906e24SSteve Yin {
362df906e24SSteve Yin     if ( pWindow )
363df906e24SSteve Yin     {
364df906e24SSteve Yin         css::uno::Reference< css::accessibility::XAccessible > xAccessible;
365df906e24SSteve Yin 
366df906e24SSteve Yin         // Test for combo box - drop down floating windows first
367df906e24SSteve Yin         Window * pParentWindow = pWindow->GetParent();
368df906e24SSteve Yin 
369df906e24SSteve Yin         if ( pParentWindow )
370df906e24SSteve Yin         {
371df906e24SSteve Yin             try
372df906e24SSteve Yin             {
373df906e24SSteve Yin                 // The parent window of a combo box floating window should have the role COMBO_BOX
374df906e24SSteve Yin                 css::uno::Reference< css::accessibility::XAccessible > xParentAccessible(pParentWindow->GetAccessible());
375df906e24SSteve Yin                 if ( xParentAccessible.is() )
376df906e24SSteve Yin                 {
377df906e24SSteve Yin                     css::uno::Reference< css::accessibility::XAccessibleContext > xParentAC( xParentAccessible->getAccessibleContext() );
378df906e24SSteve Yin                     if ( xParentAC.is() && (css::accessibility::AccessibleRole::COMBO_BOX == xParentAC->getAccessibleRole()) )
379df906e24SSteve Yin                     {
380df906e24SSteve Yin                         // O.k. - this is a combo box floating window corresponding to the child of role LIST of the parent.
381df906e24SSteve Yin                         // Let's not rely on a specific child order, just search for the child with the role LIST
382df906e24SSteve Yin                         sal_Int32 nCount = xParentAC->getAccessibleChildCount();
383df906e24SSteve Yin                         for ( sal_Int32 n = 0; (n < nCount) && !xAccessible.is(); n++)
384df906e24SSteve Yin                         {
385df906e24SSteve Yin                             css::uno::Reference< css::accessibility::XAccessible > xChild = xParentAC->getAccessibleChild(n);
386df906e24SSteve Yin                             if ( xChild.is() )
387df906e24SSteve Yin                             {
388df906e24SSteve Yin                                 css::uno::Reference< css::accessibility::XAccessibleContext > xChildAC = xChild->getAccessibleContext();
389df906e24SSteve Yin                                 if ( xChildAC.is() && (css::accessibility::AccessibleRole::LIST == xChildAC->getAccessibleRole()) )
390df906e24SSteve Yin                                 {
391df906e24SSteve Yin                                     xAccessible = xChild;
392df906e24SSteve Yin                                 }
393df906e24SSteve Yin                             }
394df906e24SSteve Yin                         }
395df906e24SSteve Yin                     }
396df906e24SSteve Yin                 }
397df906e24SSteve Yin             }
398df906e24SSteve Yin             catch (::com::sun::star::uno::RuntimeException e)
399df906e24SSteve Yin             {
400df906e24SSteve Yin                 // Ignore show events that throw DisposedExceptions in getAccessibleContext(),
401df906e24SSteve Yin                 // but keep revoking these windows in hide(s).
402df906e24SSteve Yin                 if (bShow)
403df906e24SSteve Yin                     return;
404df906e24SSteve Yin             }
405df906e24SSteve Yin         }
406df906e24SSteve Yin 
407df906e24SSteve Yin         // We have to rely on the fact that Window::GetAccessible()->getAccessibleContext() returns a valid XAccessibleContext
408df906e24SSteve Yin         // also for other menus than menubar or toplevel popup window. Otherwise we had to traverse the hierarchy to find the
409df906e24SSteve Yin         // context object to this menu floater. This makes the call to Window->IsMenuFloatingWindow() obsolete.
410df906e24SSteve Yin         if ( ! xAccessible.is() )
411df906e24SSteve Yin             xAccessible = pWindow->GetAccessible();
412df906e24SSteve Yin 
413df906e24SSteve Yin 		if ( xAccessible.is() && g_acc_manager1 )
414df906e24SSteve Yin         {
415df906e24SSteve Yin 			g_acc_manager1->handleWindowOpened( (long)(xAccessible.get()));
416df906e24SSteve Yin         }
417df906e24SSteve Yin     }
418df906e24SSteve Yin }
419cdf0e10cSrcweir 
AccessBridgeupdateOldTopWindows()420df906e24SSteve Yin void AccessBridgeupdateOldTopWindows()
421df906e24SSteve Yin {
422df906e24SSteve Yin 	sal_uInt16 nTopWindowCount = (sal_uInt16)Application::GetTopWindowCount();
423df906e24SSteve Yin 	for (sal_uInt16 i = 0; i < nTopWindowCount; i++)
424df906e24SSteve Yin 	{
425df906e24SSteve Yin 		Window* pTopWindow = Application::GetTopWindow( i );
426df906e24SSteve Yin         css::uno::Reference< css::accessibility::XAccessible > xAccessible = pTopWindow->GetAccessible();
427df906e24SSteve Yin         if ( xAccessible.is() )
428df906e24SSteve Yin         {
429df906e24SSteve Yin 			css::uno::Reference< css::accessibility::XAccessibleContext > xAC(xAccessible->getAccessibleContext());
430df906e24SSteve Yin             if ( xAC.is())
431df906e24SSteve Yin             {
432df906e24SSteve Yin             	short role = xAC->getAccessibleRole();
433df906e24SSteve Yin             	if(xAC->getAccessibleName().getLength() > 0)
434df906e24SSteve Yin 					AccessBridgehandleExistingWindow(pTopWindow, true);
435df906e24SSteve Yin             }
436df906e24SSteve Yin         }
437df906e24SSteve Yin 	}
438df906e24SSteve Yin }
439df906e24SSteve Yin #endif
440cdf0e10cSrcweir 
ImplInitAccessBridge(sal_Bool bAllowCancel,sal_Bool & rCancelled)441cdf0e10cSrcweir bool ImplInitAccessBridge(sal_Bool bAllowCancel, sal_Bool &rCancelled)
442cdf0e10cSrcweir {
443cdf0e10cSrcweir     rCancelled = sal_False;
444cdf0e10cSrcweir 
445f8d90fbeSSteve Yin     sal_Bool bErrorMessage = sal_True;
446cdf0e10cSrcweir 
447cdf0e10cSrcweir     // Note:
448cdf0e10cSrcweir     // if bAllowCancel is sal_True we were called from application startup
449cdf0e10cSrcweir     //  where we will disable any Java errorboxes and show our own accessibility dialog if Java throws an exception
450cdf0e10cSrcweir     // if bAllowCancel is sal_False we were called from Tools->Options
451cdf0e10cSrcweir     //  where we will see Java errorboxes, se we do not show our dialogs in addition to Java's
452cdf0e10cSrcweir 
453cdf0e10cSrcweir     try
454cdf0e10cSrcweir     {
455f8d90fbeSSteve Yin         sal_Bool bSuccess = sal_True;
456cdf0e10cSrcweir 
457cdf0e10cSrcweir         // No error messages when env var is set ..
458cdf0e10cSrcweir         static const char* pEnv = getenv("SAL_ACCESSIBILITY_ENABLED" );
459cdf0e10cSrcweir         if( pEnv && *pEnv )
460cdf0e10cSrcweir         {
461f8d90fbeSSteve Yin             bErrorMessage = sal_False;
462cdf0e10cSrcweir         }
463cdf0e10cSrcweir 
464cdf0e10cSrcweir         ImplSVData* pSVData = ImplGetSVData();
465cdf0e10cSrcweir         if( ! pSVData->mxAccessBridge.is() )
466cdf0e10cSrcweir         {
467cdf0e10cSrcweir             css::uno::Reference< XMultiServiceFactory > xFactory(vcl::unohelper::GetMultiServiceFactory());
468cdf0e10cSrcweir 
469cdf0e10cSrcweir             if( xFactory.is() )
470cdf0e10cSrcweir             {
4713a700b0aSSteve Yin #ifdef WNT
4725be78d22SSteve Yin 				pSVData->mxAccessBridge = xFactory->createInstance(
473df906e24SSteve Yin 			               OUString::createFromAscii( "com.sun.star.accessibility.MSAAService" ) );
474df906e24SSteve Yin 			    if( pSVData->mxAccessBridge.is() )
475df906e24SSteve Yin 			    {
476df906e24SSteve Yin 			    	css::uno::Reference< css::uno::XInterface > pRManager= pSVData->mxAccessBridge;
477df906e24SSteve Yin 			    	g_acc_manager1 = (css::accessibility::XMSAAService*)(pRManager.get());
478df906e24SSteve Yin 					AccessBridgeupdateOldTopWindows();
479df906e24SSteve Yin 			    }
480df906e24SSteve Yin 
481df906e24SSteve Yin 			    if( !pSVData->mxAccessBridge.is() )
482f8d90fbeSSteve Yin                     bSuccess = sal_False;
483df906e24SSteve Yin                 return bSuccess;
4843a700b0aSSteve Yin #endif
485cdf0e10cSrcweir                 css::uno::Reference< XExtendedToolkit > xToolkit =
486cdf0e10cSrcweir                     css::uno::Reference< XExtendedToolkit >(Application::GetVCLToolkit(), UNO_QUERY);
487cdf0e10cSrcweir 
488cdf0e10cSrcweir                 Sequence< Any > arguments(1);
489cdf0e10cSrcweir                 arguments[0] = makeAny(xToolkit);
490cdf0e10cSrcweir 
491cdf0e10cSrcweir 	            // Disable default java error messages on startup, because they were probably unreadable
492cdf0e10cSrcweir 		        // for a disabled user. Use native message boxes which are accessible without java support.
493cdf0e10cSrcweir 			    // No need to do this when activated by Tools-Options dialog ..
494cdf0e10cSrcweir                 if( bAllowCancel )
495cdf0e10cSrcweir 		        {
496cdf0e10cSrcweir 			        // customize the java-not-available-interaction-handler entry within the
497cdf0e10cSrcweir 				    // current context when called at startup.
498cdf0e10cSrcweir 					com::sun::star::uno::ContextLayer layer(
499cdf0e10cSrcweir 						new AccessBridgeCurrentContext( com::sun::star::uno::getCurrentContext() ) );
500cdf0e10cSrcweir 
501cdf0e10cSrcweir 	                pSVData->mxAccessBridge = xFactory->createInstanceWithArguments(
502cdf0e10cSrcweir 			                OUString::createFromAscii( "com.sun.star.accessibility.AccessBridge" ),
503cdf0e10cSrcweir 				            arguments
504cdf0e10cSrcweir 					    );
505cdf0e10cSrcweir 				}
506cdf0e10cSrcweir 				else
507cdf0e10cSrcweir 				{
508cdf0e10cSrcweir 	                pSVData->mxAccessBridge = xFactory->createInstanceWithArguments(
509cdf0e10cSrcweir 			                OUString::createFromAscii( "com.sun.star.accessibility.AccessBridge" ),
510cdf0e10cSrcweir 				            arguments
511cdf0e10cSrcweir 					    );
512cdf0e10cSrcweir 				}
513cdf0e10cSrcweir 
514cdf0e10cSrcweir                 if( !pSVData->mxAccessBridge.is() )
515f8d90fbeSSteve Yin                     bSuccess = sal_False;
516cdf0e10cSrcweir             }
517cdf0e10cSrcweir         }
518cdf0e10cSrcweir 
519cdf0e10cSrcweir         return bSuccess;
520cdf0e10cSrcweir     }
521cdf0e10cSrcweir 
522adad3ae8SHerbert Dürr     catch(::com::sun::star::java::JavaNotConfiguredException&)
523cdf0e10cSrcweir     {
524cdf0e10cSrcweir         ResMgr *pResMgr = ImplGetResMgr();
525cdf0e10cSrcweir         if( bErrorMessage && bAllowCancel && pResMgr )
526cdf0e10cSrcweir         {
527cdf0e10cSrcweir             String aTitle(ResId(SV_ACCESSERROR_JAVA_NOT_CONFIGURED, *pResMgr));
528cdf0e10cSrcweir             String aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr));
529cdf0e10cSrcweir 
530cdf0e10cSrcweir             aMessage += String(" ", 1, RTL_TEXTENCODING_ASCII_US);
531cdf0e10cSrcweir             aMessage += String(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr));
532cdf0e10cSrcweir 
533cdf0e10cSrcweir             int ret = ImplGetSalSystem()->ShowNativeMessageBox(
534cdf0e10cSrcweir                 aTitle,
535cdf0e10cSrcweir                 ReplaceJavaErrorMessages(aMessage),
536cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
537cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL);
538cdf0e10cSrcweir 
539cdf0e10cSrcweir             // Do not change the setting in case the user chooses to cancel
540cdf0e10cSrcweir             if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
541cdf0e10cSrcweir                 rCancelled = sal_True;
542cdf0e10cSrcweir         }
543cdf0e10cSrcweir 
544f8d90fbeSSteve Yin         return sal_False;
545cdf0e10cSrcweir     }
546cdf0e10cSrcweir 
547adad3ae8SHerbert Dürr     catch(::com::sun::star::java::JavaVMCreationFailureException&)
548cdf0e10cSrcweir     {
549cdf0e10cSrcweir         ResMgr *pResMgr = ImplGetResMgr();
550cdf0e10cSrcweir         if( bErrorMessage && bAllowCancel && pResMgr )
551cdf0e10cSrcweir         {
552cdf0e10cSrcweir             String aTitle(ResId(SV_ACCESSERROR_FAULTY_JAVA, *pResMgr));
553cdf0e10cSrcweir             String aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr));
554cdf0e10cSrcweir 
555cdf0e10cSrcweir             aMessage += String(" ", 1, RTL_TEXTENCODING_ASCII_US);
556cdf0e10cSrcweir             aMessage += String(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr));
557cdf0e10cSrcweir 
558cdf0e10cSrcweir             int ret = ImplGetSalSystem()->ShowNativeMessageBox(
559cdf0e10cSrcweir                 aTitle,
560cdf0e10cSrcweir                 ReplaceJavaErrorMessages(aMessage),
561cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
562cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL);
563cdf0e10cSrcweir 
564cdf0e10cSrcweir             // Do not change the setting in case the user chooses to cancel
565cdf0e10cSrcweir             if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
566cdf0e10cSrcweir                 rCancelled = sal_True;
567cdf0e10cSrcweir         }
568cdf0e10cSrcweir 
569f8d90fbeSSteve Yin         return sal_False;
570cdf0e10cSrcweir     }
571cdf0e10cSrcweir 
572adad3ae8SHerbert Dürr     catch(::com::sun::star::java::MissingJavaRuntimeException&)
573cdf0e10cSrcweir     {
574cdf0e10cSrcweir         ResMgr *pResMgr = ImplGetResMgr();
575cdf0e10cSrcweir         if( bErrorMessage && bAllowCancel && pResMgr )
576cdf0e10cSrcweir         {
577cdf0e10cSrcweir             String aTitle(ResId(SV_ACCESSERROR_MISSING_JAVA, *pResMgr));
578cdf0e10cSrcweir             String aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr));
579cdf0e10cSrcweir 
580cdf0e10cSrcweir             aMessage += String(" ", 1, RTL_TEXTENCODING_ASCII_US);
581cdf0e10cSrcweir             aMessage += String(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr));
582cdf0e10cSrcweir 
583cdf0e10cSrcweir             int ret = ImplGetSalSystem()->ShowNativeMessageBox(
584cdf0e10cSrcweir                 aTitle,
585cdf0e10cSrcweir                 ReplaceJavaErrorMessages(aMessage),
586cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
587cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL);
588cdf0e10cSrcweir 
589cdf0e10cSrcweir             // Do not change the setting in case the user chooses to cancel
590cdf0e10cSrcweir             if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
591cdf0e10cSrcweir                 rCancelled = sal_True;
592cdf0e10cSrcweir         }
593cdf0e10cSrcweir 
594f8d90fbeSSteve Yin         return sal_False;
595cdf0e10cSrcweir     }
596cdf0e10cSrcweir 
597adad3ae8SHerbert Dürr     catch(::com::sun::star::java::JavaDisabledException&)
598cdf0e10cSrcweir     {
599cdf0e10cSrcweir         ResMgr *pResMgr = ImplGetResMgr();
600cdf0e10cSrcweir         if( bErrorMessage && bAllowCancel && pResMgr )
601cdf0e10cSrcweir         {
602cdf0e10cSrcweir             String aTitle(ResId(SV_ACCESSERROR_JAVA_DISABLED, *pResMgr));
603cdf0e10cSrcweir             String aMessage(ResId(SV_ACCESSERROR_JAVA_MSG, *pResMgr));
604cdf0e10cSrcweir 
605cdf0e10cSrcweir             aMessage += String(" ", 1, RTL_TEXTENCODING_ASCII_US);
606cdf0e10cSrcweir             aMessage += String(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr));
607cdf0e10cSrcweir 
608cdf0e10cSrcweir             int ret = ImplGetSalSystem()->ShowNativeMessageBox(
609cdf0e10cSrcweir                 aTitle,
610cdf0e10cSrcweir                 ReplaceJavaErrorMessages(aMessage),
611cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
612cdf0e10cSrcweir                 SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL);
613cdf0e10cSrcweir 
614cdf0e10cSrcweir             // Do not change the setting in case the user chooses to cancel
615cdf0e10cSrcweir             if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
616cdf0e10cSrcweir                 rCancelled = sal_True;
617cdf0e10cSrcweir         }
618cdf0e10cSrcweir 
619f8d90fbeSSteve Yin         return sal_False;
620cdf0e10cSrcweir     }
621cdf0e10cSrcweir 
622cdf0e10cSrcweir 
623adad3ae8SHerbert Dürr     catch(::com::sun::star::uno::RuntimeException& e)
624cdf0e10cSrcweir     {
625cdf0e10cSrcweir         ResMgr *pResMgr = ImplGetResMgr();
626cdf0e10cSrcweir         if( bErrorMessage && pResMgr )
627cdf0e10cSrcweir         {
628cdf0e10cSrcweir             String aTitle;
629cdf0e10cSrcweir             String aMessage(ResId(SV_ACCESSERROR_BRIDGE_MSG, *pResMgr));
630cdf0e10cSrcweir 
631cdf0e10cSrcweir             if( 0 == e.Message.compareTo(::rtl::OUString::createFromAscii("ClassNotFound"), 13) )
632cdf0e10cSrcweir             {
633cdf0e10cSrcweir                 aTitle = String(ResId(SV_ACCESSERROR_MISSING_BRIDGE, *pResMgr));
634cdf0e10cSrcweir             }
635cdf0e10cSrcweir             else if( 0 == e.Message.compareTo(::rtl::OUString::createFromAscii("NoSuchMethod"), 12) )
636cdf0e10cSrcweir             {
637cdf0e10cSrcweir                 aTitle = String(ResId(SV_ACCESSERROR_WRONG_VERSION, *pResMgr));
638cdf0e10cSrcweir             }
639cdf0e10cSrcweir 
640cdf0e10cSrcweir             if( aTitle.Len() != 0 )
641cdf0e10cSrcweir             {
642cdf0e10cSrcweir                 if( bAllowCancel )
643cdf0e10cSrcweir                 {
644cdf0e10cSrcweir                     // Something went wrong initializing the Java AccessBridge (on Windows) during the
645cdf0e10cSrcweir                     // startup. Since the office will be probably unusable for a disabled user, we offer
646cdf0e10cSrcweir                     // to terminate directly.
647cdf0e10cSrcweir                     aMessage += String(" ", 1, RTL_TEXTENCODING_ASCII_US);
648cdf0e10cSrcweir                     aMessage += String(ResId(SV_ACCESSERROR_OK_CANCEL_MSG, *pResMgr));
649cdf0e10cSrcweir 
650cdf0e10cSrcweir                     int ret = ImplGetSalSystem()->ShowNativeMessageBox(
651cdf0e10cSrcweir                         aTitle,
652cdf0e10cSrcweir                         ReplaceJavaErrorMessages(aMessage),
653cdf0e10cSrcweir                         SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK_CANCEL,
654cdf0e10cSrcweir                         SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL);
655cdf0e10cSrcweir 
656cdf0e10cSrcweir                     // Do not change the setting in case the user chooses to cancel
657cdf0e10cSrcweir                     if( SALSYSTEM_SHOWNATIVEMSGBOX_BTN_CANCEL == ret )
658cdf0e10cSrcweir                         rCancelled = sal_True;
659cdf0e10cSrcweir                 }
660cdf0e10cSrcweir                 else
661cdf0e10cSrcweir                 {
662cdf0e10cSrcweir                     // The user tried to activate accessibility support using Tools-Options dialog,
663cdf0e10cSrcweir                     // so we don't offer to terminate here !
664cdf0e10cSrcweir                     ImplGetSalSystem()->ShowNativeMessageBox(
665cdf0e10cSrcweir                         aTitle,
666cdf0e10cSrcweir                         ReplaceJavaErrorMessages(aMessage),
667cdf0e10cSrcweir                         SALSYSTEM_SHOWNATIVEMSGBOX_BTNCOMBI_OK,
668cdf0e10cSrcweir                         SALSYSTEM_SHOWNATIVEMSGBOX_BTN_OK);
669cdf0e10cSrcweir                 }
670cdf0e10cSrcweir             }
671cdf0e10cSrcweir         }
672cdf0e10cSrcweir 
673f8d90fbeSSteve Yin         return sal_False;
674cdf0e10cSrcweir     }
675cdf0e10cSrcweir 
676cdf0e10cSrcweir     catch (...)
677cdf0e10cSrcweir     {
678f8d90fbeSSteve Yin         return sal_False;
679cdf0e10cSrcweir     }
680cdf0e10cSrcweir }
681cdf0e10cSrcweir 
682cdf0e10cSrcweir // -----------------------------------------------------------------------
683cdf0e10cSrcweir 
ImplFindWindow(const SalFrame * pFrame,::Point & rSalFramePos)684d026be40SAriel Constenla-Haile Window* ImplFindWindow( const SalFrame* pFrame, ::Point& rSalFramePos )
685cdf0e10cSrcweir {
686cdf0e10cSrcweir     ImplSVData* pSVData = ImplGetSVData();
687cdf0e10cSrcweir     Window*     pFrameWindow = pSVData->maWinData.mpFirstFrame;
688cdf0e10cSrcweir     while ( pFrameWindow )
689cdf0e10cSrcweir     {
690cdf0e10cSrcweir         if ( pFrameWindow->ImplGetFrame() == pFrame )
691cdf0e10cSrcweir         {
692cdf0e10cSrcweir             Window* pWindow = pFrameWindow->ImplFindWindow( rSalFramePos );
693cdf0e10cSrcweir             if ( !pWindow )
694cdf0e10cSrcweir                 pWindow = pFrameWindow->ImplGetWindow();
695cdf0e10cSrcweir             rSalFramePos = pWindow->ImplFrameToOutput( rSalFramePos );
696cdf0e10cSrcweir             return pWindow;
697cdf0e10cSrcweir         }
698cdf0e10cSrcweir         pFrameWindow = pFrameWindow->ImplGetFrameData()->mpNextFrame;
699cdf0e10cSrcweir     }
700cdf0e10cSrcweir 
701cdf0e10cSrcweir     return NULL;
702cdf0e10cSrcweir }
703cdf0e10cSrcweir 
ConfigurationChanged(utl::ConfigurationBroadcaster *,sal_uInt32 nHint)704cdf0e10cSrcweir void LocaleConfigurationListener::ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 nHint )
705cdf0e10cSrcweir {
706cdf0e10cSrcweir 	AllSettings::LocaleSettingsChanged( nHint );
707cdf0e10cSrcweir }
708cdf0e10cSrcweir 
709