1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_toolkit.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/SystemDependent.hpp>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/SystemDependentXWindow.hpp>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #ifdef WNT
30*b1cdbd2cSJim Jagielski #include <tools/prewin.h>
31*b1cdbd2cSJim Jagielski #include <windows.h>
32*b1cdbd2cSJim Jagielski #include <tools/postwin.h>
33*b1cdbd2cSJim Jagielski #elif defined ( OS2 )
34*b1cdbd2cSJim Jagielski #include <svpm.h>
35*b1cdbd2cSJim Jagielski #elif defined ( QUARTZ )
36*b1cdbd2cSJim Jagielski #include "premac.h"
37*b1cdbd2cSJim Jagielski #include <Cocoa/Cocoa.h>
38*b1cdbd2cSJim Jagielski #include "postmac.h"
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #include <vcl/syschild.hxx>
42*b1cdbd2cSJim Jagielski #include <vcl/sysdata.hxx>
43*b1cdbd2cSJim Jagielski #include <cppuhelper/typeprovider.hxx>
44*b1cdbd2cSJim Jagielski #include <comphelper/sequence.hxx>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <toolkit/awt/vclxtopwindow.hxx>
47*b1cdbd2cSJim Jagielski #include <toolkit/awt/vclxmenu.hxx>
48*b1cdbd2cSJim Jagielski #include <toolkit/helper/macros.hxx>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #include <vcl/wrkwin.hxx>
51*b1cdbd2cSJim Jagielski #include <vcl/syswin.hxx>
52*b1cdbd2cSJim Jagielski #include <vcl/menu.hxx>
53*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::RuntimeException;
58*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Sequence;
59*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Type;
60*b1cdbd2cSJim Jagielski using ::com::sun::star::uno::Any;
61*b1cdbd2cSJim Jagielski using ::com::sun::star::lang::IndexOutOfBoundsException;
62*b1cdbd2cSJim Jagielski 
VCLXTopWindow_Base(const bool _bSupportSystemWindowPeer)63*b1cdbd2cSJim Jagielski VCLXTopWindow_Base::VCLXTopWindow_Base( const bool _bSupportSystemWindowPeer )
64*b1cdbd2cSJim Jagielski     :m_bWHWND( _bSupportSystemWindowPeer )
65*b1cdbd2cSJim Jagielski {
66*b1cdbd2cSJim Jagielski }
67*b1cdbd2cSJim Jagielski 
~VCLXTopWindow_Base()68*b1cdbd2cSJim Jagielski VCLXTopWindow_Base::~VCLXTopWindow_Base()
69*b1cdbd2cSJim Jagielski {
70*b1cdbd2cSJim Jagielski }
71*b1cdbd2cSJim Jagielski 
queryInterface(const Type & rType)72*b1cdbd2cSJim Jagielski Any VCLXTopWindow_Base::queryInterface( const Type & rType ) throw(RuntimeException)
73*b1cdbd2cSJim Jagielski {
74*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Any aRet( VCLXTopWindow_XBase::queryInterface( rType ) );
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski     // do not expose XSystemDependentWindowPeer if we do not have a system window handle
77*b1cdbd2cSJim Jagielski     if ( !aRet.hasValue() && m_bWHWND )
78*b1cdbd2cSJim Jagielski         aRet = VCLXTopWindow_SBase::queryInterface( rType );
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski     return aRet;
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski 
getTypes()83*b1cdbd2cSJim Jagielski Sequence< Type > VCLXTopWindow_Base::getTypes() throw(RuntimeException)
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski     Sequence< Type > aTypes( VCLXTopWindow_XBase::getTypes() );
86*b1cdbd2cSJim Jagielski     if ( m_bWHWND )
87*b1cdbd2cSJim Jagielski         aTypes = ::comphelper::concatSequences( aTypes, VCLXTopWindow_SBase::getTypes() );
88*b1cdbd2cSJim Jagielski     return aTypes;
89*b1cdbd2cSJim Jagielski }
90*b1cdbd2cSJim Jagielski 
getWindowHandle(const::com::sun::star::uno::Sequence<sal_Int8> &,sal_Int16 SystemType)91*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any VCLXTopWindow_Base::getWindowHandle( const ::com::sun::star::uno::Sequence< sal_Int8 >& /*ProcessId*/, sal_Int16 SystemType ) throw(::com::sun::star::uno::RuntimeException)
92*b1cdbd2cSJim Jagielski {
93*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski 	// TODO, check the process id
96*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Any aRet;
97*b1cdbd2cSJim Jagielski 	Window* pWindow = GetWindowImpl();
98*b1cdbd2cSJim Jagielski 	if ( pWindow )
99*b1cdbd2cSJim Jagielski 	{
100*b1cdbd2cSJim Jagielski 		const SystemEnvData* pSysData = ((SystemWindow *)pWindow)->GetSystemData();
101*b1cdbd2cSJim Jagielski 		if( pSysData )
102*b1cdbd2cSJim Jagielski 		{
103*b1cdbd2cSJim Jagielski #if (defined WNT)
104*b1cdbd2cSJim Jagielski 			if( SystemType == ::com::sun::star::lang::SystemDependent::SYSTEM_WIN32 )
105*b1cdbd2cSJim Jagielski 			{
106*b1cdbd2cSJim Jagielski 				 aRet <<= (sal_Int32)pSysData->hWnd;
107*b1cdbd2cSJim Jagielski 			}
108*b1cdbd2cSJim Jagielski #elif (defined OS2)
109*b1cdbd2cSJim Jagielski 			if( SystemType == ::com::sun::star::lang::SystemDependent::SYSTEM_OS2 )
110*b1cdbd2cSJim Jagielski 			{
111*b1cdbd2cSJim Jagielski 				 aRet <<= (sal_Int32)pSysData->hWnd;
112*b1cdbd2cSJim Jagielski 			}
113*b1cdbd2cSJim Jagielski #elif (defined QUARTZ)
114*b1cdbd2cSJim Jagielski 			if( SystemType == ::com::sun::star::lang::SystemDependent::SYSTEM_MAC )
115*b1cdbd2cSJim Jagielski 			{
116*b1cdbd2cSJim Jagielski 				 aRet <<= (sal_IntPtr)pSysData->mpNSView;
117*b1cdbd2cSJim Jagielski 			}
118*b1cdbd2cSJim Jagielski #elif (defined UNX)
119*b1cdbd2cSJim Jagielski 			if( SystemType == ::com::sun::star::lang::SystemDependent::SYSTEM_XWINDOW )
120*b1cdbd2cSJim Jagielski 			{
121*b1cdbd2cSJim Jagielski 				::com::sun::star::awt::SystemDependentXWindow aSD;
122*b1cdbd2cSJim Jagielski 				aSD.DisplayPointer = sal::static_int_cast< sal_Int64 >(reinterpret_cast< sal_IntPtr >(pSysData->pDisplay));
123*b1cdbd2cSJim Jagielski 				aSD.WindowHandle = pSysData->aWindow;
124*b1cdbd2cSJim Jagielski 				aRet <<= aSD;
125*b1cdbd2cSJim Jagielski 			}
126*b1cdbd2cSJim Jagielski #endif
127*b1cdbd2cSJim Jagielski 		}
128*b1cdbd2cSJim Jagielski 	}
129*b1cdbd2cSJim Jagielski 	return aRet;
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski 
addTopWindowListener(const::com::sun::star::uno::Reference<::com::sun::star::awt::XTopWindowListener> & rxListener)132*b1cdbd2cSJim Jagielski void VCLXTopWindow_Base::addTopWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTopWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 	GetTopWindowListenersImpl().addInterface( rxListener );
137*b1cdbd2cSJim Jagielski }
138*b1cdbd2cSJim Jagielski 
removeTopWindowListener(const::com::sun::star::uno::Reference<::com::sun::star::awt::XTopWindowListener> & rxListener)139*b1cdbd2cSJim Jagielski void VCLXTopWindow_Base::removeTopWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTopWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException)
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski 	GetTopWindowListenersImpl().removeInterface( rxListener );
144*b1cdbd2cSJim Jagielski }
145*b1cdbd2cSJim Jagielski 
toFront()146*b1cdbd2cSJim Jagielski void VCLXTopWindow_Base::toFront(  ) throw(::com::sun::star::uno::RuntimeException)
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 	Window* pWindow = GetWindowImpl();
151*b1cdbd2cSJim Jagielski 	if ( pWindow )
152*b1cdbd2cSJim Jagielski 		((WorkWindow*)pWindow)->ToTop( TOTOP_RESTOREWHENMIN );
153*b1cdbd2cSJim Jagielski }
154*b1cdbd2cSJim Jagielski 
toBack()155*b1cdbd2cSJim Jagielski void VCLXTopWindow_Base::toBack(  ) throw(::com::sun::star::uno::RuntimeException)
156*b1cdbd2cSJim Jagielski {
157*b1cdbd2cSJim Jagielski #if 0 // Not possible in VCL...
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 	Window* pWindow = GetWindowImpl();
162*b1cdbd2cSJim Jagielski 	if ( pWindow )
163*b1cdbd2cSJim Jagielski 	{
164*b1cdbd2cSJim Jagielski 		((WorkWindow*)pWindow)->ToBack();
165*b1cdbd2cSJim Jagielski 	}
166*b1cdbd2cSJim Jagielski #endif
167*b1cdbd2cSJim Jagielski }
168*b1cdbd2cSJim Jagielski 
setMenuBar(const::com::sun::star::uno::Reference<::com::sun::star::awt::XMenuBar> & rxMenu)169*b1cdbd2cSJim Jagielski void VCLXTopWindow_Base::setMenuBar( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMenuBar >& rxMenu ) throw(::com::sun::star::uno::RuntimeException)
170*b1cdbd2cSJim Jagielski {
171*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 	SystemWindow* pWindow = (SystemWindow*) GetWindowImpl();
174*b1cdbd2cSJim Jagielski 	if ( pWindow )
175*b1cdbd2cSJim Jagielski 	{
176*b1cdbd2cSJim Jagielski 		pWindow->SetMenuBar( NULL );
177*b1cdbd2cSJim Jagielski 		if ( rxMenu.is() )
178*b1cdbd2cSJim Jagielski 		{
179*b1cdbd2cSJim Jagielski 			VCLXMenu* pMenu = VCLXMenu::GetImplementation( rxMenu );
180*b1cdbd2cSJim Jagielski 			if ( pMenu && !pMenu->IsPopupMenu() )
181*b1cdbd2cSJim Jagielski 				pWindow->SetMenuBar( (MenuBar*) pMenu->GetMenu() );
182*b1cdbd2cSJim Jagielski 		}
183*b1cdbd2cSJim Jagielski 	}
184*b1cdbd2cSJim Jagielski 	mxMenuBar = rxMenu;
185*b1cdbd2cSJim Jagielski }
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
getIsMaximized()188*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL VCLXTopWindow_Base::getIsMaximized() throw (RuntimeException)
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 	const WorkWindow* pWindow = dynamic_cast< const WorkWindow* >( GetWindowImpl() );
193*b1cdbd2cSJim Jagielski 	if ( !pWindow )
194*b1cdbd2cSJim Jagielski         return sal_False;
195*b1cdbd2cSJim Jagielski 
196*b1cdbd2cSJim Jagielski     return pWindow->IsMaximized();
197*b1cdbd2cSJim Jagielski }
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
setIsMaximized(::sal_Bool _ismaximized)200*b1cdbd2cSJim Jagielski void SAL_CALL VCLXTopWindow_Base::setIsMaximized( ::sal_Bool _ismaximized ) throw (RuntimeException)
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski 	WorkWindow* pWindow = dynamic_cast< WorkWindow* >( GetWindowImpl() );
205*b1cdbd2cSJim Jagielski 	if ( !pWindow )
206*b1cdbd2cSJim Jagielski         return;
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski     pWindow->Maximize( _ismaximized );
209*b1cdbd2cSJim Jagielski }
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
getIsMinimized()212*b1cdbd2cSJim Jagielski ::sal_Bool SAL_CALL VCLXTopWindow_Base::getIsMinimized() throw (RuntimeException)
213*b1cdbd2cSJim Jagielski {
214*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 	const WorkWindow* pWindow = dynamic_cast< const WorkWindow* >( GetWindowImpl() );
217*b1cdbd2cSJim Jagielski 	if ( !pWindow )
218*b1cdbd2cSJim Jagielski         return sal_False;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski     return pWindow->IsMinimized();
221*b1cdbd2cSJim Jagielski }
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
setIsMinimized(::sal_Bool _isMinimized)224*b1cdbd2cSJim Jagielski void SAL_CALL VCLXTopWindow_Base::setIsMinimized( ::sal_Bool _isMinimized ) throw (RuntimeException)
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 	WorkWindow* pWindow = dynamic_cast< WorkWindow* >( GetWindowImpl() );
229*b1cdbd2cSJim Jagielski 	if ( !pWindow )
230*b1cdbd2cSJim Jagielski         return;
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski     _isMinimized ? pWindow->Minimize() : pWindow->Restore();
233*b1cdbd2cSJim Jagielski }
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
getDisplay()236*b1cdbd2cSJim Jagielski ::sal_Int32 SAL_CALL VCLXTopWindow_Base::getDisplay() throw (RuntimeException)
237*b1cdbd2cSJim Jagielski {
238*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 	const SystemWindow* pWindow = dynamic_cast< const SystemWindow* >( GetWindowImpl() );
241*b1cdbd2cSJim Jagielski 	if ( !pWindow )
242*b1cdbd2cSJim Jagielski         return 0;
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski     return pWindow->GetScreenNumber();
245*b1cdbd2cSJim Jagielski }
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
setDisplay(::sal_Int32 _display)248*b1cdbd2cSJim Jagielski void SAL_CALL VCLXTopWindow_Base::setDisplay( ::sal_Int32 _display ) throw (RuntimeException, IndexOutOfBoundsException)
249*b1cdbd2cSJim Jagielski {
250*b1cdbd2cSJim Jagielski 	::vos::OGuard aGuard( GetMutexImpl() );
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski     if ( ( _display < 0 ) || ( _display >= (sal_Int32)Application::GetScreenCount() ) )
253*b1cdbd2cSJim Jagielski         throw IndexOutOfBoundsException();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	SystemWindow* pWindow = dynamic_cast< SystemWindow* >( GetWindowImpl() );
256*b1cdbd2cSJim Jagielski 	if ( !pWindow )
257*b1cdbd2cSJim Jagielski         return;
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski     pWindow->SetScreenNumber( _display );
260*b1cdbd2cSJim Jagielski }
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski //	----------------------------------------------------
263*b1cdbd2cSJim Jagielski //	class VCLXTopWindow
264*b1cdbd2cSJim Jagielski //	----------------------------------------------------
265*b1cdbd2cSJim Jagielski 
ImplGetPropertyIds(std::list<sal_uInt16> & rIds)266*b1cdbd2cSJim Jagielski void VCLXTopWindow::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski     VCLXContainer::ImplGetPropertyIds( rIds );
269*b1cdbd2cSJim Jagielski }
270*b1cdbd2cSJim Jagielski 
VCLXTopWindow(bool bWHWND)271*b1cdbd2cSJim Jagielski VCLXTopWindow::VCLXTopWindow(bool bWHWND)
272*b1cdbd2cSJim Jagielski     : VCLXTopWindow_Base( bWHWND )
273*b1cdbd2cSJim Jagielski {
274*b1cdbd2cSJim Jagielski }
275*b1cdbd2cSJim Jagielski 
~VCLXTopWindow()276*b1cdbd2cSJim Jagielski VCLXTopWindow::~VCLXTopWindow()
277*b1cdbd2cSJim Jagielski {
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski 
GetMutexImpl()280*b1cdbd2cSJim Jagielski vos::IMutex& VCLXTopWindow::GetMutexImpl()
281*b1cdbd2cSJim Jagielski {
282*b1cdbd2cSJim Jagielski     return VCLXContainer::GetMutex();
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski 
GetWindowImpl()285*b1cdbd2cSJim Jagielski Window* VCLXTopWindow::GetWindowImpl()
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski     return VCLXContainer::GetWindow();
288*b1cdbd2cSJim Jagielski }
289*b1cdbd2cSJim Jagielski 
GetTopWindowListenersImpl()290*b1cdbd2cSJim Jagielski ::cppu::OInterfaceContainerHelper& VCLXTopWindow::GetTopWindowListenersImpl()
291*b1cdbd2cSJim Jagielski {
292*b1cdbd2cSJim Jagielski     return GetTopWindowListeners();
293*b1cdbd2cSJim Jagielski }
294*b1cdbd2cSJim Jagielski 
295*b1cdbd2cSJim Jagielski // ::com::sun::star::uno::XInterface
queryInterface(const::com::sun::star::uno::Type & rType)296*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any VCLXTopWindow::queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException)
297*b1cdbd2cSJim Jagielski {
298*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Any aRet( VCLXTopWindow_Base::queryInterface( rType ) );
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski     if ( !aRet.hasValue() )
301*b1cdbd2cSJim Jagielski         aRet = VCLXContainer::queryInterface( rType );
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski     return aRet;
304*b1cdbd2cSJim Jagielski }
305*b1cdbd2cSJim Jagielski 
getImplementationId()306*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< sal_Int8 > VCLXTopWindow::getImplementationId() throw(::com::sun::star::uno::RuntimeException)
307*b1cdbd2cSJim Jagielski {
308*b1cdbd2cSJim Jagielski     static ::cppu::OImplementationId* pId = NULL;
309*b1cdbd2cSJim Jagielski     static ::cppu::OImplementationId* pIdWithHandle = NULL;
310*b1cdbd2cSJim Jagielski     if ( isSystemDependentWindowPeer() )
311*b1cdbd2cSJim Jagielski     {
312*b1cdbd2cSJim Jagielski         if( !pIdWithHandle )
313*b1cdbd2cSJim Jagielski         {
314*b1cdbd2cSJim Jagielski             ::osl::Guard< ::osl::Mutex > aGuard( ::osl::Mutex::getGlobalMutex() );
315*b1cdbd2cSJim Jagielski             if( !pIdWithHandle )
316*b1cdbd2cSJim Jagielski             {
317*b1cdbd2cSJim Jagielski                 static ::cppu::OImplementationId idWithHandle( sal_False );
318*b1cdbd2cSJim Jagielski                 pIdWithHandle = &idWithHandle;
319*b1cdbd2cSJim Jagielski             }
320*b1cdbd2cSJim Jagielski         }
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski         return (*pIdWithHandle).getImplementationId();
323*b1cdbd2cSJim Jagielski     }
324*b1cdbd2cSJim Jagielski     else
325*b1cdbd2cSJim Jagielski     {
326*b1cdbd2cSJim Jagielski         if( !pId )
327*b1cdbd2cSJim Jagielski         {
328*b1cdbd2cSJim Jagielski             ::osl::Guard< ::osl::Mutex > aGuard( ::osl::Mutex::getGlobalMutex() );
329*b1cdbd2cSJim Jagielski             if( !pId )
330*b1cdbd2cSJim Jagielski             {
331*b1cdbd2cSJim Jagielski                 static ::cppu::OImplementationId id( sal_False );
332*b1cdbd2cSJim Jagielski                 pId = &id;
333*b1cdbd2cSJim Jagielski             }
334*b1cdbd2cSJim Jagielski         }
335*b1cdbd2cSJim Jagielski 
336*b1cdbd2cSJim Jagielski         return (*pId).getImplementationId();
337*b1cdbd2cSJim Jagielski     }
338*b1cdbd2cSJim Jagielski }
339*b1cdbd2cSJim Jagielski 
getTypes()340*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > VCLXTopWindow::getTypes() throw(::com::sun::star::uno::RuntimeException)
341*b1cdbd2cSJim Jagielski {
342*b1cdbd2cSJim Jagielski     return ::comphelper::concatSequences( VCLXTopWindow_Base::getTypes(), VCLXContainer::getTypes() );
343*b1cdbd2cSJim Jagielski }
344