LCOV - code coverage report
Current view: top level - toolkit/source/awt - vclxwindow.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 720 1236 58.3 %
Date: 2014-11-03 Functions: 91 122 74.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <com/sun/star/awt/WindowEvent.hpp>
      22             : #include <com/sun/star/awt/KeyEvent.hpp>
      23             : #include <com/sun/star/awt/KeyModifier.hpp>
      24             : #include <com/sun/star/awt/MouseEvent.hpp>
      25             : #include <com/sun/star/awt/MouseButton.hpp>
      26             : #include <com/sun/star/awt/MouseWheelBehavior.hpp>
      27             : #include <com/sun/star/awt/XTopWindow.hpp>
      28             : #include <com/sun/star/awt/Style.hpp>
      29             : #include <com/sun/star/accessibility/AccessibleRole.hpp>
      30             : #include <com/sun/star/awt/DockingEvent.hpp>
      31             : #include <com/sun/star/awt/EndDockingEvent.hpp>
      32             : #include <com/sun/star/awt/EndPopupModeEvent.hpp>
      33             : #include <com/sun/star/awt/XWindowListener2.hpp>
      34             : #include <com/sun/star/style/VerticalAlignment.hpp>
      35             : #include <com/sun/star/lang/DisposedException.hpp>
      36             : #include <com/sun/star/text/WritingMode2.hpp>
      37             : #include <toolkit/awt/vclxwindow.hxx>
      38             : #include <toolkit/awt/vclxpointer.hxx>
      39             : #include <toolkit/awt/vclxwindows.hxx>
      40             : #include <toolkit/helper/macros.hxx>
      41             : #include <toolkit/helper/vclunohelper.hxx>
      42             : #include <toolkit/helper/convert.hxx>
      43             : #include <toolkit/helper/property.hxx>
      44             : #include <cppuhelper/typeprovider.hxx>
      45             : #include <rtl/uuid.h>
      46             : #include <rtl/ustrbuf.hxx>
      47             : #include <vcl/svapp.hxx>
      48             : #include <vcl/window.hxx>
      49             : #include <tools/color.hxx>
      50             : #include <vcl/dockwin.hxx>
      51             : #include <vcl/pdfextoutdevdata.hxx>
      52             : #include <vcl/tabpage.hxx>
      53             : #include <vcl/button.hxx>
      54             : #include <vcl/settings.hxx>
      55             : #include <comphelper/asyncnotification.hxx>
      56             : #include <comphelper/flagguard.hxx>
      57             : #include "stylesettings.hxx"
      58             : #include <tools/urlobj.hxx>
      59             : 
      60             : #include <boost/bind.hpp>
      61             : #include <boost/noncopyable.hpp>
      62             : 
      63             : #include "helper/accessibilityclient.hxx"
      64             : #include "helper/unopropertyarrayhelper.hxx"
      65             : 
      66             : using namespace ::com::sun::star;
      67             : 
      68             : using ::com::sun::star::uno::Reference;
      69             : using ::com::sun::star::uno::UNO_QUERY;
      70             : using ::com::sun::star::uno::RuntimeException;
      71             : using ::com::sun::star::lang::EventObject;
      72             : using ::com::sun::star::awt::XWindowListener2;
      73             : using ::com::sun::star::awt::XDockableWindowListener;
      74             : using ::com::sun::star::awt::XDevice;
      75             : using ::com::sun::star::awt::XStyleSettings;
      76             : using ::com::sun::star::lang::DisposedException;
      77             : using ::com::sun::star::style::VerticalAlignment;
      78             : using ::com::sun::star::style::VerticalAlignment_TOP;
      79             : using ::com::sun::star::style::VerticalAlignment_MIDDLE;
      80             : using ::com::sun::star::style::VerticalAlignment_BOTTOM;
      81             : using ::com::sun::star::style::VerticalAlignment_MAKE_FIXED_SIZE;
      82             : 
      83             : namespace WritingMode2 = ::com::sun::star::text::WritingMode2;
      84             : namespace MouseWheelBehavior = ::com::sun::star::awt::MouseWheelBehavior;
      85             : 
      86             : 
      87             : //= VCLXWindowImpl
      88             : 
      89             : class VCLXWindowImpl: private boost::noncopyable
      90             : {
      91             : private:
      92             :     typedef ::std::vector< VCLXWindow::Callback >                       CallbackArray;
      93             : 
      94             : private:
      95             :     VCLXWindow&                         mrAntiImpl;
      96             :     ::toolkit::AccessibilityClient      maAccFactory;
      97             :     bool                                mbDisposed;
      98             :     bool                                mbDrawingOntoParent;    // no bit mask, is passed around  by reference
      99             :     bool                            mbEnableVisible;
     100             :     bool                            mbDirectVisible;
     101             : 
     102             :     ::osl::Mutex                        maListenerContainerMutex;
     103             :     ::cppu::OInterfaceContainerHelper   maWindow2Listeners;
     104             :     ::cppu::OInterfaceContainerHelper   maDockableWindowListeners;
     105             :     EventListenerMultiplexer            maEventListeners;
     106             :     FocusListenerMultiplexer            maFocusListeners;
     107             :     WindowListenerMultiplexer           maWindowListeners;
     108             :     KeyListenerMultiplexer              maKeyListeners;
     109             :     MouseListenerMultiplexer            maMouseListeners;
     110             :     MouseMotionListenerMultiplexer      maMouseMotionListeners;
     111             :     PaintListenerMultiplexer            maPaintListeners;
     112             :     VclContainerListenerMultiplexer     maContainerListeners;
     113             :     TopWindowListenerMultiplexer        maTopWindowListeners;
     114             : 
     115             :     CallbackArray                       maCallbackEvents;
     116             :     ImplSVEvent *                       mnCallbackEventId;
     117             : 
     118             : public:
     119             :     bool                                mbDisposing             : 1;
     120             :     bool                                mbDesignMode            : 1;
     121             :     bool                                mbSynthesizingVCLEvent  : 1;
     122             :     bool                                mbWithDefaultProps      : 1;
     123             : 
     124             :     sal_uLong                               mnListenerLockLevel;
     125             :     sal_Int16                           mnWritingMode;
     126             :     sal_Int16                           mnContextWritingMode;
     127             : 
     128             :     UnoPropertyArrayHelper*             mpPropHelper;
     129             : 
     130             :     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer >
     131             :                                         mxPointer;
     132             :     ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext >
     133             :                                         mxAccessibleContext;
     134             :     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >
     135             :                                         mxViewGraphics;
     136             :     ::com::sun::star::uno::Reference< ::com::sun::star::awt::XStyleSettings >
     137             :                                         mxWindowStyleSettings;
     138             : 
     139             : public:
     140           0 :     bool&   getDrawingOntoParent_ref()  { return mbDrawingOntoParent; }
     141             : 
     142             : public:
     143             :     /** ctor
     144             :     @param _pAntiImpl
     145             :         the <type>VCLXWindow</type> instance which the object belongs to. Must
     146             :         live longer then the object just being constructed.
     147             :     */
     148             :     VCLXWindowImpl( VCLXWindow& _rAntiImpl, bool _bWithDefaultProps );
     149             : 
     150             :     /** synchronously mbEnableVisible
     151             :     */
     152         347 :     void    setEnableVisible( bool bEnableVisible ) { mbEnableVisible = bEnableVisible; }
     153       76401 :     bool    isEnableVisible() { return mbEnableVisible; }
     154             :     /** synchronously mbDirectVisible;
     155             :     */
     156      214030 :     void    setDirectVisible( bool bDirectVisible ) { mbDirectVisible = bDirectVisible; }
     157         112 :     bool    isDirectVisible() { return mbDirectVisible; }
     158             : 
     159             :     /** impl-version of VCLXWindow::ImplExecuteAsyncWithoutSolarLock
     160             :     */
     161             :     void    callBackAsync( const VCLXWindow::Callback& i_callback );
     162             : 
     163             :     /** notifies the object that its VCLXWindow is being disposed
     164             :     */
     165             :     void    disposing();
     166             : 
     167         608 :     inline ::toolkit::AccessibilityClient& getAccessibleFactory()
     168             :     {
     169         608 :         return maAccFactory;
     170             :     }
     171             : 
     172             :     Reference< XStyleSettings > getStyleSettings();
     173             : 
     174             :     /** returns the container of registered XWindowListener2 listeners
     175             :     */
     176       38354 :     inline ::cppu::OInterfaceContainerHelper&   getWindow2Listeners()       { return maWindow2Listeners; }
     177       16268 :     inline ::cppu::OInterfaceContainerHelper&   getDockableWindowListeners(){ return maDockableWindowListeners; }
     178         278 :     inline EventListenerMultiplexer&            getEventListeners()         { return maEventListeners; }
     179       71355 :     inline FocusListenerMultiplexer&            getFocusListeners()         { return maFocusListeners; }
     180      758760 :     inline WindowListenerMultiplexer&           getWindowListeners()        { return maWindowListeners; }
     181         190 :     inline KeyListenerMultiplexer&              getKeyListeners()           { return maKeyListeners; }
     182         208 :     inline MouseListenerMultiplexer&            getMouseListeners()         { return maMouseListeners; }
     183          20 :     inline MouseMotionListenerMultiplexer&      getMouseMotionListeners()   { return maMouseMotionListeners; }
     184       34281 :     inline PaintListenerMultiplexer&            getPaintListeners()         { return maPaintListeners; }
     185      222611 :     inline VclContainerListenerMultiplexer&     getContainerListeners()     { return maContainerListeners; }
     186      277262 :     inline TopWindowListenerMultiplexer&        getTopWindowListeners()     { return maTopWindowListeners; }
     187             : 
     188             :     ~VCLXWindowImpl();
     189             : 
     190             : private:
     191             :     DECL_LINK( OnProcessCallbacks, void* );
     192             : };
     193             : 
     194             : 
     195      132875 : VCLXWindowImpl::VCLXWindowImpl( VCLXWindow& _rAntiImpl, bool _bWithDefaultProps )
     196             :     :mrAntiImpl( _rAntiImpl )
     197             :     ,mbDisposed( false )
     198             :     ,mbDrawingOntoParent( false )
     199             :     ,mbEnableVisible(true)
     200             :     ,mbDirectVisible(true)
     201             :     ,maListenerContainerMutex( )
     202             :     ,maWindow2Listeners( maListenerContainerMutex )
     203             :     ,maDockableWindowListeners( maListenerContainerMutex )
     204             :     ,maEventListeners( _rAntiImpl )
     205             :     ,maFocusListeners( _rAntiImpl )
     206             :     ,maWindowListeners( _rAntiImpl )
     207             :     ,maKeyListeners( _rAntiImpl )
     208             :     ,maMouseListeners( _rAntiImpl )
     209             :     ,maMouseMotionListeners( _rAntiImpl )
     210             :     ,maPaintListeners( _rAntiImpl )
     211             :     ,maContainerListeners( _rAntiImpl )
     212             :     ,maTopWindowListeners( _rAntiImpl )
     213             :     ,mnCallbackEventId( 0 )
     214             :     ,mbDisposing( false )
     215             :     ,mbDesignMode( false )
     216             :     ,mbSynthesizingVCLEvent( false )
     217             :     ,mbWithDefaultProps( _bWithDefaultProps )
     218             :     ,mnListenerLockLevel( 0 )
     219             :     ,mnWritingMode( WritingMode2::CONTEXT )
     220             :     ,mnContextWritingMode( WritingMode2::CONTEXT )
     221      132875 :     ,mpPropHelper( NULL )
     222             : {
     223      132875 : }
     224             : 
     225      228382 : VCLXWindowImpl::~VCLXWindowImpl()
     226             : {
     227      114191 :     delete mpPropHelper;
     228      114191 : }
     229             : 
     230             : 
     231      138827 : void VCLXWindowImpl::disposing()
     232             : {
     233      138827 :     SolarMutexGuard aGuard;
     234      138827 :     if ( mnCallbackEventId )
     235       18326 :         Application::RemoveUserEvent( mnCallbackEventId );
     236      138827 :     mnCallbackEventId = 0;
     237             : 
     238      138827 :     mbDisposed= true;
     239             : 
     240      277654 :     ::com::sun::star::lang::EventObject aEvent;
     241      138827 :     aEvent.Source = mrAntiImpl;
     242             : 
     243      138827 :     maDockableWindowListeners.disposeAndClear( aEvent );
     244      138827 :     maEventListeners.disposeAndClear( aEvent );
     245      138827 :     maFocusListeners.disposeAndClear( aEvent );
     246      138827 :     maWindowListeners.disposeAndClear( aEvent );
     247      138827 :     maKeyListeners.disposeAndClear( aEvent );
     248      138827 :     maMouseListeners.disposeAndClear( aEvent );
     249      138827 :     maMouseMotionListeners.disposeAndClear( aEvent );
     250      138827 :     maPaintListeners.disposeAndClear( aEvent );
     251      138827 :     maContainerListeners.disposeAndClear( aEvent );
     252      138827 :     maTopWindowListeners.disposeAndClear( aEvent );
     253             : 
     254      138827 :     ::toolkit::WindowStyleSettings* pStyleSettings = static_cast< ::toolkit::WindowStyleSettings* >( mxWindowStyleSettings.get() );
     255      138827 :     if ( pStyleSettings != NULL )
     256           0 :         pStyleSettings->dispose();
     257      277654 :     mxWindowStyleSettings.clear();
     258      138827 : }
     259             : 
     260             : 
     261       36950 : void VCLXWindowImpl::callBackAsync( const VCLXWindow::Callback& i_callback )
     262             : {
     263             :     DBG_TESTSOLARMUTEX();
     264       36950 :     maCallbackEvents.push_back( i_callback );
     265       36950 :     if ( !mnCallbackEventId )
     266             :     {
     267             :         // ensure our VCLXWindow is not destroyed while the event is underway
     268       18512 :         mrAntiImpl.acquire();
     269       18512 :         mnCallbackEventId = Application::PostUserEvent( LINK( this, VCLXWindowImpl, OnProcessCallbacks ) );
     270             :     }
     271       36950 : }
     272             : 
     273             : 
     274         372 : IMPL_LINK_NOARG(VCLXWindowImpl, OnProcessCallbacks)
     275             : {
     276         186 :     const Reference< uno::XInterface > xKeepAlive( mrAntiImpl );
     277             : 
     278             :     // work on a copy of the callback array
     279         372 :     CallbackArray aCallbacksCopy;
     280             :     {
     281         186 :         SolarMutexGuard aGuard;
     282         186 :         aCallbacksCopy = maCallbackEvents;
     283         186 :         maCallbackEvents.clear();
     284             : 
     285             :         // we acquired our VCLXWindow once before posting the event, release this one ref now
     286         186 :         mrAntiImpl.release();
     287             : 
     288         186 :         if ( !mnCallbackEventId )
     289             :             // we were disposed while waiting for the mutex to lock
     290           0 :             return 1L;
     291             : 
     292         186 :         mnCallbackEventId = 0;
     293             :     }
     294             : 
     295             :     {
     296         186 :         SolarMutexReleaser aReleaseSolar;
     297        1452 :         for (   CallbackArray::const_iterator loop = aCallbacksCopy.begin();
     298         968 :                 loop != aCallbacksCopy.end();
     299             :                 ++loop
     300             :             )
     301             :         {
     302         298 :             (*loop)();
     303         186 :         }
     304             :     }
     305             : 
     306         372 :     return 0L;
     307             : }
     308             : 
     309           0 : Reference< XStyleSettings > VCLXWindowImpl::getStyleSettings()
     310             : {
     311           0 :     SolarMutexGuard aGuard;
     312           0 :     if ( mbDisposed )
     313           0 :         throw DisposedException( OUString(), mrAntiImpl );
     314           0 :     if ( !mxWindowStyleSettings.is() )
     315           0 :         mxWindowStyleSettings = new ::toolkit::WindowStyleSettings( maListenerContainerMutex, mrAntiImpl );
     316           0 :     return mxWindowStyleSettings;
     317             : }
     318             : 
     319             : 
     320             : 
     321             : 
     322             : // Uses an out-parameter instead of return value, due to the object reference
     323             : 
     324      105532 : void ImplInitWindowEvent( ::com::sun::star::awt::WindowEvent& rEvent, vcl::Window* pWindow )
     325             : {
     326      105532 :     Point aPos = pWindow->GetPosPixel();
     327      105532 :     Size aSz = pWindow->GetSizePixel();
     328             : 
     329      105532 :     rEvent.X = aPos.X();
     330      105532 :     rEvent.Y = aPos.Y();
     331             : 
     332      105532 :     rEvent.Width = aSz.Width();
     333      105532 :     rEvent.Height = aSz.Height();
     334             : 
     335      105532 :     pWindow->GetBorder( rEvent.LeftInset, rEvent.TopInset, rEvent.RightInset, rEvent.BottomInset );
     336      105532 : }
     337             : 
     338      132875 : VCLXWindow::VCLXWindow( bool _bWithDefaultProps )
     339      132875 :     :mpImpl( NULL )
     340             : {
     341      132875 :     mpImpl = new VCLXWindowImpl( *this, _bWithDefaultProps );
     342      132875 : }
     343             : 
     344      289413 : VCLXWindow::~VCLXWindow()
     345             : {
     346      114191 :     delete mpImpl;
     347             : 
     348      114191 :     if ( GetWindow() )
     349             :     {
     350           0 :         GetWindow()->RemoveEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
     351           0 :         GetWindow()->SetWindowPeer( NULL, NULL );
     352           0 :         GetWindow()->SetAccessible( NULL );
     353             :     }
     354      175222 : }
     355             : 
     356             : 
     357       36950 : void VCLXWindow::ImplExecuteAsyncWithoutSolarLock( const Callback& i_callback )
     358             : {
     359       36950 :     mpImpl->callBackAsync( i_callback );
     360       36950 : }
     361             : 
     362             : 
     363         608 : ::toolkit::IAccessibleFactory& VCLXWindow::getAccessibleFactory()
     364             : {
     365         608 :     return mpImpl->getAccessibleFactory().getFactory();
     366             : }
     367             : 
     368      338337 : void VCLXWindow::SetWindow( vcl::Window* pWindow )
     369             : {
     370      338337 :     if ( GetWindow() )
     371             :     {
     372      205462 :         GetWindow()->RemoveEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
     373             : //        GetWindow()->DbgAssertNoEventListeners();
     374             :     }
     375             : 
     376      338337 :     SetOutputDevice( pWindow );
     377             : 
     378      338337 :     if ( GetWindow() )
     379             :     {
     380      132877 :         GetWindow()->AddEventListener( LINK( this, VCLXWindow, WindowEventListener ) );
     381      132877 :         bool bDirectVisible = pWindow && pWindow->IsVisible();
     382      132877 :         mpImpl->setDirectVisible( bDirectVisible );
     383             :     }
     384      338337 : }
     385             : 
     386       10047 : void VCLXWindow::suspendVclEventListening( )
     387             : {
     388       10047 :     ++mpImpl->mnListenerLockLevel;
     389       10047 : }
     390             : 
     391       10047 : void VCLXWindow::resumeVclEventListening( )
     392             : {
     393             :     DBG_ASSERT( mpImpl->mnListenerLockLevel, "VCLXWindow::resumeVclEventListening: not suspended!" );
     394       10047 :     --mpImpl->mnListenerLockLevel;
     395       10047 : }
     396             : 
     397      222611 : void VCLXWindow::notifyWindowRemoved( vcl::Window& _rWindow )
     398             : {
     399      222611 :     if ( mpImpl->getContainerListeners().getLength() )
     400             :     {
     401           0 :         awt::VclContainerEvent aEvent;
     402           0 :         aEvent.Source = *this;
     403           0 :         aEvent.Child = static_cast< XWindow* >( _rWindow.GetWindowPeer() );
     404           0 :         mpImpl->getContainerListeners().windowRemoved( aEvent );
     405             :     }
     406      222611 : }
     407             : 
     408     3703552 : IMPL_LINK( VCLXWindow, WindowEventListener, VclSimpleEvent*, pEvent )
     409             : {
     410     1851776 :     if ( mpImpl->mnListenerLockLevel )
     411        3023 :         return 0L;
     412             : 
     413             :     DBG_ASSERT( pEvent && pEvent->ISA( VclWindowEvent ), "Unknown WindowEvent!" );
     414     1848753 :     if ( pEvent && pEvent->ISA( VclWindowEvent ) )
     415             :     {
     416             :         DBG_ASSERT( static_cast<VclWindowEvent*>(pEvent)->GetWindow() && GetWindow(), "Window???" );
     417     1848753 :         ProcessWindowEvent( *static_cast<VclWindowEvent*>(pEvent) );
     418             :     }
     419     1848753 :     return 0;
     420             : }
     421             : 
     422             : namespace
     423             : {
     424      481140 :     struct CallWindow2Listener
     425             :     {
     426       36948 :         CallWindow2Listener( ::cppu::OInterfaceContainerHelper& i_rWindow2Listeners, const bool i_bEnabled, const EventObject& i_rEvent )
     427             :             :m_rWindow2Listeners( i_rWindow2Listeners )
     428             :             ,m_bEnabled( i_bEnabled )
     429       36948 :             ,m_aEvent( i_rEvent )
     430             :         {
     431       36948 :         }
     432             : 
     433         296 :         void operator()()
     434             :         {
     435         296 :             m_rWindow2Listeners.notifyEach( m_bEnabled ? &XWindowListener2::windowEnabled : &XWindowListener2::windowDisabled, m_aEvent );
     436         296 :         }
     437             : 
     438             :         ::cppu::OInterfaceContainerHelper&  m_rWindow2Listeners;
     439             :         const bool                          m_bEnabled;
     440             :         const EventObject                   m_aEvent;
     441             :     };
     442             : }
     443             : 
     444     1848222 : void VCLXWindow::ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent )
     445             : {
     446     1848222 :     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xThis( (::cppu::OWeakObject*)this );
     447             : 
     448     1848222 :     switch ( rVclWindowEvent.GetId() )
     449             :     {
     450             :         case VCLEVENT_WINDOW_ENABLED:
     451             :         case VCLEVENT_WINDOW_DISABLED:
     452             :         {
     453             :             Callback aCallback = CallWindow2Listener(
     454       36948 :                 mpImpl->getWindow2Listeners(),
     455       36948 :                 ( VCLEVENT_WINDOW_ENABLED == rVclWindowEvent.GetId() ),
     456             :                 EventObject( *this )
     457      110844 :             );
     458       36948 :             ImplExecuteAsyncWithoutSolarLock( aCallback );
     459             :         }
     460       36948 :         break;
     461             : 
     462             :         case VCLEVENT_WINDOW_PAINT:
     463             :         {
     464       34281 :             if ( mpImpl->getPaintListeners().getLength() )
     465             :             {
     466           0 :                 ::com::sun::star::awt::PaintEvent aEvent;
     467           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     468           0 :                 aEvent.UpdateRect = AWTRectangle( *(Rectangle*)rVclWindowEvent.GetData() );
     469           0 :                 aEvent.Count = 0;
     470           0 :                 mpImpl->getPaintListeners().windowPaint( aEvent );
     471             :             }
     472             :         }
     473       34281 :         break;
     474             :         case VCLEVENT_WINDOW_MOVE:
     475             :         {
     476      204762 :             if ( mpImpl->getWindowListeners().getLength() )
     477             :             {
     478       29909 :                 ::com::sun::star::awt::WindowEvent aEvent;
     479       29909 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     480       29909 :                 ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
     481       29909 :                 mpImpl->getWindowListeners().windowMoved( aEvent );
     482             :             }
     483             :         }
     484      204762 :         break;
     485             :         case VCLEVENT_WINDOW_RESIZE:
     486             :         {
     487      194968 :             if ( mpImpl->getWindowListeners().getLength() )
     488             :             {
     489       32715 :                 ::com::sun::star::awt::WindowEvent aEvent;
     490       32715 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     491       32715 :                 ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
     492       32715 :                 mpImpl->getWindowListeners().windowResized( aEvent );
     493             :             }
     494             :         }
     495      194968 :         break;
     496             :         case VCLEVENT_WINDOW_SHOW:
     497             :         {
     498      110015 :             if ( mpImpl->getWindowListeners().getLength() )
     499             :             {
     500       28698 :                 ::com::sun::star::awt::WindowEvent aEvent;
     501       28698 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     502       28698 :                 ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
     503       28698 :                 mpImpl->getWindowListeners().windowShown( aEvent );
     504             :             }
     505             : 
     506             :             // For TopWindows this means opened...
     507      110015 :             if ( mpImpl->getTopWindowListeners().getLength() )
     508             :             {
     509       10980 :                 ::com::sun::star::lang::EventObject aEvent;
     510       10980 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     511       10980 :                 mpImpl->getTopWindowListeners().windowOpened( aEvent );
     512             :             }
     513             :         }
     514      110015 :         break;
     515             :         case VCLEVENT_WINDOW_HIDE:
     516             :         {
     517       79177 :             if ( mpImpl->getWindowListeners().getLength() )
     518             :             {
     519       14210 :                 ::com::sun::star::awt::WindowEvent aEvent;
     520       14210 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     521       14210 :                 ImplInitWindowEvent( aEvent, rVclWindowEvent.GetWindow() );
     522       14210 :                 mpImpl->getWindowListeners().windowHidden( aEvent );
     523             :             }
     524             : 
     525             :             // For TopWindows this means closed...
     526       79177 :             if ( mpImpl->getTopWindowListeners().getLength() )
     527             :             {
     528          10 :                 ::com::sun::star::lang::EventObject aEvent;
     529          10 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     530          10 :                 mpImpl->getTopWindowListeners().windowClosed( aEvent );
     531             :             }
     532             :         }
     533       79177 :         break;
     534             :         case VCLEVENT_WINDOW_ACTIVATE:
     535             :         {
     536       25827 :             if ( mpImpl->getTopWindowListeners().getLength() )
     537             :             {
     538        6242 :                 ::com::sun::star::lang::EventObject aEvent;
     539        6242 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     540        6242 :                 mpImpl->getTopWindowListeners().windowActivated( aEvent );
     541             :             }
     542             :         }
     543       25827 :         break;
     544             :         case VCLEVENT_WINDOW_DEACTIVATE:
     545             :         {
     546       11198 :             if ( mpImpl->getTopWindowListeners().getLength() )
     547             :             {
     548         174 :                 ::com::sun::star::lang::EventObject aEvent;
     549         174 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     550         174 :                 mpImpl->getTopWindowListeners().windowDeactivated( aEvent );
     551             :             }
     552             :         }
     553       11198 :         break;
     554             :         case VCLEVENT_WINDOW_CLOSE:
     555             :         {
     556           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     557             :             {
     558           0 :                 ::com::sun::star::lang::EventObject aEvent;
     559           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     560           0 :                 mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::closed, aEvent );
     561             :             }
     562           0 :             if ( mpImpl->getTopWindowListeners().getLength() )
     563             :             {
     564           0 :                 ::com::sun::star::lang::EventObject aEvent;
     565           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     566           0 :                 mpImpl->getTopWindowListeners().windowClosing( aEvent );
     567             :             }
     568             :         }
     569           0 :         break;
     570             :         case VCLEVENT_CONTROL_GETFOCUS:
     571             :         case VCLEVENT_WINDOW_GETFOCUS:
     572             :         {
     573       41220 :             if  (   (   rVclWindowEvent.GetWindow()->IsCompoundControl()
     574          12 :                     &&  rVclWindowEvent.GetId() == VCLEVENT_CONTROL_GETFOCUS
     575             :                     )
     576       61810 :                 ||  (   !rVclWindowEvent.GetWindow()->IsCompoundControl()
     577       20598 :                     &&  rVclWindowEvent.GetId() == VCLEVENT_WINDOW_GETFOCUS
     578             :                     )
     579             :                 )
     580             :             {
     581       20594 :                 if ( mpImpl->getFocusListeners().getLength() )
     582             :                 {
     583        4990 :                     ::com::sun::star::awt::FocusEvent aEvent;
     584        4990 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     585        4990 :                     aEvent.FocusFlags = rVclWindowEvent.GetWindow()->GetGetFocusFlags();
     586        4990 :                     aEvent.Temporary = sal_False;
     587        4990 :                     mpImpl->getFocusListeners().focusGained( aEvent );
     588             :                 }
     589             :             }
     590             :         }
     591       20610 :         break;
     592             :         case VCLEVENT_CONTROL_LOSEFOCUS:
     593             :         case VCLEVENT_WINDOW_LOSEFOCUS:
     594             :         {
     595       21502 :             if  (   (   rVclWindowEvent.GetWindow()->IsCompoundControl()
     596           0 :                     &&  rVclWindowEvent.GetId() == VCLEVENT_CONTROL_LOSEFOCUS
     597             :                     )
     598       32247 :                 ||  (   !rVclWindowEvent.GetWindow()->IsCompoundControl()
     599       10751 :                     &&  rVclWindowEvent.GetId() == VCLEVENT_WINDOW_LOSEFOCUS
     600             :                     )
     601             :                 )
     602             :             {
     603       10745 :                 if ( mpImpl->getFocusListeners().getLength() )
     604             :                 {
     605        1192 :                     ::com::sun::star::awt::FocusEvent aEvent;
     606        1192 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     607        1192 :                     aEvent.FocusFlags = rVclWindowEvent.GetWindow()->GetGetFocusFlags();
     608        1192 :                     aEvent.Temporary = sal_False;
     609             : 
     610        1192 :                     vcl::Window* pNext = Application::GetFocusWindow();
     611        1192 :                     if ( pNext )
     612             :                     {
     613             :                         // Don't care about internals if this control is compound
     614        1190 :                         vcl::Window* pNextC = pNext;
     615        5960 :                         while ( pNextC && !pNextC->IsCompoundControl() )
     616        3580 :                             pNextC = pNextC->GetParent();
     617        1190 :                         if ( pNextC )
     618           0 :                             pNext = pNextC;
     619             : 
     620        1190 :                         pNext->GetComponentInterface( true );
     621        1190 :                         aEvent.NextFocus = (::cppu::OWeakObject*)pNext->GetWindowPeer();
     622             :                     }
     623        1192 :                     mpImpl->getFocusListeners().focusLost( aEvent );
     624             :                 }
     625             :             }
     626             :         }
     627       10751 :         break;
     628             :         case VCLEVENT_WINDOW_MINIMIZE:
     629             :         {
     630          37 :             if ( mpImpl->getTopWindowListeners().getLength() )
     631             :             {
     632           0 :                 ::com::sun::star::lang::EventObject aEvent;
     633           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     634           0 :                 mpImpl->getTopWindowListeners().windowMinimized( aEvent );
     635             :             }
     636             :         }
     637          37 :         break;
     638             :         case VCLEVENT_WINDOW_NORMALIZE:
     639             :         {
     640          24 :             if ( mpImpl->getTopWindowListeners().getLength() )
     641             :             {
     642           0 :                 ::com::sun::star::lang::EventObject aEvent;
     643           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     644           0 :                 mpImpl->getTopWindowListeners().windowNormalized( aEvent );
     645             :             }
     646             :         }
     647          24 :         break;
     648             :         case VCLEVENT_WINDOW_KEYINPUT:
     649             :         {
     650           0 :             if ( mpImpl->getKeyListeners().getLength() )
     651             :             {
     652             :                 ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
     653           0 :                     *(KeyEvent*)rVclWindowEvent.GetData(), *this
     654           0 :                 ) );
     655           0 :                 mpImpl->getKeyListeners().keyPressed( aEvent );
     656             :             }
     657             :         }
     658           0 :         break;
     659             :         case VCLEVENT_WINDOW_KEYUP:
     660             :         {
     661           0 :             if ( mpImpl->getKeyListeners().getLength() )
     662             :             {
     663             :                 ::com::sun::star::awt::KeyEvent aEvent( VCLUnoHelper::createKeyEvent(
     664           0 :                     *(KeyEvent*)rVclWindowEvent.GetData(), *this
     665           0 :                 ) );
     666           0 :                 mpImpl->getKeyListeners().keyReleased( aEvent );
     667             :             }
     668             :         }
     669           0 :         break;
     670             :         case VCLEVENT_WINDOW_COMMAND:
     671             :         {
     672           0 :             CommandEvent* pCmdEvt = (CommandEvent*)rVclWindowEvent.GetData();
     673           0 :             if ( mpImpl->getMouseListeners().getLength() && ( pCmdEvt->GetCommand() == COMMAND_CONTEXTMENU ) )
     674             :             {
     675             :                 // COMMAND_CONTEXTMENU als mousePressed mit PopupTrigger = sal_True versenden...
     676           0 :                 Point aWhere = static_cast< CommandEvent* >( rVclWindowEvent.GetData() )->GetMousePosPixel();
     677           0 :                 if ( !pCmdEvt->IsMouseEvent() )
     678             :                 {   // for keyboard events, we set the coordinates to -1,-1. This is a slight HACK, but the current API
     679             :                     // handles a context menu command as special case of a mouse event, which is simply wrong.
     680             :                     // Without extending the API, we would not have another chance to notify listeners of a
     681             :                     // keyboard-triggered context menu request
     682           0 :                     aWhere = Point( -1, -1 );
     683             :                 }
     684             : 
     685           0 :                 MouseEvent aMEvt( aWhere, 1, MOUSE_SIMPLECLICK, MOUSE_LEFT, 0 );
     686           0 :                 awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( aMEvt, *this ) );
     687           0 :                 aEvent.PopupTrigger = sal_True;
     688             : 
     689             :                 Callback aCallback = ::boost::bind(
     690             :                     &MouseListenerMultiplexer::mousePressed,
     691           0 :                     &mpImpl->getMouseListeners(),
     692             :                     aEvent
     693           0 :                 );
     694           0 :                 ImplExecuteAsyncWithoutSolarLock( aCallback );
     695             :             }
     696             :         }
     697           0 :         break;
     698             :         case VCLEVENT_WINDOW_MOUSEMOVE:
     699             :         {
     700           0 :             MouseEvent* pMouseEvt = (MouseEvent*)rVclWindowEvent.GetData();
     701           0 :             if ( mpImpl->getMouseListeners().getLength() && ( pMouseEvt->IsEnterWindow() || pMouseEvt->IsLeaveWindow() ) )
     702             :             {
     703           0 :                 awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
     704             : 
     705             :                 Callback aCallback = ::boost::bind(
     706           0 :                     pMouseEvt->IsEnterWindow() ? &MouseListenerMultiplexer::mouseEntered : &MouseListenerMultiplexer::mouseExited,
     707           0 :                     &mpImpl->getMouseListeners(),
     708             :                     aEvent
     709           0 :                 );
     710           0 :                 ImplExecuteAsyncWithoutSolarLock( aCallback );
     711             :             }
     712             : 
     713           0 :             if ( mpImpl->getMouseMotionListeners().getLength() && !pMouseEvt->IsEnterWindow() && !pMouseEvt->IsLeaveWindow() )
     714             :             {
     715           0 :                 awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *pMouseEvt, *this ) );
     716           0 :                 aEvent.ClickCount = 0;  // #92138#
     717           0 :                 if ( pMouseEvt->GetMode() & MOUSE_SIMPLEMOVE )
     718           0 :                     mpImpl->getMouseMotionListeners().mouseMoved( aEvent );
     719             :                 else
     720           0 :                     mpImpl->getMouseMotionListeners().mouseDragged( aEvent );
     721             :             }
     722             :         }
     723           0 :         break;
     724             :         case VCLEVENT_WINDOW_MOUSEBUTTONDOWN:
     725             :         {
     726           0 :             if ( mpImpl->getMouseListeners().getLength() )
     727             :             {
     728           0 :                 awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
     729             :                 Callback aCallback = ::boost::bind(
     730             :                     &MouseListenerMultiplexer::mousePressed,
     731           0 :                     &mpImpl->getMouseListeners(),
     732             :                     aEvent
     733           0 :                 );
     734           0 :                 ImplExecuteAsyncWithoutSolarLock( aCallback );
     735             :             }
     736             :         }
     737           0 :         break;
     738             :         case VCLEVENT_WINDOW_MOUSEBUTTONUP:
     739             :         {
     740           0 :             if ( mpImpl->getMouseListeners().getLength() )
     741             :             {
     742           0 :                 awt::MouseEvent aEvent( VCLUnoHelper::createMouseEvent( *(MouseEvent*)rVclWindowEvent.GetData(), *this ) );
     743             :                 Callback aCallback = ::boost::bind(
     744             :                     &MouseListenerMultiplexer::mouseReleased,
     745           0 :                     &mpImpl->getMouseListeners(),
     746             :                     aEvent
     747           0 :                 );
     748           0 :                 ImplExecuteAsyncWithoutSolarLock( aCallback );
     749             :             }
     750             :         }
     751           0 :         break;
     752             :         case VCLEVENT_WINDOW_STARTDOCKING:
     753             :         {
     754           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     755             :             {
     756           0 :                 DockingData *pData = (DockingData*)rVclWindowEvent.GetData();
     757             : 
     758           0 :                 if( pData )
     759             :                 {
     760           0 :                     ::com::sun::star::awt::DockingEvent aEvent;
     761           0 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     762           0 :                     aEvent.TrackingRectangle = AWTRectangle( pData->maTrackRect );
     763           0 :                     aEvent.MousePos.X = pData->maMousePos.X();
     764           0 :                     aEvent.MousePos.Y = pData->maMousePos.Y();
     765           0 :                     aEvent.bLiveMode = pData->mbLivemode;
     766           0 :                     aEvent.bInteractive = pData->mbInteractive;
     767             : 
     768           0 :                     mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::startDocking, aEvent );
     769             :                 }
     770             :             }
     771             :         }
     772           0 :         break;
     773             :         case VCLEVENT_WINDOW_DOCKING:
     774             :         {
     775           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     776             :             {
     777           0 :                 DockingData *pData = (DockingData*)rVclWindowEvent.GetData();
     778             : 
     779           0 :                 if( pData )
     780             :                 {
     781           0 :                     ::com::sun::star::awt::DockingEvent aEvent;
     782           0 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     783           0 :                     aEvent.TrackingRectangle = AWTRectangle( pData->maTrackRect );
     784           0 :                     aEvent.MousePos.X = pData->maMousePos.X();
     785           0 :                     aEvent.MousePos.Y = pData->maMousePos.Y();
     786           0 :                     aEvent.bLiveMode = pData->mbLivemode;
     787           0 :                     aEvent.bInteractive = pData->mbInteractive;
     788             : 
     789           0 :                     Reference< XDockableWindowListener > xFirstListener;
     790           0 :                     ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() );
     791           0 :                     while ( aIter.hasMoreElements() && !xFirstListener.is() )
     792             :                     {
     793           0 :                         xFirstListener.set( aIter.next(), UNO_QUERY );
     794             :                     }
     795             : 
     796             :                     ::com::sun::star::awt::DockingData aDockingData =
     797           0 :                         xFirstListener->docking( aEvent );
     798           0 :                     pData->maTrackRect = VCLRectangle( aDockingData.TrackingRectangle );
     799           0 :                     pData->mbFloating = aDockingData.bFloating;
     800             :                 }
     801             :             }
     802             :         }
     803           0 :         break;
     804             :         case VCLEVENT_WINDOW_ENDDOCKING:
     805             :         {
     806           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     807             :             {
     808           0 :                 EndDockingData *pData = (EndDockingData*)rVclWindowEvent.GetData();
     809             : 
     810           0 :                 if( pData )
     811             :                 {
     812           0 :                     ::com::sun::star::awt::EndDockingEvent aEvent;
     813           0 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     814           0 :                     aEvent.WindowRectangle = AWTRectangle( pData->maWindowRect );
     815           0 :                     aEvent.bFloating = pData->mbFloating;
     816           0 :                     aEvent.bCancelled = pData->mbCancelled;
     817           0 :                     mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::endDocking, aEvent );
     818             :                 }
     819             :             }
     820             :         }
     821           0 :         break;
     822             :         case VCLEVENT_WINDOW_PREPARETOGGLEFLOATING:
     823             :         {
     824           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     825             :             {
     826           0 :                 sal_Bool *p_bFloating = (sal_Bool*)rVclWindowEvent.GetData();
     827             : 
     828           0 :                 ::com::sun::star::lang::EventObject aEvent;
     829           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     830             : 
     831           0 :                 Reference< XDockableWindowListener > xFirstListener;
     832           0 :                 ::cppu::OInterfaceIteratorHelper aIter( mpImpl->getDockableWindowListeners() );
     833           0 :                 while ( aIter.hasMoreElements() && !xFirstListener.is() )
     834             :                 {
     835           0 :                     xFirstListener.set( aIter.next(), UNO_QUERY );
     836             :                 }
     837             : 
     838           0 :                 *p_bFloating = xFirstListener->prepareToggleFloatingMode( aEvent );
     839             :             }
     840             :         }
     841           0 :         break;
     842             :         case VCLEVENT_WINDOW_TOGGLEFLOATING:
     843             :         {
     844           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     845             :             {
     846           0 :                 ::com::sun::star::lang::EventObject aEvent;
     847           0 :                 aEvent.Source = (::cppu::OWeakObject*)this;
     848           0 :                 mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::toggleFloatingMode, aEvent );
     849             :             }
     850             :        }
     851           0 :         break;
     852             :         case VCLEVENT_WINDOW_ENDPOPUPMODE:
     853             :         {
     854           0 :             if ( mpImpl->getDockableWindowListeners().getLength() )
     855             :             {
     856           0 :                 EndPopupModeData *pData = (EndPopupModeData*)rVclWindowEvent.GetData();
     857             : 
     858           0 :                 if( pData )
     859             :                 {
     860           0 :                     ::com::sun::star::awt::EndPopupModeEvent aEvent;
     861           0 :                     aEvent.Source = (::cppu::OWeakObject*)this;
     862           0 :                     aEvent.FloatingPosition.X = pData->maFloatingPos.X();
     863           0 :                     aEvent.FloatingPosition.Y = pData->maFloatingPos.Y();
     864           0 :                     aEvent.bTearoff = pData->mbTearoff;
     865           0 :                     mpImpl->getDockableWindowListeners().notifyEach( &XDockableWindowListener::endPopupMode, aEvent );
     866             :                 }
     867             :             }
     868             :         }
     869           0 :         break;
     870             : 
     871     1848222 :     }
     872     1848222 : }
     873             : 
     874         422 : uno::Reference< accessibility::XAccessibleContext > VCLXWindow::CreateAccessibleContext()
     875             : {
     876         422 :     SolarMutexGuard aGuard;
     877         422 :     return getAccessibleFactory().createAccessibleContext( this );
     878             : }
     879             : 
     880        1716 : void VCLXWindow::SetSynthesizingVCLEvent( bool _b )
     881             : {
     882        1716 :     mpImpl->mbSynthesizingVCLEvent = _b;
     883        1716 : }
     884             : 
     885          69 : bool VCLXWindow::IsSynthesizingVCLEvent() const
     886             : {
     887          69 :     return mpImpl->mbSynthesizingVCLEvent;
     888             : }
     889             : 
     890          18 : Size VCLXWindow::ImplCalcWindowSize( const Size& rOutSz ) const
     891             : {
     892          18 :     Size aSz = rOutSz;
     893             : 
     894          18 :     vcl::Window* pWindow = GetWindow();
     895          18 :     if ( pWindow )
     896             :     {
     897             :         sal_Int32 nLeft, nTop, nRight, nBottom;
     898          18 :         pWindow->GetBorder( nLeft, nTop, nRight, nBottom );
     899          18 :         aSz.Width() += nLeft+nRight;
     900          18 :         aSz.Height() += nTop+nBottom;
     901             :     }
     902          18 :     return aSz;
     903             : }
     904             : 
     905             : 
     906             : // ::com::sun::star::lang::XUnoTunnel
     907     4473408 : IMPL_XUNOTUNNEL2( VCLXWindow, VCLXDevice )
     908             : 
     909             : // ::com::sun::star::lang::Component
     910      211636 : void VCLXWindow::dispose(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     911             : {
     912      211636 :     SolarMutexGuard aGuard;
     913             : 
     914      211636 :     mpImpl->mxViewGraphics = NULL;
     915             : 
     916      211636 :     if ( !mpImpl->mbDisposing )
     917             :     {
     918      138827 :         mpImpl->mbDisposing = true;
     919             : 
     920      138827 :         mpImpl->disposing();
     921             : 
     922      138827 :         if ( GetWindow() )
     923             :         {
     924       72681 :             OutputDevice* pOutDev = GetOutputDevice();
     925       72681 :             SetWindow( NULL );  // so that handlers are logged off, if necessary (virtual)
     926       72681 :             SetOutputDevice( pOutDev );
     927       72681 :             DestroyOutputDevice();
     928             :         }
     929             : 
     930             :         // #i14103# dispose the accessible context after the window has been destroyed,
     931             :         // otherwise the old value in the child event fired in VCLXAccessibleComponent::ProcessWindowEvent()
     932             :         // for VCLEVENT_WINDOW_CHILDDESTROYED contains a reference to an already disposed accessible object
     933             :         try
     934             :         {
     935      138827 :             ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xComponent( mpImpl->mxAccessibleContext, ::com::sun::star::uno::UNO_QUERY );
     936      138827 :             if ( xComponent.is() )
     937         608 :                 xComponent->dispose();
     938             :         }
     939           0 :         catch ( const ::com::sun::star::uno::Exception& )
     940             :         {
     941             :             OSL_FAIL( "VCLXWindow::dispose: could not dispose the accessible context!" );
     942             :         }
     943      138827 :         mpImpl->mxAccessibleContext.clear();
     944             : 
     945      138827 :         mpImpl->mbDisposing = false;
     946      211636 :     }
     947      211636 : }
     948             : 
     949         206 : void VCLXWindow::addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     950             : {
     951         206 :     SolarMutexGuard aGuard;
     952             : 
     953         206 :     mpImpl->getEventListeners().addInterface( rxListener );
     954         206 : }
     955             : 
     956          72 : void VCLXWindow::removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     957             : {
     958          72 :     SolarMutexGuard aGuard;
     959             : 
     960          72 :     mpImpl->getEventListeners().removeInterface( rxListener );
     961          72 : }
     962             : 
     963             : 
     964             : // ::com::sun::star::awt::XWindow
     965      216676 : void VCLXWindow::setPosSize( sal_Int32 X, sal_Int32 Y, sal_Int32 Width, sal_Int32 Height, sal_Int16 Flags ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     966             : {
     967      216676 :     SolarMutexGuard aGuard;
     968             : 
     969      216676 :     if ( GetWindow() )
     970             :     {
     971      216676 :         if( vcl::Window::GetDockingManager()->IsDockable( GetWindow() ) )
     972       16268 :             vcl::Window::GetDockingManager()->SetPosSizePixel( GetWindow() , X, Y, Width, Height, Flags );
     973             :         else
     974      200408 :             GetWindow()->setPosSizePixel( X, Y, Width, Height, Flags );
     975      216676 :     }
     976      216676 : }
     977             : 
     978      267178 : ::com::sun::star::awt::Rectangle VCLXWindow::getPosSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     979             : {
     980      267178 :     SolarMutexGuard aGuard;
     981             : 
     982      267178 :     ::com::sun::star::awt::Rectangle aBounds;
     983      267178 :     if ( GetWindow() )
     984             :     {
     985      267178 :         if( vcl::Window::GetDockingManager()->IsDockable( GetWindow() ) )
     986       36742 :             aBounds = AWTRectangle( vcl::Window::GetDockingManager()->GetPosSizePixel( GetWindow() ) );
     987             :         else
     988      230436 :             aBounds = AWTRectangle( Rectangle( GetWindow()->GetPosPixel(), GetWindow()->GetSizePixel() ) );
     989             :     }
     990             : 
     991      267178 :     return aBounds;
     992             : }
     993             : 
     994       81155 : void VCLXWindow::setVisible( sal_Bool bVisible ) throw(::com::sun::star::uno::RuntimeException, std::exception)
     995             : {
     996       81155 :     SolarMutexGuard aGuard;
     997             : 
     998       81155 :     vcl::Window* pWindow = GetWindow();
     999       81155 :     if ( pWindow )
    1000             :     {
    1001       81153 :         mpImpl->setDirectVisible( bVisible );
    1002       81153 :         pWindow->Show( bVisible &&  mpImpl->isEnableVisible() );
    1003       81155 :     }
    1004       81155 : }
    1005             : 
    1006        1088 : void VCLXWindow::setEnable( sal_Bool bEnable ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1007             : {
    1008        1088 :     SolarMutexGuard aGuard;
    1009             : 
    1010        1088 :     vcl::Window* pWindow = GetWindow();
    1011        1088 :     if ( pWindow )
    1012             :     {
    1013        1088 :         pWindow->Enable( bEnable, false ); // #95824# without children!
    1014        1088 :         pWindow->EnableInput( bEnable );
    1015        1088 :     }
    1016        1088 : }
    1017             : 
    1018        5122 : void VCLXWindow::setFocus(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1019             : {
    1020        5122 :     SolarMutexGuard aGuard;
    1021             : 
    1022        5122 :     if ( GetWindow() )
    1023        5122 :         GetWindow()->GrabFocus();
    1024        5122 : }
    1025             : 
    1026       40523 : void VCLXWindow::addWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1027             : {
    1028       40523 :     SolarMutexGuard aGuard;
    1029             : 
    1030       40523 :     mpImpl->getWindowListeners().addInterface( rxListener );
    1031             : 
    1032       81046 :     Reference< XWindowListener2 > xListener2( rxListener, UNO_QUERY );
    1033       40523 :     if ( xListener2.is() )
    1034         703 :         mpImpl->getWindow2Listeners().addInterface( xListener2 );
    1035             : 
    1036             :     // #100119# Get all resize events, even if height or width 0, or invisible
    1037       40523 :     if ( GetWindow() )
    1038       81046 :         GetWindow()->EnableAllResize( true );
    1039       40523 : }
    1040             : 
    1041       23783 : void VCLXWindow::removeWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1042             : {
    1043       23783 :     SolarMutexGuard aGuard;
    1044             : 
    1045       47566 :     Reference< XWindowListener2 > xListener2( rxListener, UNO_QUERY );
    1046       23783 :     if ( xListener2.is() )
    1047         703 :         mpImpl->getWindow2Listeners().removeInterface( xListener2 );
    1048             : 
    1049       47566 :     mpImpl->getWindowListeners().removeInterface( rxListener );
    1050       23783 : }
    1051             : 
    1052       17028 : void VCLXWindow::addFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1053             : {
    1054       17028 :     SolarMutexGuard aGuard;
    1055       17028 :     mpImpl->getFocusListeners().addInterface( rxListener );
    1056       17028 : }
    1057             : 
    1058       16806 : void VCLXWindow::removeFocusListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1059             : {
    1060       16806 :     SolarMutexGuard aGuard;
    1061       16806 :     mpImpl->getFocusListeners().removeInterface( rxListener );
    1062       16806 : }
    1063             : 
    1064         186 : void VCLXWindow::addKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1065             : {
    1066         186 :     SolarMutexGuard aGuard;
    1067         186 :     mpImpl->getKeyListeners().addInterface( rxListener );
    1068         186 : }
    1069             : 
    1070           4 : void VCLXWindow::removeKeyListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XKeyListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1071             : {
    1072           4 :     SolarMutexGuard aGuard;
    1073           4 :     mpImpl->getKeyListeners().removeInterface( rxListener );
    1074           4 : }
    1075             : 
    1076         122 : void VCLXWindow::addMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1077             : {
    1078         122 :     SolarMutexGuard aGuard;
    1079         122 :     mpImpl->getMouseListeners().addInterface( rxListener );
    1080         122 : }
    1081             : 
    1082          86 : void VCLXWindow::removeMouseListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1083             : {
    1084          86 :     SolarMutexGuard aGuard;
    1085          86 :     mpImpl->getMouseListeners().removeInterface( rxListener );
    1086          86 : }
    1087             : 
    1088          18 : void VCLXWindow::addMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1089             : {
    1090          18 :     SolarMutexGuard aGuard;
    1091          18 :     mpImpl->getMouseMotionListeners().addInterface( rxListener );
    1092          18 : }
    1093             : 
    1094           2 : void VCLXWindow::removeMouseMotionListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XMouseMotionListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1095             : {
    1096           2 :     SolarMutexGuard aGuard;
    1097           2 :     mpImpl->getMouseMotionListeners().removeInterface( rxListener );
    1098           2 : }
    1099             : 
    1100           0 : void VCLXWindow::addPaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1101             : {
    1102           0 :     SolarMutexGuard aGuard;
    1103           0 :     mpImpl->getPaintListeners().addInterface( rxListener );
    1104           0 : }
    1105             : 
    1106           0 : void VCLXWindow::removePaintListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPaintListener >& rxListener ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1107             : {
    1108           0 :     SolarMutexGuard aGuard;
    1109           0 :     mpImpl->getPaintListeners().removeInterface( rxListener );
    1110           0 : }
    1111             : 
    1112             : // ::com::sun::star::awt::XWindowPeer
    1113         679 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit > VCLXWindow::getToolkit(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1114             : {
    1115             :     // no guard. nothing to guard here.
    1116             :     // 82463 - 12/21/00 - fs
    1117         679 :     return Application::GetVCLToolkit();
    1118             : }
    1119             : 
    1120           0 : void VCLXWindow::setPointer( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XPointer >& rxPointer ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1121             : {
    1122           0 :     SolarMutexGuard aGuard;
    1123             : 
    1124           0 :     VCLXPointer* pPointer = VCLXPointer::GetImplementation( rxPointer );
    1125           0 :     if ( pPointer )
    1126             :     {
    1127           0 :         mpImpl->mxPointer = rxPointer;
    1128           0 :         if ( GetWindow() )
    1129           0 :             GetWindow()->SetPointer( pPointer->GetPointer() );
    1130           0 :     }
    1131           0 : }
    1132             : 
    1133        5564 : void VCLXWindow::setBackground( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1134             : {
    1135        5564 :     SolarMutexGuard aGuard;
    1136             : 
    1137        5564 :     if ( GetWindow() )
    1138             :     {
    1139        5564 :         Color aColor( (sal_uInt32)nColor );
    1140        5564 :         GetWindow()->SetBackground( aColor );
    1141        5564 :         GetWindow()->SetControlBackground( aColor );
    1142             : 
    1143        5564 :         WindowType eWinType = GetWindow()->GetType();
    1144        5564 :         if ( ( eWinType == WINDOW_WINDOW ) ||
    1145           0 :              ( eWinType == WINDOW_WORKWINDOW ) ||
    1146             :              ( eWinType == WINDOW_FLOATINGWINDOW ) )
    1147             :         {
    1148        5564 :             GetWindow()->Invalidate();
    1149             :         }
    1150        5564 :     }
    1151        5564 : }
    1152             : 
    1153           0 : void VCLXWindow::invalidate( sal_Int16 nInvalidateFlags ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1154             : {
    1155           0 :     SolarMutexGuard aGuard;
    1156             : 
    1157           0 :     if ( GetWindow() )
    1158           0 :         GetWindow()->Invalidate( (sal_uInt16) nInvalidateFlags );
    1159           0 : }
    1160             : 
    1161           0 : void VCLXWindow::invalidateRect( const ::com::sun::star::awt::Rectangle& rRect, sal_Int16 nInvalidateFlags ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1162             : {
    1163           0 :     SolarMutexGuard aGuard;
    1164             : 
    1165           0 :     if ( GetWindow() )
    1166           0 :         GetWindow()->Invalidate( VCLRectangle(rRect), (sal_uInt16) nInvalidateFlags );
    1167           0 : }
    1168             : 
    1169             : 
    1170             : // ::com::sun::star::awt::XVclWindowPeer
    1171           0 : sal_Bool VCLXWindow::isChild( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& rxPeer ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1172             : {
    1173           0 :     SolarMutexGuard aGuard;
    1174             : 
    1175           0 :     bool bIsChild = false;
    1176           0 :     vcl::Window* pWindow = GetWindow();
    1177           0 :     if ( pWindow )
    1178             :     {
    1179           0 :         vcl::Window* pPeerWindow = VCLUnoHelper::GetWindow( rxPeer );
    1180           0 :         bIsChild = pPeerWindow && pWindow->IsChild( pPeerWindow );
    1181             :     }
    1182             : 
    1183           0 :     return bIsChild;
    1184             : }
    1185             : 
    1186        2652 : void VCLXWindow::setDesignMode( sal_Bool bOn ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1187             : {
    1188        2652 :     SolarMutexGuard aGuard;
    1189             : 
    1190        2652 :     mpImpl->mbDesignMode = bOn;
    1191        2652 : }
    1192             : 
    1193        8173 : sal_Bool VCLXWindow::isDesignMode(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1194             : {
    1195        8173 :     SolarMutexGuard aGuard;
    1196        8173 :     return mpImpl->mbDesignMode;
    1197             : }
    1198             : 
    1199           0 : void VCLXWindow::enableClipSiblings( sal_Bool bClip ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1200             : {
    1201           0 :     SolarMutexGuard aGuard;
    1202             : 
    1203           0 :     if ( GetWindow() )
    1204           0 :         GetWindow()->EnableClipSiblings( bClip );
    1205           0 : }
    1206             : 
    1207           0 : void VCLXWindow::setForeground( sal_Int32 nColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1208             : {
    1209           0 :     SolarMutexGuard aGuard;
    1210             : 
    1211           0 :     if ( GetWindow() )
    1212             :     {
    1213           0 :         Color aColor( (sal_uInt32)nColor );
    1214           0 :         GetWindow()->SetControlForeground( aColor );
    1215           0 :     }
    1216           0 : }
    1217             : 
    1218           0 : void VCLXWindow::setControlFont( const ::com::sun::star::awt::FontDescriptor& rFont ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1219             : {
    1220           0 :     SolarMutexGuard aGuard;
    1221             : 
    1222           0 :     if ( GetWindow() )
    1223           0 :         GetWindow()->SetControlFont( VCLUnoHelper::CreateFont( rFont, GetWindow()->GetControlFont() ) );
    1224           0 : }
    1225             : 
    1226           0 : void VCLXWindow::getStyles( sal_Int16 nType, ::com::sun::star::awt::FontDescriptor& Font, sal_Int32& ForegroundColor, sal_Int32& BackgroundColor ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1227             : {
    1228           0 :     SolarMutexGuard aGuard;
    1229             : 
    1230           0 :     if ( GetWindow() )
    1231             :     {
    1232           0 :         const StyleSettings& rStyleSettings = GetWindow()->GetSettings().GetStyleSettings();
    1233             : 
    1234           0 :         switch ( nType )
    1235             :         {
    1236             :             case ::com::sun::star::awt::Style::FRAME:
    1237             :             {
    1238           0 :                 Font = VCLUnoHelper::CreateFontDescriptor( rStyleSettings.GetAppFont() );
    1239           0 :                 ForegroundColor = rStyleSettings.GetWindowTextColor().GetColor();
    1240           0 :                 BackgroundColor = rStyleSettings.GetWindowColor().GetColor();
    1241             :             }
    1242           0 :             break;
    1243             :             case ::com::sun::star::awt::Style::DIALOG:
    1244             :             {
    1245           0 :                 Font = VCLUnoHelper::CreateFontDescriptor( rStyleSettings.GetAppFont() );
    1246           0 :                 ForegroundColor = rStyleSettings.GetDialogTextColor().GetColor();
    1247           0 :                 BackgroundColor = rStyleSettings.GetDialogColor().GetColor();
    1248             :             }
    1249           0 :             break;
    1250             :             default: OSL_FAIL( "VCLWindow::getStyles() - unknown Type" );
    1251             :         }
    1252             : 
    1253           0 :     }
    1254           0 : }
    1255             : 
    1256             : namespace toolkit
    1257             : {
    1258         513 :     static void setColorSettings( vcl::Window* _pWindow, const ::com::sun::star::uno::Any& _rValue,
    1259             :         void (StyleSettings::*pSetter)( const Color& ), const Color& (StyleSettings::*pGetter)( ) const )
    1260             :     {
    1261         513 :         sal_Int32 nColor = 0;
    1262         513 :         if ( !( _rValue >>= nColor ) )
    1263         505 :             nColor = (Application::GetSettings().GetStyleSettings().*pGetter)().GetColor();
    1264             : 
    1265         513 :         AllSettings aSettings = _pWindow->GetSettings();
    1266        1026 :         StyleSettings aStyleSettings = aSettings.GetStyleSettings();
    1267             : 
    1268         513 :         (aStyleSettings.*pSetter)( Color( nColor ) );
    1269             : 
    1270         513 :         aSettings.SetStyleSettings( aStyleSettings );
    1271        1026 :         _pWindow->SetSettings( aSettings, true );
    1272         513 :     }
    1273             : }
    1274             : 
    1275             : // Terminated by BASEPROPERTY_NOTFOUND (or 0)
    1276         754 : void VCLXWindow::PushPropertyIds( std::list< sal_uInt16 > &rIds,
    1277             :                                   int nFirstId, ...)
    1278             : {
    1279             :     va_list pVarArgs;
    1280         754 :     va_start( pVarArgs, nFirstId );
    1281             : 
    1282       21774 :     for ( int nId = nFirstId; nId != BASEPROPERTY_NOTFOUND;
    1283       32992 :           nId = va_arg( pVarArgs, int ) )
    1284       18004 :         rIds.push_back( (sal_uInt16) nId );
    1285             : 
    1286         754 :     va_end( pVarArgs );
    1287         754 : }
    1288             : 
    1289         754 : void VCLXWindow::ImplGetPropertyIds( std::list< sal_uInt16 > &rIds, bool bWithDefaults )
    1290             : {
    1291             :     // These are common across ~all VCLXWindow derived classes
    1292         754 :     if( bWithDefaults )
    1293             :         PushPropertyIds( rIds,
    1294             :                          BASEPROPERTY_ALIGN,
    1295             :                          BASEPROPERTY_BACKGROUNDCOLOR,
    1296             :                          BASEPROPERTY_BORDER,
    1297             :                          BASEPROPERTY_BORDERCOLOR,
    1298             :                          BASEPROPERTY_DEFAULTCONTROL,
    1299             :                          BASEPROPERTY_ENABLED,
    1300             :                          BASEPROPERTY_FONTDESCRIPTOR,
    1301             :                          BASEPROPERTY_HELPTEXT,
    1302             :                          BASEPROPERTY_HELPURL,
    1303             :                          BASEPROPERTY_TEXT,
    1304             :                          BASEPROPERTY_PRINTABLE,
    1305             :                          BASEPROPERTY_ENABLEVISIBLE, // for visibility
    1306             :                          BASEPROPERTY_TABSTOP,
    1307           0 :                          0);
    1308             : 
    1309             :     // lovely hack from:
    1310             :     // void UnoControlModel::ImplRegisterProperty( sal_uInt16 nPropId )
    1311         754 :     std::list< sal_uInt16 >::const_iterator iter;
    1312        6822 :     for( iter = rIds.begin(); iter != rIds.end(); ++iter) {
    1313        6754 :         if( *iter == BASEPROPERTY_FONTDESCRIPTOR )
    1314             :         {
    1315             :             // some properties are not included in the FontDescriptor, but every time
    1316             :             // when we have a FontDescriptor we want to have these properties too.
    1317             :             // => Easier to register the here, istead everywhere where I register the FontDescriptor...
    1318             : 
    1319         686 :             rIds.push_back( BASEPROPERTY_TEXTCOLOR );
    1320         686 :             rIds.push_back( BASEPROPERTY_TEXTLINECOLOR );
    1321         686 :             rIds.push_back( BASEPROPERTY_FONTRELIEF );
    1322         686 :             rIds.push_back( BASEPROPERTY_FONTEMPHASISMARK );
    1323         686 :             break;
    1324             :         }
    1325             :     }
    1326         754 : }
    1327             : 
    1328           0 : void VCLXWindow::GetPropertyIds( std::list< sal_uInt16 >& _out_rIds )
    1329             : {
    1330           0 :     return ImplGetPropertyIds( _out_rIds, mpImpl->mbWithDefaultProps );
    1331             : }
    1332             : 
    1333           0 : ::cppu::OInterfaceContainerHelper& VCLXWindow::GetContainerListeners()
    1334             : {
    1335           0 :     return mpImpl->getContainerListeners();
    1336             : }
    1337             : 
    1338       33578 : ::cppu::OInterfaceContainerHelper& VCLXWindow::GetTopWindowListeners()
    1339             : {
    1340       33578 :     return mpImpl->getTopWindowListeners();
    1341             : }
    1342             : 
    1343             : namespace
    1344             : {
    1345        1755 :     void    lcl_updateWritingMode( vcl::Window& _rWindow, const sal_Int16 _nWritingMode, const sal_Int16 _nContextWritingMode )
    1346             :     {
    1347        1755 :         bool bEnableRTL = false;
    1348        1755 :         switch ( _nWritingMode )
    1349             :         {
    1350           4 :         case WritingMode2::LR_TB:   bEnableRTL = false; break;
    1351           0 :         case WritingMode2::RL_TB:   bEnableRTL = true; break;
    1352             :         case WritingMode2::CONTEXT:
    1353             :         {
    1354             :             // consult our ContextWritingMode. If it has an explicit RTL/LTR value, then use
    1355             :             // it. If it doesn't (but is CONTEXT itself), then just ask the parent window of our
    1356             :             // own window for its RTL mode
    1357        1309 :             switch ( _nContextWritingMode )
    1358             :             {
    1359         784 :                 case WritingMode2::LR_TB:   bEnableRTL = false; break;
    1360         173 :                 case WritingMode2::RL_TB:   bEnableRTL = true; break;
    1361             :                 case WritingMode2::CONTEXT:
    1362             :                 {
    1363         221 :                     const vcl::Window* pParent = _rWindow.GetParent();
    1364             :                     OSL_ENSURE( pParent, "lcl_updateWritingMode: cannot determine context's writing mode!" );
    1365         221 :                     if ( pParent )
    1366         221 :                         bEnableRTL = pParent->IsRTLEnabled();
    1367             :                 }
    1368         221 :                 break;
    1369             :             }
    1370             :         }
    1371        1309 :         break;
    1372             :         default:
    1373             :             OSL_FAIL( "lcl_updateWritingMode: unsupported WritingMode!" );
    1374             :         }   // switch ( nWritingMode )
    1375             : 
    1376        1755 :         _rWindow.EnableRTL( bEnableRTL );
    1377        1755 :     }
    1378             : }
    1379             : 
    1380       56715 : void VCLXWindow::setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value )
    1381             :     throw(::com::sun::star::uno::RuntimeException,
    1382             :           std::exception)
    1383             : {
    1384       56715 :     SolarMutexGuard aGuard;
    1385             : 
    1386       56715 :     vcl::Window* pWindow = GetWindow();
    1387       56715 :     if ( !pWindow )
    1388       56715 :         return;
    1389             : 
    1390       56715 :     bool bVoid = Value.getValueType().getTypeClass() == ::com::sun::star::uno::TypeClass_VOID;
    1391             : 
    1392       56715 :     WindowType eWinType = pWindow->GetType();
    1393       56715 :     sal_uInt16 nPropType = GetPropertyId( PropertyName );
    1394       56715 :     switch ( nPropType )
    1395             :     {
    1396             :         case BASEPROPERTY_REFERENCE_DEVICE:
    1397             :         {
    1398         433 :             Control* pControl = dynamic_cast< Control* >( pWindow );
    1399             :             OSL_ENSURE( pControl, "VCLXWindow::setProperty( RefDevice ): need a Control for this!" );
    1400         433 :             if ( !pControl )
    1401           0 :                 break;
    1402         433 :             Reference< XDevice > xDevice( Value, UNO_QUERY );
    1403         433 :             OutputDevice* pDevice = VCLUnoHelper::GetOutputDevice( xDevice );
    1404         433 :             pControl->SetReferenceDevice( pDevice );
    1405             :         }
    1406         433 :         break;
    1407             : 
    1408             :         case BASEPROPERTY_CONTEXT_WRITING_MODE:
    1409             :         {
    1410         954 :             OSL_VERIFY( Value >>= mpImpl->mnContextWritingMode );
    1411         954 :             if ( mpImpl->mnWritingMode == WritingMode2::CONTEXT )
    1412         793 :                 lcl_updateWritingMode( *pWindow, mpImpl->mnWritingMode, mpImpl->mnContextWritingMode );
    1413             :         }
    1414         954 :         break;
    1415             : 
    1416             :         case BASEPROPERTY_WRITING_MODE:
    1417             :         {
    1418         962 :             bool bProperType = ( Value >>= mpImpl->mnWritingMode );
    1419             :             OSL_ENSURE( bProperType, "VCLXWindow::setProperty( 'WritingMode' ): illegal value type!" );
    1420         962 :             if ( bProperType )
    1421         962 :                 lcl_updateWritingMode( *pWindow, mpImpl->mnWritingMode, mpImpl->mnContextWritingMode );
    1422             :         }
    1423         962 :         break;
    1424             : 
    1425             :         case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
    1426             :         {
    1427         368 :             sal_uInt16 nWheelBehavior( MouseWheelBehavior::SCROLL_FOCUS_ONLY );
    1428         368 :             OSL_VERIFY( Value >>= nWheelBehavior );
    1429             : 
    1430         368 :             AllSettings aSettings = pWindow->GetSettings();
    1431         736 :             MouseSettings aMouseSettings = aSettings.GetMouseSettings();
    1432             : 
    1433         368 :             sal_uInt16 nVclBehavior( MOUSE_WHEEL_FOCUS_ONLY );
    1434         368 :             switch ( nWheelBehavior )
    1435             :             {
    1436           0 :             case MouseWheelBehavior::SCROLL_DISABLED:   nVclBehavior = MOUSE_WHEEL_DISABLE;     break;
    1437         150 :             case MouseWheelBehavior::SCROLL_FOCUS_ONLY: nVclBehavior = MOUSE_WHEEL_FOCUS_ONLY;  break;
    1438          68 :             case MouseWheelBehavior::SCROLL_ALWAYS:     nVclBehavior = MOUSE_WHEEL_ALWAYS;      break;
    1439             :             default:
    1440             :                 OSL_FAIL( "VCLXWindow::setProperty( 'MouseWheelBehavior' ): illegal property value!" );
    1441             :             }
    1442             : 
    1443         368 :             aMouseSettings.SetWheelBehavior( nVclBehavior );
    1444         368 :             aSettings.SetMouseSettings( aMouseSettings );
    1445         736 :             pWindow->SetSettings( aSettings, true );
    1446             :         }
    1447         368 :         break;
    1448             : 
    1449             :         case BASEPROPERTY_NATIVE_WIDGET_LOOK:
    1450             :         {
    1451         923 :             bool bEnable( true );
    1452         923 :             OSL_VERIFY( Value >>= bEnable );
    1453         923 :             pWindow->EnableNativeWidget( bEnable );
    1454             :         }
    1455         923 :         break;
    1456             : 
    1457             :         case BASEPROPERTY_PLUGINPARENT:
    1458             :         {
    1459             :             // set parent handle
    1460           0 :             SetSystemParent_Impl( Value );
    1461             :         }
    1462           0 :         break;
    1463             : 
    1464             :         case BASEPROPERTY_ENABLED:
    1465             :         {
    1466         924 :             bool b = bool();
    1467         924 :             if ( Value >>= b )
    1468         924 :                 setEnable( b );
    1469             :         }
    1470         924 :         break;
    1471             :         case BASEPROPERTY_ENABLEVISIBLE:
    1472             :         {
    1473         948 :             bool b = false;
    1474         948 :             if ( Value >>= b )
    1475             :             {
    1476         948 :                 if( b != mpImpl->isEnableVisible() )
    1477             :                 {
    1478         347 :                     mpImpl->setEnableVisible( b );
    1479         347 :                     pWindow->Show( b && mpImpl->isDirectVisible() );
    1480             :                 }
    1481             :             }
    1482             :         }
    1483         948 :         break;
    1484             :         case BASEPROPERTY_TEXT:
    1485             :         case BASEPROPERTY_LABEL:
    1486             :         case BASEPROPERTY_TITLE:
    1487             :         {
    1488         325 :             OUString aText;
    1489         325 :             if ( Value >>= aText )
    1490             :             {
    1491         325 :                 switch (eWinType)
    1492             :                 {
    1493             :                     case WINDOW_OKBUTTON:
    1494             :                     case WINDOW_CANCELBUTTON:
    1495             :                     case WINDOW_HELPBUTTON:
    1496             :                         // Standard Button: overwrite only if not empty.
    1497           0 :                         if (!aText.isEmpty())
    1498           0 :                             pWindow->SetText( aText );
    1499           0 :                         break;
    1500             : 
    1501             :                     default:
    1502         325 :                         pWindow->SetText( aText );
    1503         325 :                         break;
    1504             :                 }
    1505         325 :             }
    1506             :         }
    1507         325 :         break;
    1508             :         case BASEPROPERTY_ACCESSIBLENAME:
    1509             :         {
    1510           0 :             OUString aText;
    1511           0 :             if ( Value >>= aText )
    1512           0 :                 pWindow->SetAccessibleName( aText );
    1513             :         }
    1514           0 :         break;
    1515             :         case BASEPROPERTY_HELPURL:
    1516             :         {
    1517         818 :             OUString aURL;
    1518         818 :             if ( Value >>= aURL )
    1519             :             {
    1520         818 :                 INetURLObject aHelpURL( aURL );
    1521         818 :                 if ( aHelpURL.GetProtocol() == INET_PROT_HID )
    1522           0 :                     pWindow->SetHelpId( OUStringToOString( aHelpURL.GetURLPath(), RTL_TEXTENCODING_UTF8 ) );
    1523             :                 else
    1524         818 :                     pWindow->SetHelpId( OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ) );
    1525         818 :             }
    1526             :         }
    1527         818 :         break;
    1528             :         case BASEPROPERTY_HELPTEXT:
    1529             :         {
    1530        1004 :             OUString aHelpText;
    1531        1004 :             if ( Value >>= aHelpText )
    1532             :             {
    1533        1004 :                 pWindow->SetQuickHelpText( aHelpText );
    1534        1004 :             }
    1535             :         }
    1536        1004 :         break;
    1537             :         case BASEPROPERTY_FONTDESCRIPTOR:
    1538             :         {
    1539        2803 :             if ( bVoid )
    1540           0 :                 pWindow->SetControlFont( vcl::Font() );
    1541             :             else
    1542             :             {
    1543        2803 :                 ::com::sun::star::awt::FontDescriptor aFont;
    1544        2803 :                 if ( Value >>= aFont )
    1545        2803 :                     pWindow->SetControlFont( VCLUnoHelper::CreateFont( aFont, pWindow->GetControlFont() ) );
    1546             :             }
    1547             :         }
    1548        2803 :         break;
    1549             :         case BASEPROPERTY_FONTRELIEF:
    1550             :         {
    1551         785 :             sal_Int16 n = sal_Int16();
    1552         785 :             if ( Value >>= n )
    1553             :             {
    1554         785 :                 vcl::Font aFont = pWindow->GetControlFont();
    1555         785 :                 aFont.SetRelief( (FontRelief)n );
    1556         785 :                 pWindow->SetControlFont( aFont );
    1557             :             }
    1558             :         }
    1559         785 :         break;
    1560             :         case BASEPROPERTY_FONTEMPHASISMARK:
    1561             :         {
    1562         786 :             sal_Int16 n = sal_Int16();
    1563         786 :             if ( Value >>= n )
    1564             :             {
    1565         786 :                 vcl::Font aFont = pWindow->GetControlFont();
    1566         786 :                 aFont.SetEmphasisMark( n );
    1567         786 :                 pWindow->SetControlFont( aFont );
    1568             :             }
    1569             :         }
    1570         786 :         break;
    1571             :         case BASEPROPERTY_BACKGROUNDCOLOR:
    1572         607 :             if ( bVoid )
    1573             :             {
    1574         531 :                 switch ( eWinType )
    1575             :                 {
    1576             :                     // set dialog color for default
    1577             :                     case WINDOW_DIALOG:
    1578             :                     case WINDOW_MESSBOX:
    1579             :                     case WINDOW_INFOBOX:
    1580             :                     case WINDOW_WARNINGBOX:
    1581             :                     case WINDOW_ERRORBOX:
    1582             :                     case WINDOW_QUERYBOX:
    1583             :                     case WINDOW_TABPAGE:
    1584             :                     {
    1585           4 :                         Color aColor = pWindow->GetSettings().GetStyleSettings().GetDialogColor();
    1586           4 :                         pWindow->SetBackground( aColor );
    1587           4 :                         pWindow->SetControlBackground( aColor );
    1588           4 :                         break;
    1589             :                     }
    1590             : 
    1591             :                     case WINDOW_FIXEDTEXT:
    1592             :                     case WINDOW_CHECKBOX:
    1593             :                     case WINDOW_RADIOBUTTON:
    1594             :                     case WINDOW_GROUPBOX:
    1595             :                     case WINDOW_FIXEDLINE:
    1596             :                     {
    1597             :                         // support transparency only for special controls
    1598          72 :                         pWindow->SetBackground();
    1599          72 :                         pWindow->SetControlBackground();
    1600          72 :                         pWindow->SetPaintTransparent( true );
    1601          72 :                         break;
    1602             :                     }
    1603             : 
    1604             :                     default:
    1605             :                     {
    1606             :                         // default code which enables transparency for
    1607             :                         // compound controls. It's not real transparency
    1608             :                         // as most of these controls repaint their client
    1609             :                         // area completely new.
    1610         455 :                         if ( pWindow->IsCompoundControl() )
    1611         166 :                             pWindow->SetBackground();
    1612         455 :                         pWindow->SetControlBackground();
    1613         455 :                         break;
    1614             :                     }
    1615             :                 }
    1616             :             }
    1617             :             else
    1618             :             {
    1619          76 :                 sal_Int32 nColor = 0;
    1620          76 :                 if ( Value >>= nColor )
    1621             :                 {
    1622          76 :                     Color aColor( nColor );
    1623          76 :                     pWindow->SetControlBackground( aColor );
    1624          76 :                     pWindow->SetBackground( aColor );
    1625          76 :                     switch ( eWinType )
    1626             :                     {
    1627             :                         // reset paint transparent mode
    1628             :                         case WINDOW_FIXEDTEXT:
    1629             :                         case WINDOW_CHECKBOX:
    1630             :                         case WINDOW_RADIOBUTTON:
    1631             :                         case WINDOW_GROUPBOX:
    1632             :                         case WINDOW_FIXEDLINE:
    1633          16 :                             pWindow->SetPaintTransparent( false );
    1634             :                         default: ;
    1635             :                     }
    1636          76 :                     pWindow->Invalidate();  // Invalidate if control does not respond to it
    1637             :                 }
    1638             :             }
    1639         607 :         break;
    1640             :         case BASEPROPERTY_TEXTCOLOR:
    1641         685 :             if ( bVoid )
    1642             :             {
    1643         611 :                 pWindow->SetControlForeground();
    1644             :             }
    1645             :             else
    1646             :             {
    1647          74 :                 sal_Int32 nColor = 0;
    1648          74 :                 if ( Value >>= nColor )
    1649             :                 {
    1650          74 :                     Color aColor( nColor );
    1651          74 :                     pWindow->SetTextColor( aColor );
    1652          74 :                     pWindow->SetControlForeground( aColor );
    1653             :                 }
    1654             :             }
    1655         685 :         break;
    1656             :         case BASEPROPERTY_TEXTLINECOLOR:
    1657         649 :             if ( bVoid )
    1658             :             {
    1659         649 :                 pWindow->SetTextLineColor();
    1660             :             }
    1661             :             else
    1662             :             {
    1663           0 :                 sal_Int32 nColor = 0;
    1664           0 :                 if ( Value >>= nColor )
    1665             :                 {
    1666           0 :                     Color aColor( nColor );
    1667           0 :                     pWindow->SetTextLineColor( aColor );
    1668             :                 }
    1669             :             }
    1670         649 :         break;
    1671             :         case BASEPROPERTY_FILLCOLOR:
    1672           2 :             if ( bVoid )
    1673           2 :                 pWindow->SetFillColor();
    1674             :             else
    1675             :             {
    1676           0 :                 sal_Int32 nColor = 0;
    1677           0 :                 if ( Value >>= nColor )
    1678             :                 {
    1679           0 :                     Color aColor( nColor );
    1680           0 :                     pWindow->SetFillColor( aColor );
    1681             :                 }
    1682             :             }
    1683           2 :         break;
    1684             :         case BASEPROPERTY_LINECOLOR:
    1685           0 :             if ( bVoid )
    1686           0 :                 pWindow->SetLineColor();
    1687             :             else
    1688             :             {
    1689           0 :                 sal_Int32 nColor = 0;
    1690           0 :                 if ( Value >>= nColor )
    1691             :                 {
    1692           0 :                     Color aColor( nColor );
    1693           0 :                     pWindow->SetLineColor( aColor );
    1694             :                 }
    1695             :             }
    1696           0 :         break;
    1697             :         case BASEPROPERTY_BORDER:
    1698             :         {
    1699         545 :             WinBits nStyle = pWindow->GetStyle();
    1700         545 :             sal_uInt16 nTmp = 0;
    1701         545 :             Value >>= nTmp;
    1702         545 :             WindowBorderStyle nBorder = static_cast<WindowBorderStyle>(nTmp);
    1703         545 :             if ( !bool(nBorder) )
    1704             :             {
    1705          24 :                 pWindow->SetStyle( nStyle & ~WB_BORDER );
    1706             :             }
    1707             :             else
    1708             :             {
    1709         521 :                 pWindow->SetStyle( nStyle | WB_BORDER );
    1710         521 :                 pWindow->SetBorderStyle( nBorder );
    1711             :             }
    1712             :         }
    1713         545 :         break;
    1714             :         case BASEPROPERTY_TABSTOP:
    1715             :         {
    1716         718 :             WinBits nStyle = pWindow->GetStyle() & ~WB_TABSTOP;
    1717         718 :             if ( !bVoid )
    1718             :             {
    1719          12 :                 bool bTab = false;
    1720          12 :                 Value >>= bTab;
    1721          12 :                 if ( bTab )
    1722          12 :                     nStyle |= WB_TABSTOP;
    1723             :                 else
    1724           0 :                     nStyle |= WB_NOTABSTOP;
    1725             :             }
    1726         718 :             pWindow->SetStyle( nStyle );
    1727             :         }
    1728         718 :         break;
    1729             :         case BASEPROPERTY_VERTICALALIGN:
    1730             :         {
    1731         529 :             VerticalAlignment eAlign = VerticalAlignment_MAKE_FIXED_SIZE;
    1732         529 :             WinBits nStyle = pWindow->GetStyle();
    1733         529 :             nStyle &= ~(WB_TOP|WB_VCENTER|WB_BOTTOM);
    1734         529 :             if ( !bVoid )
    1735          60 :                 Value >>= eAlign;
    1736         529 :             switch ( eAlign )
    1737             :             {
    1738             :             case VerticalAlignment_TOP:
    1739           0 :                 nStyle |= WB_TOP;
    1740           0 :                 break;
    1741             :             case VerticalAlignment_MIDDLE:
    1742          60 :                 nStyle |= WB_VCENTER;
    1743          60 :                 break;
    1744             :             case VerticalAlignment_BOTTOM:
    1745           0 :                 nStyle |= WB_BOTTOM;
    1746           0 :                 break;
    1747             :             default: ; // for warning free code, MAKE_FIXED_SIZE
    1748             :             }
    1749         529 :             pWindow->SetStyle( nStyle );
    1750             :         }
    1751         529 :         break;
    1752             :         case BASEPROPERTY_ALIGN:
    1753             :         {
    1754         615 :             sal_Int16 nAlign = PROPERTY_ALIGN_LEFT;
    1755         615 :             switch ( eWinType )
    1756             :             {
    1757             :                 case WINDOW_COMBOBOX:
    1758             :                 case WINDOW_BUTTON:
    1759             :                 case WINDOW_PUSHBUTTON:
    1760             :                 case WINDOW_OKBUTTON:
    1761             :                 case WINDOW_CANCELBUTTON:
    1762             :                 case WINDOW_HELPBUTTON:
    1763         137 :                     nAlign = PROPERTY_ALIGN_CENTER;
    1764             :                     // no break here!
    1765             :                 case WINDOW_FIXEDTEXT:
    1766             :                 case WINDOW_EDIT:
    1767             :                 case WINDOW_MULTILINEEDIT:
    1768             :                 case WINDOW_CHECKBOX:
    1769             :                 case WINDOW_RADIOBUTTON:
    1770             :                 case WINDOW_LISTBOX:
    1771             :                 {
    1772         395 :                     WinBits nStyle = pWindow->GetStyle();
    1773         395 :                     nStyle &= ~(WB_LEFT|WB_CENTER|WB_RIGHT);
    1774         395 :                     if ( !bVoid )
    1775         395 :                         Value >>= nAlign;
    1776         395 :                     if ( nAlign == PROPERTY_ALIGN_LEFT )
    1777         254 :                         nStyle |= WB_LEFT;
    1778         141 :                     else if ( nAlign == PROPERTY_ALIGN_CENTER )
    1779         141 :                         nStyle |= WB_CENTER;
    1780             :                     else
    1781           0 :                         nStyle |= WB_RIGHT;
    1782         395 :                     pWindow->SetStyle( nStyle );
    1783             :                 }
    1784         395 :                 break;
    1785             :             }
    1786             :         }
    1787         615 :         break;
    1788             :         case BASEPROPERTY_MULTILINE:
    1789             :         {
    1790         357 :             if  (  ( eWinType == WINDOW_FIXEDTEXT )
    1791         353 :                 || ( eWinType == WINDOW_CHECKBOX )
    1792         311 :                 || ( eWinType == WINDOW_RADIOBUTTON )
    1793         269 :                 || ( eWinType == WINDOW_BUTTON )
    1794         269 :                 || ( eWinType == WINDOW_PUSHBUTTON )
    1795         178 :                 || ( eWinType == WINDOW_OKBUTTON )
    1796         178 :                 || ( eWinType == WINDOW_CANCELBUTTON )
    1797         178 :                 || ( eWinType == WINDOW_HELPBUTTON )
    1798             :                 )
    1799             :             {
    1800         179 :                 WinBits nStyle = pWindow->GetStyle();
    1801         179 :                 bool bMulti = false;
    1802         179 :                 Value >>= bMulti;
    1803         179 :                 if ( bMulti )
    1804          42 :                     nStyle |= WB_WORDBREAK;
    1805             :                 else
    1806         137 :                     nStyle &= ~WB_WORDBREAK;
    1807         179 :                 pWindow->SetStyle( nStyle );
    1808             :             }
    1809             :         }
    1810         357 :         break;
    1811             :         case BASEPROPERTY_ORIENTATION:
    1812             :         {
    1813           0 :             switch ( eWinType )
    1814             :             {
    1815             :                 case WINDOW_FIXEDLINE:
    1816             :                 {
    1817           0 :                     sal_Int32 nOrientation = 0;
    1818           0 :                     if ( Value >>= nOrientation )
    1819             :                     {
    1820           0 :                         WinBits nStyle = pWindow->GetStyle();
    1821           0 :                         nStyle &= ~(WB_HORZ|WB_VERT);
    1822           0 :                         if ( nOrientation == 0 )
    1823           0 :                             nStyle |= WB_HORZ;
    1824             :                         else
    1825           0 :                             nStyle |= WB_VERT;
    1826             : 
    1827           0 :                         pWindow->SetStyle( nStyle );
    1828             :                     }
    1829             :                 }
    1830           0 :                 break;
    1831             :             }
    1832             :         }
    1833           0 :         break;
    1834             :         case BASEPROPERTY_AUTOMNEMONICS:
    1835             :         {
    1836           0 :             bool bAutoMnemonics = false;
    1837           0 :             Value >>= bAutoMnemonics;
    1838           0 :             AllSettings aSettings = pWindow->GetSettings();
    1839           0 :             StyleSettings aStyleSettings = aSettings.GetStyleSettings();
    1840           0 :             if ( aStyleSettings.GetAutoMnemonic() != bAutoMnemonics )
    1841             :             {
    1842           0 :                 aStyleSettings.SetAutoMnemonic( bAutoMnemonics );
    1843           0 :                 aSettings.SetStyleSettings( aStyleSettings );
    1844           0 :                 pWindow->SetSettings( aSettings );
    1845           0 :             }
    1846             :         }
    1847           0 :         break;
    1848             :         case BASEPROPERTY_MOUSETRANSPARENT:
    1849             :         {
    1850           0 :             bool bMouseTransparent = false;
    1851           0 :             Value >>= bMouseTransparent;
    1852           0 :             pWindow->SetMouseTransparent( bMouseTransparent );
    1853             :         }
    1854           0 :         break;
    1855             :         case BASEPROPERTY_PAINTTRANSPARENT:
    1856             :         {
    1857           2 :             bool bPaintTransparent = false;
    1858           2 :             Value >>= bPaintTransparent;
    1859           2 :             pWindow->SetPaintTransparent( bPaintTransparent );
    1860             : //                pWindow->SetBackground();
    1861             :         }
    1862           2 :         break;
    1863             : 
    1864             :         case BASEPROPERTY_REPEAT:
    1865             :         {
    1866         321 :             bool bRepeat( false );
    1867         321 :             Value >>= bRepeat;
    1868             : 
    1869         321 :             WinBits nStyle = pWindow->GetStyle();
    1870         321 :             if ( bRepeat )
    1871          86 :                 nStyle |= WB_REPEAT;
    1872             :             else
    1873         235 :                 nStyle &= ~WB_REPEAT;
    1874         321 :             pWindow->SetStyle( nStyle );
    1875             :         }
    1876         321 :         break;
    1877             : 
    1878             :         case BASEPROPERTY_REPEAT_DELAY:
    1879             :         {
    1880         376 :             sal_Int32 nRepeatDelay = 0;
    1881         376 :             if ( Value >>= nRepeatDelay )
    1882             :             {
    1883         376 :                 AllSettings aSettings = pWindow->GetSettings();
    1884         752 :                 MouseSettings aMouseSettings = aSettings.GetMouseSettings();
    1885             : 
    1886         376 :                 aMouseSettings.SetButtonRepeat( nRepeatDelay );
    1887         376 :                 aSettings.SetMouseSettings( aMouseSettings );
    1888             : 
    1889         752 :                 pWindow->SetSettings( aSettings, true );
    1890             :             }
    1891             :         }
    1892         376 :         break;
    1893             : 
    1894             :         case BASEPROPERTY_SYMBOL_COLOR:
    1895           4 :             ::toolkit::setColorSettings( pWindow, Value, &StyleSettings::SetButtonTextColor, &StyleSettings::GetButtonTextColor );
    1896           4 :             break;
    1897             : 
    1898             :         case BASEPROPERTY_BORDERCOLOR:
    1899         509 :             ::toolkit::setColorSettings( pWindow, Value, &StyleSettings::SetMonoColor, &StyleSettings::GetMonoColor);
    1900         509 :             break;
    1901             :         case BASEPROPERTY_DEFAULTCONTROL:
    1902             :         {
    1903         986 :             OUString aName;
    1904         986 :             Value >>= aName;
    1905         986 :             break;
    1906             :         }
    1907       56715 :     }
    1908             : }
    1909             : 
    1910         104 : ::com::sun::star::uno::Any VCLXWindow::getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    1911             : {
    1912         104 :     SolarMutexGuard aGuard;
    1913             : 
    1914         104 :     ::com::sun::star::uno::Any aProp;
    1915         104 :     if ( GetWindow() )
    1916             :     {
    1917         104 :         WindowType eWinType = GetWindow()->GetType();
    1918         104 :         sal_uInt16 nPropType = GetPropertyId( PropertyName );
    1919         104 :         switch ( nPropType )
    1920             :         {
    1921             :             case BASEPROPERTY_REFERENCE_DEVICE:
    1922             :             {
    1923           0 :                 Control* pControl = dynamic_cast< Control* >( GetWindow() );
    1924             :                 OSL_ENSURE( pControl, "VCLXWindow::setProperty( RefDevice ): need a Control for this!" );
    1925           0 :                 if ( !pControl )
    1926           0 :                     break;
    1927             : 
    1928           0 :                 VCLXDevice* pDevice = new VCLXDevice;
    1929           0 :                 pDevice->SetOutputDevice( pControl->GetReferenceDevice() );
    1930           0 :                 aProp <<= Reference< XDevice >( pDevice );
    1931             :             }
    1932           0 :             break;
    1933             : 
    1934             :             case BASEPROPERTY_CONTEXT_WRITING_MODE:
    1935           0 :                 aProp <<= mpImpl->mnContextWritingMode;
    1936           0 :                 break;
    1937             : 
    1938             :             case BASEPROPERTY_WRITING_MODE:
    1939           0 :                 aProp <<= mpImpl->mnWritingMode;
    1940           0 :                 break;
    1941             : 
    1942             :             case BASEPROPERTY_MOUSE_WHEEL_BEHAVIOUR:
    1943             :             {
    1944           0 :                 sal_uInt16 nVclBehavior = GetWindow()->GetSettings().GetMouseSettings().GetWheelBehavior();
    1945           0 :                 sal_Int16 nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY;
    1946           0 :                 switch ( nVclBehavior )
    1947             :                 {
    1948           0 :                 case MOUSE_WHEEL_DISABLE:       nBehavior = MouseWheelBehavior::SCROLL_DISABLED;    break;
    1949           0 :                 case MOUSE_WHEEL_FOCUS_ONLY:    nBehavior = MouseWheelBehavior::SCROLL_FOCUS_ONLY;  break;
    1950           0 :                 case MOUSE_WHEEL_ALWAYS:        nBehavior = MouseWheelBehavior::SCROLL_ALWAYS;      break;
    1951             :                 default:
    1952             :                     OSL_FAIL( "VCLXWindow::getProperty( 'MouseWheelBehavior' ): illegal VCL value!" );
    1953             :                 }
    1954           0 :                 aProp <<= nBehavior;
    1955             :             }
    1956           0 :             break;
    1957             : 
    1958             :             case BASEPROPERTY_NATIVE_WIDGET_LOOK:
    1959           0 :                 aProp <<= GetWindow()->IsNativeWidgetEnabled();
    1960           0 :                 break;
    1961             : 
    1962             :             case BASEPROPERTY_ENABLED:
    1963           0 :                 aProp <<= GetWindow()->IsEnabled();
    1964           0 :                 break;
    1965             : 
    1966             :             case BASEPROPERTY_ENABLEVISIBLE:
    1967           0 :                 aProp <<= mpImpl->isEnableVisible();
    1968           0 :                 break;
    1969             : 
    1970             :             case BASEPROPERTY_HIGHCONTRASTMODE:
    1971           0 :                 aProp <<= GetWindow()->GetSettings().GetStyleSettings().GetHighContrastMode();
    1972           0 :                 break;
    1973             : 
    1974             :             case BASEPROPERTY_TEXT:
    1975             :             case BASEPROPERTY_LABEL:
    1976             :             case BASEPROPERTY_TITLE:
    1977             :             {
    1978         104 :                 OUString aText = GetWindow()->GetText();
    1979         104 :                 aProp <<= aText;
    1980             :             }
    1981         104 :             break;
    1982             :             case BASEPROPERTY_ACCESSIBLENAME:
    1983             :             {
    1984           0 :                 OUString aText = GetWindow()->GetAccessibleName();
    1985           0 :                 aProp <<= aText;
    1986             :             }
    1987           0 :             break;
    1988             :             case BASEPROPERTY_HELPTEXT:
    1989             :             {
    1990           0 :                 OUString aText = GetWindow()->GetQuickHelpText();
    1991           0 :                 aProp <<= aText;
    1992             :             }
    1993           0 :             break;
    1994             :             case BASEPROPERTY_HELPURL:
    1995             :             {
    1996           0 :                 OUString aHelpId( OStringToOUString( GetWindow()->GetHelpId(), RTL_TEXTENCODING_UTF8 ) );
    1997           0 :                 aProp <<= OUString( aHelpId );
    1998             :             }
    1999           0 :             break;
    2000             :             case BASEPROPERTY_FONTDESCRIPTOR:
    2001             :             {
    2002           0 :                 vcl::Font aFont = GetWindow()->GetControlFont();
    2003           0 :                 ::com::sun::star::awt::FontDescriptor aFD = VCLUnoHelper::CreateFontDescriptor( aFont );
    2004           0 :                 aProp <<= aFD;
    2005             :             }
    2006           0 :             break;
    2007             :             case BASEPROPERTY_BACKGROUNDCOLOR:
    2008           0 :                 aProp <<= (sal_Int32) GetWindow()->GetControlBackground().GetColor();
    2009           0 :             break;
    2010             :             case BASEPROPERTY_DISPLAYBACKGROUNDCOLOR:
    2011           0 :                 aProp <<= (sal_Int32) GetWindow()->GetDisplayBackground().GetColor().GetColor();
    2012           0 :             break;
    2013             :             case BASEPROPERTY_FONTRELIEF:
    2014           0 :                 aProp <<= (sal_Int16) GetWindow()->GetControlFont().GetRelief();
    2015           0 :             break;
    2016             :             case BASEPROPERTY_FONTEMPHASISMARK:
    2017           0 :                 aProp <<= (sal_Int16) GetWindow()->GetControlFont().GetEmphasisMark();
    2018           0 :             break;
    2019             :             case BASEPROPERTY_TEXTCOLOR:
    2020           0 :                 aProp <<= (sal_Int32) GetWindow()->GetControlForeground().GetColor();
    2021           0 :             break;
    2022             :             case BASEPROPERTY_TEXTLINECOLOR:
    2023           0 :                 aProp <<= (sal_Int32) GetWindow()->GetTextLineColor().GetColor();
    2024           0 :             break;
    2025             :             case BASEPROPERTY_FILLCOLOR:
    2026           0 :                 aProp <<= (sal_Int32) GetWindow()->GetFillColor().GetColor();
    2027           0 :             break;
    2028             :             case BASEPROPERTY_LINECOLOR:
    2029           0 :                 aProp <<= (sal_Int32) GetWindow()->GetLineColor().GetColor();
    2030           0 :             break;
    2031             :             case BASEPROPERTY_BORDER:
    2032             :             {
    2033           0 :                 WindowBorderStyle nBorder = WindowBorderStyle::NONE;
    2034           0 :                 if ( GetWindow()->GetStyle() & WB_BORDER )
    2035           0 :                     nBorder = GetWindow()->GetBorderStyle();
    2036           0 :                 aProp <<= static_cast<sal_uInt16>(nBorder);
    2037             :             }
    2038           0 :             break;
    2039             :             case BASEPROPERTY_TABSTOP:
    2040           0 :                 aProp <<= ( GetWindow()->GetStyle() & WB_TABSTOP ) != 0;
    2041           0 :             break;
    2042             :             case BASEPROPERTY_VERTICALALIGN:
    2043             :             {
    2044           0 :                 WinBits nStyle = GetWindow()->GetStyle();
    2045           0 :                 if ( nStyle & WB_TOP )
    2046           0 :                     aProp <<= VerticalAlignment_TOP;
    2047           0 :                 else if ( nStyle & WB_VCENTER )
    2048           0 :                     aProp <<= VerticalAlignment_MIDDLE;
    2049           0 :                 else if ( nStyle & WB_BOTTOM )
    2050           0 :                     aProp <<= VerticalAlignment_BOTTOM;
    2051             :             }
    2052           0 :             break;
    2053             :             case BASEPROPERTY_ALIGN:
    2054             :             {
    2055           0 :                 switch ( eWinType )
    2056             :                 {
    2057             :                     case WINDOW_FIXEDTEXT:
    2058             :                     case WINDOW_EDIT:
    2059             :                     case WINDOW_MULTILINEEDIT:
    2060             :                     case WINDOW_CHECKBOX:
    2061             :                     case WINDOW_RADIOBUTTON:
    2062             :                     case WINDOW_LISTBOX:
    2063             :                     case WINDOW_COMBOBOX:
    2064             :                     case WINDOW_BUTTON:
    2065             :                     case WINDOW_PUSHBUTTON:
    2066             :                     case WINDOW_OKBUTTON:
    2067             :                     case WINDOW_CANCELBUTTON:
    2068             :                     case WINDOW_HELPBUTTON:
    2069             :                     {
    2070           0 :                         WinBits nStyle = GetWindow()->GetStyle();
    2071           0 :                         if ( nStyle & WB_LEFT )
    2072           0 :                             aProp <<= (sal_Int16) PROPERTY_ALIGN_LEFT;
    2073           0 :                         else if ( nStyle & WB_CENTER )
    2074           0 :                             aProp <<= (sal_Int16) PROPERTY_ALIGN_CENTER;
    2075           0 :                         else if ( nStyle & WB_RIGHT )
    2076           0 :                             aProp <<= (sal_Int16) PROPERTY_ALIGN_RIGHT;
    2077             :                     }
    2078           0 :                     break;
    2079             :                 }
    2080             :             }
    2081           0 :             break;
    2082             :             case BASEPROPERTY_MULTILINE:
    2083             :             {
    2084           0 :                 if  (  ( eWinType == WINDOW_FIXEDTEXT )
    2085           0 :                     || ( eWinType == WINDOW_CHECKBOX )
    2086           0 :                     || ( eWinType == WINDOW_RADIOBUTTON )
    2087           0 :                     || ( eWinType == WINDOW_BUTTON )
    2088           0 :                     || ( eWinType == WINDOW_PUSHBUTTON )
    2089           0 :                     || ( eWinType == WINDOW_OKBUTTON )
    2090           0 :                     || ( eWinType == WINDOW_CANCELBUTTON )
    2091           0 :                     || ( eWinType == WINDOW_HELPBUTTON )
    2092             :                     )
    2093           0 :                     aProp <<= ( GetWindow()->GetStyle() & WB_WORDBREAK ) != 0;
    2094             :             }
    2095           0 :             break;
    2096             :             case BASEPROPERTY_AUTOMNEMONICS:
    2097             :             {
    2098           0 :                 bool bAutoMnemonics = GetWindow()->GetSettings().GetStyleSettings().GetAutoMnemonic();
    2099           0 :                 aProp <<= bAutoMnemonics;
    2100             :             }
    2101           0 :             break;
    2102             :             case BASEPROPERTY_MOUSETRANSPARENT:
    2103             :             {
    2104           0 :                 bool bMouseTransparent = GetWindow()->IsMouseTransparent();
    2105           0 :                 aProp <<= bMouseTransparent;
    2106             :             }
    2107           0 :             break;
    2108             :             case BASEPROPERTY_PAINTTRANSPARENT:
    2109             :             {
    2110           0 :                 bool bPaintTransparent = GetWindow()->IsPaintTransparent();
    2111           0 :                 aProp <<= bPaintTransparent;
    2112             :             }
    2113           0 :             break;
    2114             : 
    2115             :             case BASEPROPERTY_REPEAT:
    2116           0 :                 aProp <<= ( 0 != ( GetWindow()->GetStyle() & WB_REPEAT ) );
    2117           0 :                 break;
    2118             : 
    2119             :             case BASEPROPERTY_REPEAT_DELAY:
    2120             :             {
    2121           0 :                 sal_Int32 nButtonRepeat = GetWindow()->GetSettings().GetMouseSettings().GetButtonRepeat();
    2122           0 :                 aProp <<= (sal_Int32)nButtonRepeat;
    2123             :             }
    2124           0 :             break;
    2125             : 
    2126             :             case BASEPROPERTY_SYMBOL_COLOR:
    2127           0 :                 aProp <<= (sal_Int32)GetWindow()->GetSettings().GetStyleSettings().GetButtonTextColor().GetColor();
    2128           0 :                 break;
    2129             : 
    2130             :             case BASEPROPERTY_BORDERCOLOR:
    2131           0 :                 aProp <<= (sal_Int32)GetWindow()->GetSettings().GetStyleSettings().GetMonoColor().GetColor();
    2132           0 :                 break;
    2133             :         }
    2134             :     }
    2135         104 :     return aProp;
    2136             : }
    2137             : 
    2138             : 
    2139             : // ::com::sun::star::awt::XLayoutConstrains
    2140           0 : ::com::sun::star::awt::Size VCLXWindow::getMinimumSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2141             : {
    2142           0 :     SolarMutexGuard aGuard;
    2143             : 
    2144             :     // Use this method only for those components which can be created through
    2145             :     // ::com::sun::star::awt::Toolkit , but do not have an interface
    2146             : 
    2147           0 :     Size aSz;
    2148           0 :     if ( GetWindow() )
    2149             :     {
    2150           0 :         WindowType nWinType = GetWindow()->GetType();
    2151           0 :         switch ( nWinType )
    2152             :         {
    2153             :             case WINDOW_CONTROL:
    2154           0 :                 aSz.Width() = GetWindow()->GetTextWidth( GetWindow()->GetText() )+2*12;
    2155           0 :                 aSz.Height() = GetWindow()->GetTextHeight()+2*6;
    2156           0 :             break;
    2157             : 
    2158             :             case WINDOW_PATTERNBOX:
    2159             :             case WINDOW_NUMERICBOX:
    2160             :             case WINDOW_METRICBOX:
    2161             :             case WINDOW_CURRENCYBOX:
    2162             :             case WINDOW_DATEBOX:
    2163             :             case WINDOW_TIMEBOX:
    2164             :             case WINDOW_LONGCURRENCYBOX:
    2165           0 :                 aSz.Width() = GetWindow()->GetTextWidth( GetWindow()->GetText() )+2*2;
    2166           0 :                 aSz.Height() = GetWindow()->GetTextHeight()+2*2;
    2167           0 :             break;
    2168             :             case WINDOW_SCROLLBARBOX:
    2169           0 :                 return VCLXScrollBar::implGetMinimumSize( GetWindow() );
    2170             :             default:
    2171           0 :                 aSz = GetWindow()->get_preferred_size();
    2172             :         }
    2173             :     }
    2174             : 
    2175           0 :     return ::com::sun::star::awt::Size( aSz.Width(), aSz.Height() );
    2176             : }
    2177             : 
    2178           0 : ::com::sun::star::awt::Size VCLXWindow::getPreferredSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2179             : {
    2180           0 :     return getMinimumSize();
    2181             : }
    2182             : 
    2183           0 : ::com::sun::star::awt::Size VCLXWindow::calcAdjustedSize( const ::com::sun::star::awt::Size& rNewSize ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2184             : {
    2185           0 :     SolarMutexGuard aGuard;
    2186             : 
    2187           0 :     ::com::sun::star::awt::Size aNewSize( rNewSize );
    2188           0 :     ::com::sun::star::awt::Size aMinSize = getMinimumSize();
    2189             : 
    2190           0 :     if ( aNewSize.Width < aMinSize.Width )
    2191           0 :         aNewSize.Width = aMinSize.Width;
    2192           0 :     if ( aNewSize.Height < aMinSize.Height )
    2193           0 :         aNewSize.Height = aMinSize.Height;
    2194             : 
    2195           0 :     return aNewSize;
    2196             : }
    2197             : 
    2198             : 
    2199             : // ::com::sun::star::awt::XView
    2200        6639 : sal_Bool VCLXWindow::setGraphics( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics >& rxDevice ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2201             : {
    2202        6639 :     SolarMutexGuard aGuard;
    2203             : 
    2204        6639 :     if ( VCLUnoHelper::GetOutputDevice( rxDevice ) )
    2205        2959 :         mpImpl->mxViewGraphics = rxDevice;
    2206             :     else
    2207        3680 :         mpImpl->mxViewGraphics = NULL;
    2208             : 
    2209        6639 :     return mpImpl->mxViewGraphics.is();
    2210             : }
    2211             : 
    2212         117 : ::com::sun::star::uno::Reference< ::com::sun::star::awt::XGraphics > VCLXWindow::getGraphics(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2213             : {
    2214         117 :     SolarMutexGuard aGuard;
    2215             : 
    2216         117 :     return mpImpl->mxViewGraphics;
    2217             : }
    2218             : 
    2219           0 : ::com::sun::star::awt::Size VCLXWindow::getSize(  ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2220             : {
    2221           0 :     SolarMutexGuard aGuard;
    2222             : 
    2223           0 :     Size aSz;
    2224           0 :     if ( GetWindow() )
    2225           0 :         aSz = GetWindow()->GetSizePixel();
    2226           0 :     return ::com::sun::star::awt::Size( aSz.Width(), aSz.Height() );
    2227             : }
    2228             : 
    2229        2524 : void VCLXWindow::draw( sal_Int32 nX, sal_Int32 nY ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2230             : {
    2231        2524 :     SolarMutexGuard aGuard;
    2232             : 
    2233        2524 :     vcl::Window* pWindow = GetWindow();
    2234        2524 :     if ( !pWindow )
    2235           0 :         return;
    2236             : 
    2237        2524 :     if ( isDesignMode() || mpImpl->isEnableVisible() )
    2238             :     {
    2239        2524 :         OutputDevice* pDev = VCLUnoHelper::GetOutputDevice( mpImpl->mxViewGraphics );
    2240        2524 :         if (!pDev)
    2241           0 :             pDev = pWindow->GetParent();
    2242        2524 :         TabPage* pTabPage = dynamic_cast< TabPage* >( pWindow );
    2243        2524 :         if ( pTabPage )
    2244             :         {
    2245           0 :             Point aPos( nX, nY );
    2246           0 :             Size  aSize = pWindow->GetSizePixel();
    2247             : 
    2248           0 :             aPos  = pDev->PixelToLogic( aPos );
    2249           0 :             aSize = pDev->PixelToLogic( aSize );
    2250             : 
    2251           0 :             pTabPage->Draw( pDev, aPos, aSize, 0 );
    2252           0 :             return;
    2253             :         }
    2254             : 
    2255        2524 :         Point aPos( nX, nY );
    2256             : 
    2257        2524 :         if ( pWindow->GetParent() && !pWindow->IsSystemWindow() && ( pWindow->GetParent() == pDev ) )
    2258             :         {
    2259             :             // #i40647# don't draw here if this is a recursive call
    2260             :             // sometimes this is called recursively, because the Update call on the parent
    2261             :             // (strangely) triggers another paint. Prevent a stack overflow here
    2262             :             // Yes, this is only fixing symptoms for the moment ....
    2263             :             // #i40647# / 2005-01-18 / frank.schoenheit@sun.com
    2264           0 :             if ( !mpImpl->getDrawingOntoParent_ref() )
    2265             :             {
    2266           0 :                 ::comphelper::FlagGuard aDrawingflagGuard( mpImpl->getDrawingOntoParent_ref() );
    2267             : 
    2268           0 :                 bool bWasVisible = pWindow->IsVisible();
    2269           0 :                 Point aOldPos( pWindow->GetPosPixel() );
    2270             : 
    2271           0 :                 if ( bWasVisible && aOldPos == aPos )
    2272             :                 {
    2273           0 :                     pWindow->Update();
    2274           0 :                     return;
    2275             :                 }
    2276             : 
    2277           0 :                 pWindow->SetPosPixel( aPos );
    2278             : 
    2279             :                 // Update parent first to avoid painting the parent upon the update
    2280             :                 // of this window, as it may otherwise cause the parent
    2281             :                 // to hide this window again
    2282           0 :                 if( pWindow->GetParent() )
    2283           0 :                     pWindow->GetParent()->Update();
    2284             : 
    2285           0 :                 pWindow->Show();
    2286           0 :                 pWindow->Update();
    2287           0 :                 pWindow->SetParentUpdateMode( false );
    2288           0 :                 pWindow->Hide();
    2289           0 :                 pWindow->SetParentUpdateMode( true );
    2290             : 
    2291           0 :                 pWindow->SetPosPixel( aOldPos );
    2292           0 :                 if ( bWasVisible )
    2293           0 :                     pWindow->Show( true );
    2294             :             }
    2295             :         }
    2296        2524 :         else if ( pDev )
    2297             :         {
    2298        2524 :             Size aSz = pWindow->GetSizePixel();
    2299        2524 :             aSz = pDev->PixelToLogic( aSz );
    2300        2524 :             Point aP = pDev->PixelToLogic( aPos );
    2301             : 
    2302        2524 :             vcl::PDFExtOutDevData* pPDFExport   = dynamic_cast<vcl::PDFExtOutDevData*>(pDev->GetExtOutDevData());
    2303        2524 :             bool bDrawSimple =    ( pDev->GetOutDevType() == OUTDEV_PRINTER )
    2304        2524 :                                || ( pDev->GetOutDevViewType() == OUTDEV_VIEWTYPE_PRINTPREVIEW )
    2305        5048 :                                || ( pPDFExport != NULL );
    2306        2524 :             if ( bDrawSimple )
    2307             :             {
    2308           0 :                 pWindow->Draw( pDev, aP, aSz, WINDOW_DRAW_NOCONTROLS );
    2309             :             }
    2310             :             else
    2311             :             {
    2312        2524 :                 bool bOldNW =pWindow->IsNativeWidgetEnabled();
    2313        2524 :                 if( bOldNW )
    2314         944 :                     pWindow->EnableNativeWidget(false);
    2315        2524 :                 pWindow->PaintToDevice( pDev, aP, aSz );
    2316        2524 :                 if( bOldNW )
    2317         944 :                     pWindow->EnableNativeWidget(true);
    2318             :             }
    2319             :         }
    2320        2524 :     }
    2321             : }
    2322             : 
    2323       15696 : void VCLXWindow::setZoom( float fZoomX, float /*fZoomY*/ ) throw(::com::sun::star::uno::RuntimeException, std::exception)
    2324             : {
    2325       15696 :     SolarMutexGuard aGuard;
    2326             : 
    2327       15696 :     if ( GetWindow() )
    2328             :     {
    2329             :         // Fraction::Fraction takes a double, but we have a float only.
    2330             :         // The implicit conversion from float to double can result in a precision loss, i.e. 1.2 is converted to
    2331             :         // 1.200000000047something. To prevent this, we convert explicitly to double, and round it.
    2332       15696 :         double nZoom( fZoomX );
    2333       15696 :         nZoom = ::rtl::math::round( nZoom, 4 );
    2334       15696 :         GetWindow()->SetZoom( Fraction( nZoom ) );
    2335       15696 :     }
    2336       15696 : }
    2337             : 
    2338             : // ::com::sun::star::lang::XEventListener
    2339         840 : void SAL_CALL VCLXWindow::disposing( const ::com::sun::star::lang::EventObject& _rSource ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2340             : {
    2341         840 :     SolarMutexGuard aGuard;
    2342             : 
    2343             :     // check if it comes from our AccessibleContext
    2344        1680 :     uno::Reference< uno::XInterface > aAC( mpImpl->mxAccessibleContext, uno::UNO_QUERY );
    2345        1680 :     uno::Reference< uno::XInterface > xSource( _rSource.Source, uno::UNO_QUERY );
    2346             : 
    2347         840 :     if ( aAC.get() == xSource.get() )
    2348             :     {   // yep, it does
    2349         608 :         mpImpl->mxAccessibleContext = uno::Reference< accessibility::XAccessibleContext >();
    2350         840 :     }
    2351         840 : }
    2352             : 
    2353             : // ::com::sun::star::accessibility::XAccessible
    2354        2346 : ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > VCLXWindow::getAccessibleContext(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2355             : {
    2356             :     using namespace ::com::sun::star;
    2357             : 
    2358        2346 :     SolarMutexGuard aGuard;
    2359             : 
    2360             :     // already disposed
    2361        2346 :     if( ! mpImpl )
    2362           0 :         return uno::Reference< accessibility::XAccessibleContext >();
    2363             : 
    2364        2346 :     if ( !mpImpl->mxAccessibleContext.is() && GetWindow() )
    2365             :     {
    2366         608 :         mpImpl->mxAccessibleContext = CreateAccessibleContext();
    2367             : 
    2368             :         // add as event listener to this component
    2369             :         // in case somebody disposes it, we do not want to have a (though weak) reference to a dead
    2370             :         // object
    2371         608 :         uno::Reference< lang::XComponent > xComp( mpImpl->mxAccessibleContext, uno::UNO_QUERY );
    2372         608 :         if ( xComp.is() )
    2373         608 :             xComp->addEventListener( this );
    2374             :     }
    2375             : 
    2376        2346 :     return mpImpl->mxAccessibleContext;
    2377             : }
    2378             : 
    2379             : // ::com::sun::star::awt::XDockable
    2380       16268 : void SAL_CALL VCLXWindow::addDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2381             : {
    2382       16268 :     SolarMutexGuard aGuard;
    2383             : 
    2384       16268 :     if ( xListener.is() )
    2385       16268 :         mpImpl->getDockableWindowListeners().addInterface( xListener );
    2386             : 
    2387       16268 : }
    2388             : 
    2389           0 : void SAL_CALL VCLXWindow::removeDockableWindowListener( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindowListener >& xListener ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2390             : {
    2391           0 :     SolarMutexGuard aGuard;
    2392             : 
    2393           0 :     mpImpl->getDockableWindowListeners().removeInterface( xListener );
    2394           0 : }
    2395             : 
    2396       16268 : void SAL_CALL VCLXWindow::enableDocking( sal_Bool bEnable ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2397             : {
    2398       16268 :     SolarMutexGuard aGuard;
    2399             : 
    2400       16268 :     vcl::Window* pWindow = GetWindow();
    2401       16268 :     if ( pWindow )
    2402       16268 :         pWindow->EnableDocking( bEnable );
    2403       16268 : }
    2404             : 
    2405       30102 : sal_Bool SAL_CALL VCLXWindow::isFloating(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2406             : {
    2407       30102 :     SolarMutexGuard aGuard;
    2408             : 
    2409       30102 :     vcl::Window* pWindow = GetWindow();
    2410       30102 :     if( pWindow )
    2411       30102 :         return vcl::Window::GetDockingManager()->IsFloating( pWindow );
    2412             :     else
    2413           0 :         return sal_False;
    2414             : }
    2415             : 
    2416       16268 : void SAL_CALL VCLXWindow::setFloatingMode( sal_Bool bFloating ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2417             : {
    2418       16268 :     SolarMutexGuard aGuard;
    2419             : 
    2420       16268 :     vcl::Window* pWindow = GetWindow();
    2421       16268 :     if( pWindow )
    2422       16268 :         vcl::Window::GetDockingManager()->SetFloatingMode( pWindow, bFloating );
    2423       16268 : }
    2424             : 
    2425           0 : sal_Bool SAL_CALL VCLXWindow::isLocked(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2426             : {
    2427           0 :     SolarMutexGuard aGuard;
    2428             : 
    2429           0 :     vcl::Window* pWindow = GetWindow();
    2430           0 :     if( pWindow )
    2431           0 :         return vcl::Window::GetDockingManager()->IsLocked( pWindow );
    2432             :     else
    2433           0 :         return sal_False;
    2434             : }
    2435             : 
    2436           0 : void SAL_CALL VCLXWindow::lock(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2437             : {
    2438           0 :     SolarMutexGuard aGuard;
    2439             : 
    2440           0 :     vcl::Window* pWindow = GetWindow();
    2441           0 :     if( pWindow && !vcl::Window::GetDockingManager()->IsFloating( pWindow ) )
    2442           0 :         vcl::Window::GetDockingManager()->Lock( pWindow );
    2443           0 : }
    2444             : 
    2445           0 : void SAL_CALL VCLXWindow::unlock(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2446             : {
    2447           0 :     SolarMutexGuard aGuard;
    2448             : 
    2449           0 :     vcl::Window* pWindow = GetWindow();
    2450           0 :     if( pWindow && !vcl::Window::GetDockingManager()->IsFloating( pWindow ) )
    2451           0 :         vcl::Window::GetDockingManager()->Unlock( pWindow );
    2452           0 : }
    2453           0 : void SAL_CALL VCLXWindow::startPopupMode( const ::com::sun::star::awt::Rectangle& ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2454             : {
    2455             :     // TODO: remove interface in the next incompatible build
    2456           0 :     SolarMutexGuard aGuard;
    2457             : 
    2458           0 : }
    2459             : 
    2460           0 : sal_Bool SAL_CALL VCLXWindow::isInPopupMode(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2461             : {
    2462             :     // TODO: remove interface in the next incompatible build
    2463           0 :     SolarMutexGuard aGuard;
    2464           0 :     return sal_False;
    2465             : }
    2466             : 
    2467             : 
    2468             : // ::com::sun::star::awt::XWindow2
    2469             : 
    2470       16268 : void SAL_CALL VCLXWindow::setOutputSize( const ::com::sun::star::awt::Size& aSize ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2471             : {
    2472       16268 :     SolarMutexGuard aGuard;
    2473             :     vcl::Window *pWindow;
    2474       16268 :     if( (pWindow = GetWindow()) != NULL )
    2475             :     {
    2476       16268 :         DockingWindow *pDockingWindow = dynamic_cast< DockingWindow* >(pWindow);
    2477       16268 :         if( pDockingWindow )
    2478       16268 :             pDockingWindow->SetOutputSizePixel( VCLSize( aSize ) );
    2479             :         else
    2480           0 :             pWindow->SetOutputSizePixel( VCLSize( aSize ) );
    2481       16268 :     }
    2482       16268 : }
    2483             : 
    2484           0 : ::com::sun::star::awt::Size SAL_CALL VCLXWindow::getOutputSize(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2485             : {
    2486           0 :     SolarMutexGuard aGuard;
    2487             :     vcl::Window *pWindow;
    2488           0 :     if( (pWindow = GetWindow()) != NULL )
    2489             :     {
    2490           0 :         DockingWindow *pDockingWindow = dynamic_cast< DockingWindow* >(pWindow);
    2491           0 :         if( pDockingWindow )
    2492           0 :             return AWTSize( pDockingWindow->GetOutputSizePixel() );
    2493             :         else
    2494           0 :             return AWTSize( pWindow->GetOutputSizePixel() );
    2495             :     }
    2496             :     else
    2497           0 :         return ::com::sun::star::awt::Size();
    2498             : }
    2499             : 
    2500       26256 : sal_Bool SAL_CALL VCLXWindow::isVisible(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2501             : {
    2502       26256 :     SolarMutexGuard aGuard;
    2503       26256 :     if( GetWindow() )
    2504       26256 :         return GetWindow()->IsVisible();
    2505             :     else
    2506           0 :         return sal_False;
    2507             : }
    2508             : 
    2509       27535 : sal_Bool SAL_CALL VCLXWindow::isActive(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2510             : {
    2511       27535 :     SolarMutexGuard aGuard;
    2512       27535 :     if( GetWindow() )
    2513       27535 :         return GetWindow()->IsActive();
    2514             :     else
    2515           0 :         return sal_False;
    2516             : 
    2517             : }
    2518             : 
    2519          50 : sal_Bool SAL_CALL VCLXWindow::isEnabled(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2520             : {
    2521          50 :     SolarMutexGuard aGuard;
    2522          50 :     if( GetWindow() )
    2523          50 :         return GetWindow()->IsEnabled();
    2524             :     else
    2525           0 :         return sal_False;
    2526             : }
    2527             : 
    2528           0 : sal_Bool SAL_CALL VCLXWindow::hasFocus(  ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2529             : {
    2530           0 :     SolarMutexGuard aGuard;
    2531           0 :     if( GetWindow() )
    2532           0 :         return GetWindow()->HasFocus();
    2533             :     else
    2534           0 :         return sal_False;
    2535             : }
    2536             : 
    2537             : // ::com::sun::star::beans::XPropertySetInfo
    2538             : 
    2539             : UnoPropertyArrayHelper *
    2540           0 : VCLXWindow::GetPropHelper()
    2541             : {
    2542           0 :     SolarMutexGuard aGuard;
    2543           0 :     if ( mpImpl->mpPropHelper == NULL )
    2544             :     {
    2545           0 :         std::list< sal_uInt16 > aIDs;
    2546           0 :         GetPropertyIds( aIDs );
    2547           0 :         mpImpl->mpPropHelper = new UnoPropertyArrayHelper( aIDs );
    2548             :     }
    2549           0 :     return mpImpl->mpPropHelper;
    2550             : }
    2551             : 
    2552             : ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL
    2553           0 : VCLXWindow::getProperties() throw (::com::sun::star::uno::RuntimeException, std::exception)
    2554             : {
    2555           0 :     return GetPropHelper()->getProperties();
    2556             : }
    2557             : ::com::sun::star::beans::Property SAL_CALL
    2558           0 : VCLXWindow::getPropertyByName( const OUString& rName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException, std::exception)
    2559             : {
    2560           0 :     return GetPropHelper()->getPropertyByName( rName );
    2561             : }
    2562             : 
    2563             : sal_Bool SAL_CALL
    2564           0 : VCLXWindow::hasPropertyByName( const OUString& rName ) throw (::com::sun::star::uno::RuntimeException, std::exception)
    2565             : {
    2566           0 :     return GetPropHelper()->hasPropertyByName( rName );
    2567             : }
    2568             : 
    2569           0 : Reference< XStyleSettings > SAL_CALL VCLXWindow::getStyleSettings() throw (RuntimeException, std::exception)
    2570             : {
    2571           0 :     return mpImpl->getStyleSettings();
    2572        1227 : }
    2573             : 
    2574             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10