[Libreoffice-commits] core.git: vcl/Library_vcl.mk vcl/source

Chris Sherlock chris.sherlock79 at gmail.com
Thu May 22 15:41:12 PDT 2014


 vcl/Library_vcl.mk               |    2 
 vcl/source/window/event.cxx      |  578 +++++++++++++++++++++++++
 vcl/source/window/mouseevent.cxx |    3 
 vcl/source/window/settings.cxx   |  388 ++++++++++++++++
 vcl/source/window/window.cxx     |  891 ---------------------------------------
 5 files changed, 970 insertions(+), 892 deletions(-)

New commits:
commit 7818974103fcdf16e03354f62a4165eedea4427c
Author: Chris Sherlock <chris.sherlock79 at gmail.com>
Date:   Thu May 22 02:51:15 2014 +1000

    vcl: split window.cxx into event and settings functions
    
    Change-Id: Ic038a1c95721d4e578face5deea0b8d8a4ab7304

diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index e321525..7ea6981 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -101,6 +101,7 @@ $(eval $(call gb_Library_use_externals,vcl,\
 ))
 
 $(eval $(call gb_Library_add_exception_objects,vcl,\
+    vcl/source/window/settings \
     vcl/source/window/resource \
     vcl/source/window/abstdlg \
     vcl/source/window/accel \
@@ -134,6 +135,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/window/mnemonic \
     vcl/source/window/mnemonicengine \
     vcl/source/window/mouseevent \
+    vcl/source/window/event \
     vcl/source/window/msgbox \
     vcl/source/window/popupmenuwindow \
     vcl/source/window/printdlg \
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx
new file mode 100644
index 0000000..66e2d74
--- /dev/null
+++ b/vcl/source/window/event.cxx
@@ -0,0 +1,578 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <vcl/event.hxx>
+#include <vcl/window.hxx>
+#include <vcl/dockwin.hxx>
+#include <vcl/layout.hxx>
+
+#include <window.h>
+#include <svdata.hxx>
+#include <salframe.hxx>
+
+#include <com/sun/star/awt/MouseEvent.hpp>
+#include <com/sun/star/awt/KeyModifier.hpp>
+#include <com/sun/star/awt/MouseButton.hpp>
+
+void Window::DataChanged( const DataChangedEvent& )
+{
+}
+
+void Window::NotifyAllChildren( DataChangedEvent& rDCEvt )
+{
+
+    DataChanged( rDCEvt );
+
+    Window* pChild = mpWindowImpl->mpFirstChild;
+    while ( pChild )
+    {
+        pChild->NotifyAllChildren( rDCEvt );
+        pChild = pChild->mpWindowImpl->mpNext;
+    }
+}
+
+bool Window::PreNotify( NotifyEvent& rNEvt )
+{
+    bool bDone = false;
+    if ( mpWindowImpl->mpParent && !ImplIsOverlapWindow() )
+        bDone = mpWindowImpl->mpParent->PreNotify( rNEvt );
+
+    if ( !bDone )
+    {
+        if( rNEvt.GetType() == EVENT_GETFOCUS )
+        {
+            bool bCompoundFocusChanged = false;
+            if ( mpWindowImpl->mbCompoundControl && !mpWindowImpl->mbCompoundControlHasFocus && HasChildPathFocus() )
+            {
+                mpWindowImpl->mbCompoundControlHasFocus = true;
+                bCompoundFocusChanged = true;
+            }
+
+            if ( bCompoundFocusChanged || ( rNEvt.GetWindow() == this ) )
+                ImplCallEventListeners( VCLEVENT_WINDOW_GETFOCUS );
+        }
+        else if( rNEvt.GetType() == EVENT_LOSEFOCUS )
+        {
+            bool bCompoundFocusChanged = false;
+            if ( mpWindowImpl->mbCompoundControl && mpWindowImpl->mbCompoundControlHasFocus && !HasChildPathFocus() )
+            {
+                mpWindowImpl->mbCompoundControlHasFocus = false ;
+                bCompoundFocusChanged = true;
+            }
+
+            if ( bCompoundFocusChanged || ( rNEvt.GetWindow() == this ) )
+                ImplCallEventListeners( VCLEVENT_WINDOW_LOSEFOCUS );
+        }
+
+        // #82968# mouse and key events will be notified after processing ( in ImplNotifyKeyMouseCommandEventListeners() )!
+        //    see also ImplHandleMouseEvent(), ImplHandleKey()
+
+    }
+
+    return bDone;
+}
+
+bool Window::Notify( NotifyEvent& rNEvt )
+{
+    bool nRet = false;
+
+    // check for docking window
+    // but do nothing if window is docked and locked
+    ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
+    if( pWrapper && !( !pWrapper->IsFloatingMode() && pWrapper->IsLocked() ) )
+    {
+        if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
+        {
+            const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
+            bool bHit = pWrapper->GetDragArea().IsInside( pMEvt->GetPosPixel() );
+            if ( pMEvt->IsLeft() )
+            {
+                if ( pMEvt->IsMod1() && (pMEvt->GetClicks() == 2) )
+                {
+                    // ctrl double click toggles floating mode
+                    pWrapper->SetFloatingMode( !pWrapper->IsFloatingMode() );
+                    return true;
+                }
+                else if ( pMEvt->GetClicks() == 1 && bHit)
+                {
+                    // allow start docking during mouse move
+                    pWrapper->ImplEnableStartDocking();
+                    return true;
+                }
+            }
+        }
+        else if ( rNEvt.GetType() == EVENT_MOUSEMOVE )
+        {
+            const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
+            bool bHit = pWrapper->GetDragArea().IsInside( pMEvt->GetPosPixel() );
+            if ( pMEvt->IsLeft() )
+            {
+                // check if a single click initiated this sequence ( ImplStartDockingEnabled() )
+                // check if window is docked and
+                if( pWrapper->ImplStartDockingEnabled() && !pWrapper->IsFloatingMode() &&
+                    !pWrapper->IsDocking() && bHit )
+                {
+                    Point   aPos = pMEvt->GetPosPixel();
+                    Window* pWindow = rNEvt.GetWindow();
+                    if ( pWindow != this )
+                    {
+                        aPos = pWindow->OutputToScreenPixel( aPos );
+                        aPos = ScreenToOutputPixel( aPos );
+                    }
+                    pWrapper->ImplStartDocking( aPos );
+                }
+                return true;
+            }
+        }
+        else if( rNEvt.GetType() == EVENT_KEYINPUT )
+        {
+            const KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode();
+            if( rKey.GetCode() == KEY_F10 && rKey.GetModifier() &&
+                rKey.IsShift() && rKey.IsMod1() )
+            {
+                pWrapper->SetFloatingMode( !pWrapper->IsFloatingMode() );
+                /* At this point the floating toolbar frame does not have the
+                 * input focus since these frames don't get the focus per default
+                 * To enable keyboard handling of this toolbar set the input focus
+                 * to the frame. This needs to be done with ToTop since GrabFocus
+                 * would not notice any change since "this" already has the focus.
+                 */
+                if( pWrapper->IsFloatingMode() )
+                    ToTop( TOTOP_GRABFOCUSONLY );
+                return true;
+            }
+        }
+    }
+
+    // manage the dialogs
+    if ( (GetStyle() & (WB_DIALOGCONTROL | WB_NODIALOGCONTROL)) == WB_DIALOGCONTROL )
+    {
+        // if the parent also has dialog control activated, the parent takes over control
+        if ( (rNEvt.GetType() == EVENT_KEYINPUT) || (rNEvt.GetType() == EVENT_KEYUP) )
+        {
+            if ( ImplIsOverlapWindow() ||
+                 ((getNonLayoutRealParent(this)->GetStyle() & (WB_DIALOGCONTROL | WB_NODIALOGCONTROL)) != WB_DIALOGCONTROL) )
+            {
+                nRet = ImplDlgCtrl( *rNEvt.GetKeyEvent(), rNEvt.GetType() == EVENT_KEYINPUT );
+            }
+        }
+        else if ( (rNEvt.GetType() == EVENT_GETFOCUS) || (rNEvt.GetType() == EVENT_LOSEFOCUS) )
+        {
+            ImplDlgCtrlFocusChanged( rNEvt.GetWindow(), rNEvt.GetType() == EVENT_GETFOCUS );
+            if ( (rNEvt.GetWindow() == this) && (rNEvt.GetType() == EVENT_GETFOCUS) &&
+                 !(GetStyle() & WB_TABSTOP) && !(mpWindowImpl->mnDlgCtrlFlags & WINDOW_DLGCTRL_WANTFOCUS) )
+            {
+                sal_uInt16 n = 0;
+                Window* pFirstChild = ImplGetDlgWindow( n, DLGWINDOW_FIRST );
+                if ( pFirstChild )
+                    pFirstChild->ImplControlFocus();
+            }
+        }
+    }
+
+    if ( !nRet )
+    {
+        if ( mpWindowImpl->mpParent && !ImplIsOverlapWindow() )
+            nRet = mpWindowImpl->mpParent->Notify( rNEvt );
+    }
+
+    return nRet;
+}
+
+void Window::ImplCallEventListeners( sal_uLong nEvent, void* pData )
+{
+    // The implementation was moved to CallEventListeners(),
+    // because derived classes in svtools must be able to
+    // call the event listeners and ImplCallEventListeners()
+    // is not exported.
+    // TODO: replace ImplCallEventListeners() by CallEventListeners() in vcl
+
+    CallEventListeners( nEvent, pData );
+}
+
+void Window::CallEventListeners( sal_uLong nEvent, void* pData )
+{
+    VclWindowEvent aEvent( this, nEvent, pData );
+
+    ImplDelData aDelData;
+    ImplAddDel( &aDelData );
+
+    ImplGetSVData()->mpApp->ImplCallEventListeners( &aEvent );
+
+    if ( aDelData.IsDead() )
+        return;
+
+    mpWindowImpl->maEventListeners.Call( &aEvent );
+
+    if ( aDelData.IsDead() )
+        return;
+
+    ImplRemoveDel( &aDelData );
+
+    Window* pWindow = this;
+    while ( pWindow )
+    {
+        pWindow->ImplAddDel( &aDelData );
+
+        pWindow->mpWindowImpl->maChildEventListeners.Call( &aEvent );
+
+        if ( aDelData.IsDead() )
+            return;
+
+        pWindow->ImplRemoveDel( &aDelData );
+
+        pWindow = pWindow->GetParent();
+    }
+}
+
+void Window::FireVclEvent( VclSimpleEvent* pEvent )
+{
+    ImplGetSVData()->mpApp->ImplCallEventListeners(pEvent);
+}
+
+void Window::AddEventListener( const Link& rEventListener )
+{
+    mpWindowImpl->maEventListeners.addListener( rEventListener );
+}
+
+void Window::RemoveEventListener( const Link& rEventListener )
+{
+    mpWindowImpl->maEventListeners.removeListener( rEventListener );
+}
+
+void Window::AddChildEventListener( const Link& rEventListener )
+{
+    mpWindowImpl->maChildEventListeners.addListener( rEventListener );
+}
+
+void Window::RemoveChildEventListener( const Link& rEventListener )
+{
+    mpWindowImpl->maChildEventListeners.removeListener( rEventListener );
+}
+
+ImplSVEvent * Window::PostUserEvent( const Link& rLink, void* pCaller )
+{
+    ImplSVEvent* pSVEvent = new ImplSVEvent;
+    pSVEvent->mpData    = pCaller;
+    pSVEvent->mpLink    = new Link( rLink );
+    pSVEvent->mpWindow  = this;
+    pSVEvent->mbCall    = true;
+    ImplAddDel( &(pSVEvent->maDelData) );
+    if ( !mpWindowImpl->mpFrame->PostEvent( pSVEvent ) )
+    {
+        ImplRemoveDel( &(pSVEvent->maDelData) );
+        delete pSVEvent->mpLink;
+        delete pSVEvent;
+        pSVEvent = 0;
+    }
+    return pSVEvent;
+}
+
+void Window::RemoveUserEvent( ImplSVEvent * nUserEvent )
+{
+    DBG_ASSERT( nUserEvent->mpWindow == this,
+                "Window::RemoveUserEvent(): Event doesn't send to this window or is already removed" );
+    DBG_ASSERT( nUserEvent->mbCall,
+                "Window::RemoveUserEvent(): Event is already removed" );
+
+    if ( nUserEvent->mpWindow )
+    {
+        nUserEvent->mpWindow->ImplRemoveDel( &(nUserEvent->maDelData) );
+        nUserEvent->mpWindow = NULL;
+    }
+
+    nUserEvent->mbCall = false;
+}
+
+
+MouseEvent ImplTranslateMouseEvent( const MouseEvent& rE, Window* pSource, Window* pDest )
+{
+    Point aPos = pSource->OutputToScreenPixel( rE.GetPosPixel() );
+    aPos = pDest->ScreenToOutputPixel( aPos );
+    return MouseEvent( aPos, rE.GetClicks(), rE.GetMode(), rE.GetButtons(), rE.GetModifier() );
+}
+
+CommandEvent ImplTranslateCommandEvent( const CommandEvent& rCEvt, Window* pSource, Window* pDest )
+{
+    if ( !rCEvt.IsMouseEvent() )
+        return rCEvt;
+
+    Point aPos = pSource->OutputToScreenPixel( rCEvt.GetMousePosPixel() );
+    aPos = pDest->ScreenToOutputPixel( aPos );
+    return CommandEvent( aPos, rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() );
+}
+
+void Window::ImplNotifyKeyMouseCommandEventListeners( NotifyEvent& rNEvt )
+{
+    if( rNEvt.GetType() == EVENT_COMMAND )
+    {
+        const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
+        if ( pCEvt->GetCommand() != COMMAND_CONTEXTMENU )
+            // non context menu events are not to be notified up the chain
+            // so we return immediately
+            return;
+
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+        {
+            if ( rNEvt.GetWindow() == this )
+                // not interested in: The event listeners are already called in ::Command,
+                // and calling them here a second time doesn't make sense
+                ;
+            else
+            {
+                CommandEvent aCommandEvent = ImplTranslateCommandEvent( *pCEvt, rNEvt.GetWindow(), this );
+                ImplCallEventListeners( VCLEVENT_WINDOW_COMMAND, &aCommandEvent );
+            }
+        }
+    }
+
+    // #82968# notify event listeners for mouse and key events separately and
+    // not in PreNotify ( as for focus listeners )
+    // this allows for processing those events internally first and pass it to
+    // the toolkit later
+
+    ImplDelData aDelData;
+    ImplAddDel( &aDelData );
+
+    if( rNEvt.GetType() == EVENT_MOUSEMOVE )
+    {
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+        {
+            if ( rNEvt.GetWindow() == this )
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEMOVE, (void*)rNEvt.GetMouseEvent() );
+            else
+            {
+                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEMOVE, &aMouseEvent );
+            }
+        }
+    }
+    else if( rNEvt.GetType() == EVENT_MOUSEBUTTONUP )
+    {
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+        {
+            if ( rNEvt.GetWindow() == this )
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, (void*)rNEvt.GetMouseEvent() );
+            else
+            {
+                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, &aMouseEvent );
+            }
+        }
+    }
+    else if( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
+    {
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+        {
+            if ( rNEvt.GetWindow() == this )
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, (void*)rNEvt.GetMouseEvent() );
+            else
+            {
+                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
+                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, &aMouseEvent );
+            }
+        }
+    }
+    else if( rNEvt.GetType() == EVENT_KEYINPUT )
+    {
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+            ImplCallEventListeners( VCLEVENT_WINDOW_KEYINPUT, (void*)rNEvt.GetKeyEvent() );
+    }
+    else if( rNEvt.GetType() == EVENT_KEYUP )
+    {
+        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
+            ImplCallEventListeners( VCLEVENT_WINDOW_KEYUP, (void*)rNEvt.GetKeyEvent() );
+    }
+
+    if ( aDelData.IsDead() )
+        return;
+    ImplRemoveDel( &aDelData );
+
+    // #106721# check if we're part of a compound control and notify
+    Window *pParent = ImplGetParent();
+    while( pParent )
+    {
+        if( pParent->IsCompoundControl() )
+        {
+            pParent->ImplNotifyKeyMouseCommandEventListeners( rNEvt );
+            break;
+        }
+        pParent = pParent->ImplGetParent();
+    }
+}
+
+void Window::ImplCallInitShow()
+{
+    mpWindowImpl->mbReallyShown   = true;
+    mpWindowImpl->mbInInitShow    = true;
+    StateChanged( STATE_CHANGE_INITSHOW );
+    mpWindowImpl->mbInInitShow    = false;
+
+    Window* pWindow = mpWindowImpl->mpFirstOverlap;
+    while ( pWindow )
+    {
+        if ( pWindow->mpWindowImpl->mbVisible )
+            pWindow->ImplCallInitShow();
+        pWindow = pWindow->mpWindowImpl->mpNext;
+    }
+
+    pWindow = mpWindowImpl->mpFirstChild;
+    while ( pWindow )
+    {
+        if ( pWindow->mpWindowImpl->mbVisible )
+            pWindow->ImplCallInitShow();
+        pWindow = pWindow->mpWindowImpl->mpNext;
+    }
+}
+
+
+void Window::ImplCallResize()
+{
+    mpWindowImpl->mbCallResize = false;
+
+    if( GetBackground().IsGradient() )
+        Invalidate();
+
+    Resize();
+
+    // #88419# Most classes don't call the base class in Resize() and Move(),
+    // => Call ImpleResize/Move instead of Resize/Move directly...
+    ImplCallEventListeners( VCLEVENT_WINDOW_RESIZE );
+}
+
+void Window::ImplCallMove()
+{
+    mpWindowImpl->mbCallMove = false;
+
+    if( mpWindowImpl->mbFrame )
+    {
+        // update frame position
+        SalFrame *pParentFrame = NULL;
+        Window *pParent = ImplGetParent();
+        while( pParent )
+        {
+            if( pParent->mpWindowImpl->mpFrame != mpWindowImpl->mpFrame )
+            {
+                pParentFrame = pParent->mpWindowImpl->mpFrame;
+                break;
+            }
+            pParent = pParent->GetParent();
+        }
+
+        SalFrameGeometry g = mpWindowImpl->mpFrame->GetGeometry();
+        mpWindowImpl->maPos = Point( g.nX, g.nY );
+        if( pParentFrame )
+        {
+            g = pParentFrame->GetGeometry();
+            mpWindowImpl->maPos -= Point( g.nX, g.nY );
+        }
+        // the client window and and all its subclients have the same position as the borderframe
+        // this is important for floating toolbars where the borderwindow is a floating window
+        // which has another borderwindow (ie the system floating window)
+        Window *pClientWin = mpWindowImpl->mpClientWindow;
+        while( pClientWin )
+        {
+            pClientWin->mpWindowImpl->maPos = mpWindowImpl->maPos;
+            pClientWin = pClientWin->mpWindowImpl->mpClientWindow;
+        }
+    }
+
+    Move();
+
+    ImplCallEventListeners( VCLEVENT_WINDOW_MOVE );
+}
+
+void Window::ImplCallFocusChangeActivate( Window* pNewOverlapWindow,
+                                          Window* pOldOverlapWindow )
+{
+    ImplSVData* pSVData = ImplGetSVData();
+    Window*     pNewRealWindow;
+    Window*     pOldRealWindow;
+    bool bCallActivate = true;
+    bool bCallDeactivate = true;
+
+    pOldRealWindow = pOldOverlapWindow->ImplGetWindow();
+    pNewRealWindow = pNewOverlapWindow->ImplGetWindow();
+    if ( (pOldRealWindow->GetType() != WINDOW_FLOATINGWINDOW) ||
+         pOldRealWindow->GetActivateMode() )
+    {
+        if ( (pNewRealWindow->GetType() == WINDOW_FLOATINGWINDOW) &&
+             !pNewRealWindow->GetActivateMode() )
+        {
+            pSVData->maWinData.mpLastDeacWin = pOldOverlapWindow;
+            bCallDeactivate = false;
+        }
+    }
+    else if ( (pNewRealWindow->GetType() != WINDOW_FLOATINGWINDOW) ||
+              pNewRealWindow->GetActivateMode() )
+    {
+        if ( pSVData->maWinData.mpLastDeacWin )
+        {
+            if ( pSVData->maWinData.mpLastDeacWin == pNewOverlapWindow )
+                bCallActivate = false;
+            else
+            {
+                Window* pLastRealWindow = pSVData->maWinData.mpLastDeacWin->ImplGetWindow();
+                pSVData->maWinData.mpLastDeacWin->mpWindowImpl->mbActive = false;
+                pSVData->maWinData.mpLastDeacWin->Deactivate();
+                if ( pLastRealWindow != pSVData->maWinData.mpLastDeacWin )
+                {
+                    pLastRealWindow->mpWindowImpl->mbActive = true;
+                    pLastRealWindow->Activate();
+                }
+            }
+            pSVData->maWinData.mpLastDeacWin = NULL;
+        }
+    }
+
+    if ( bCallDeactivate )
+    {
+        if( pOldOverlapWindow->mpWindowImpl->mbActive )
+        {
+            pOldOverlapWindow->mpWindowImpl->mbActive = false;
+            pOldOverlapWindow->Deactivate();
+        }
+        if ( pOldRealWindow != pOldOverlapWindow )
+        {
+            if( pOldRealWindow->mpWindowImpl->mbActive )
+            {
+                pOldRealWindow->mpWindowImpl->mbActive = false;
+                pOldRealWindow->Deactivate();
+            }
+        }
+    }
+    if ( bCallActivate && ! pNewOverlapWindow->mpWindowImpl->mbActive )
+    {
+        if( ! pNewOverlapWindow->mpWindowImpl->mbActive )
+        {
+            pNewOverlapWindow->mpWindowImpl->mbActive = true;
+            pNewOverlapWindow->Activate();
+        }
+        if ( pNewRealWindow != pNewOverlapWindow )
+        {
+            if( ! pNewRealWindow->mpWindowImpl->mbActive )
+            {
+                pNewRealWindow->mpWindowImpl->mbActive = true;
+                pNewRealWindow->Activate();
+            }
+        }
+    }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/mouseevent.cxx b/vcl/source/window/mouseevent.cxx
index b23b9c0..3fb692d 100644
--- a/vcl/source/window/mouseevent.cxx
+++ b/vcl/source/window/mouseevent.cxx
@@ -17,10 +17,11 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <vcl/event.hxx>
+
 #include <com/sun/star/awt/MouseEvent.hpp>
 #include <com/sun/star/awt/KeyModifier.hpp>
 #include <com/sun/star/awt/MouseButton.hpp>
-#include <vcl/event.hxx>
 
 /** inits this vcl KeyEvent with all settings from the given awt event **/
 MouseEvent::MouseEvent( const ::com::sun::star::awt::MouseEvent& rEvent )
diff --git a/vcl/source/window/settings.cxx b/vcl/source/window/settings.cxx
new file mode 100644
index 0000000..66935d7
--- /dev/null
+++ b/vcl/source/window/settings.cxx
@@ -0,0 +1,388 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <i18nlangtag/mslangid.hxx>
+
+#include <vcl/event.hxx>
+#include <vcl/svapp.hxx>
+#include <vcl/window.hxx>
+#include <vcl/virdev.hxx>
+#include <vcl/settings.hxx>
+
+#include <unotools/fontcfg.hxx>
+#include <unotools/confignode.hxx>
+
+#include <comphelper/processfactory.hxx>
+
+#include <salframe.hxx>
+#include <svdata.hxx>
+#include <brdwin.hxx>
+#include <PhysicalFontCollection.hxx>
+
+#include <window.h>
+
+void Window::SetSettings( const AllSettings& rSettings )
+{
+    SetSettings( rSettings, false );
+}
+
+void Window::SetSettings( const AllSettings& rSettings, bool bChild )
+{
+
+    if ( mpWindowImpl->mpBorderWindow )
+    {
+        mpWindowImpl->mpBorderWindow->SetSettings( rSettings, false );
+        if ( (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) &&
+             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow )
+            ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow->SetSettings( rSettings, true );
+    }
+
+    AllSettings aOldSettings(*mxSettings);
+    OutputDevice::SetSettings( rSettings );
+    sal_uLong nChangeFlags = aOldSettings.GetChangeFlags( rSettings );
+
+    // recalculate AppFont-resolution and DPI-resolution
+    ImplInitResolutionSettings();
+
+    if ( nChangeFlags )
+    {
+        DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags );
+        DataChanged( aDCEvt );
+    }
+
+    if ( bChild || mpWindowImpl->mbChildNotify )
+    {
+        Window* pChild = mpWindowImpl->mpFirstChild;
+        while ( pChild )
+        {
+            pChild->SetSettings( rSettings, bChild );
+            pChild = pChild->mpWindowImpl->mpNext;
+        }
+    }
+}
+
+void Window::UpdateSettings( const AllSettings& rSettings, bool bChild )
+{
+
+    if ( mpWindowImpl->mpBorderWindow )
+    {
+        mpWindowImpl->mpBorderWindow->UpdateSettings( rSettings, false );
+        if ( (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) &&
+             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow )
+            ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow->UpdateSettings( rSettings, true );
+    }
+
+    AllSettings aOldSettings(*mxSettings);
+    sal_uLong nChangeFlags = mxSettings->Update( mxSettings->GetWindowUpdate(), rSettings );
+    nChangeFlags |= SETTINGS_IN_UPDATE_SETTINGS; // Set this flag so the receiver of the data changed
+                                                 // event can distinguish between the changing of global
+                                                 // setting and a local change ( with SetSettings )
+
+    // recalculate AppFont-resolution and DPI-resolution
+    ImplInitResolutionSettings();
+
+    /* #i73785#
+    *  do not overwrite a WheelBehavior with false
+    *  this looks kind of a hack, but WheelBehavior
+    *  is always a local change, not a system property,
+    *  so we can spare all our users the hassle of reacting on
+    *  this in their respective DataChanged.
+    */
+    MouseSettings aSet( mxSettings->GetMouseSettings() );
+    aSet.SetWheelBehavior( aOldSettings.GetMouseSettings().GetWheelBehavior() );
+    mxSettings->SetMouseSettings( aSet );
+
+    if( (nChangeFlags & SETTINGS_STYLE) && IsBackground() )
+    {
+        Wallpaper aWallpaper = GetBackground();
+        if( !aWallpaper.IsBitmap() && !aWallpaper.IsGradient() )
+        {
+            if ( mpWindowImpl->mnStyle & WB_3DLOOK )
+            {
+                if (aOldSettings.GetStyleSettings().GetFaceColor() != rSettings.GetStyleSettings().GetFaceColor())
+                    SetBackground( Wallpaper( rSettings.GetStyleSettings().GetFaceColor() ) );
+            }
+            else
+            {
+                if (aOldSettings.GetStyleSettings().GetWindowColor() != rSettings.GetStyleSettings().GetWindowColor())
+                    SetBackground( Wallpaper( rSettings.GetStyleSettings().GetWindowColor() ) );
+            }
+        }
+    }
+
+    if ( nChangeFlags )
+    {
+        DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags );
+        DataChanged( aDCEvt );
+        // notify data change handler
+        ImplCallEventListeners( VCLEVENT_WINDOW_DATACHANGED, &aDCEvt);
+    }
+
+    if ( bChild || mpWindowImpl->mbChildNotify )
+    {
+        Window* pChild = mpWindowImpl->mpFirstChild;
+        while ( pChild )
+        {
+            pChild->UpdateSettings( rSettings, bChild );
+            pChild = pChild->mpWindowImpl->mpNext;
+        }
+    }
+}
+
+void Window::ImplUpdateGlobalSettings( AllSettings& rSettings, bool bCallHdl )
+{
+    StyleSettings aTmpSt( rSettings.GetStyleSettings() );
+    aTmpSt.SetHighContrastMode( false );
+    rSettings.SetStyleSettings( aTmpSt );
+    ImplGetFrame()->UpdateSettings( rSettings );
+    // reset default border width for layouters
+    ImplGetSVData()->maAppData.mnDefaultLayoutBorder = -1;
+
+    // Verify availability of the configured UI font, otherwise choose "Andale Sans UI"
+
+    // WTF, what makes Andale Sans UI a suitable cross-platform fallback font?
+
+    OUString aUserInterfaceFont;
+    bool bUseSystemFont = rSettings.GetStyleSettings().GetUseSystemUIFonts();
+
+    // check whether system UI font can display a typical UI text
+    if( bUseSystemFont )
+        bUseSystemFont = ImplCheckUIFont( rSettings.GetStyleSettings().GetAppFont() );
+
+    if ( !bUseSystemFont )
+    {
+        OutputDevice *pOutDev = GetOutDev();
+        pOutDev->ImplInitFontList();
+        OUString aConfigFont = utl::DefaultFontConfiguration::get().getUserInterfaceFont( rSettings.GetUILanguageTag() );
+        sal_Int32 nIndex = 0;
+        while( nIndex != -1 )
+        {
+            OUString aName( aConfigFont.getToken( 0, ';', nIndex ) );
+            if ( !aName.isEmpty() && mpWindowImpl->mpFrameData->mpFontCollection->FindFontFamily( aName ) )
+            {
+                aUserInterfaceFont = aConfigFont;
+                break;
+            }
+        }
+
+        if ( aUserInterfaceFont.isEmpty() )
+        {
+            OUString aFallbackFont ("Andale Sans UI" );
+            if ( mpWindowImpl->mpFrameData->mpFontCollection->FindFontFamily( aFallbackFont ) )
+                aUserInterfaceFont = aFallbackFont;
+        }
+    }
+
+    if ( !bUseSystemFont && !aUserInterfaceFont.isEmpty() )
+    {
+        StyleSettings aStyleSettings = rSettings.GetStyleSettings();
+        Font aFont = aStyleSettings.GetAppFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetAppFont( aFont );
+        aFont = aStyleSettings.GetHelpFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetHelpFont( aFont );
+        aFont = aStyleSettings.GetTitleFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetTitleFont( aFont );
+        aFont = aStyleSettings.GetFloatTitleFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetFloatTitleFont( aFont );
+        aFont = aStyleSettings.GetMenuFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetMenuFont( aFont );
+        aFont = aStyleSettings.GetToolFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetToolFont( aFont );
+        aFont = aStyleSettings.GetLabelFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetLabelFont( aFont );
+        aFont = aStyleSettings.GetInfoFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetInfoFont( aFont );
+        aFont = aStyleSettings.GetRadioCheckFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetRadioCheckFont( aFont );
+        aFont = aStyleSettings.GetPushButtonFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetPushButtonFont( aFont );
+        aFont = aStyleSettings.GetFieldFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetFieldFont( aFont );
+        aFont = aStyleSettings.GetIconFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetIconFont( aFont );
+        aFont = aStyleSettings.GetGroupFont();
+        aFont.SetName( aUserInterfaceFont );
+        aStyleSettings.SetGroupFont( aFont );
+        rSettings.SetStyleSettings( aStyleSettings );
+    }
+
+    StyleSettings aStyleSettings = rSettings.GetStyleSettings();
+    // #97047: Force all fonts except Menu and Help to a fixed height
+    // to avoid UI scaling due to large fonts
+    // - but allow bigger fonts on bigger screens (i16682, i21238)
+    //   dialogs were designed to fit 800x600 with an 8pt font, so scale accordingly
+    int maxFontheight = 9; // #107886#: 9 is default for some asian systems, so always allow if requested
+    if( GetDesktopRectPixel().getHeight() > 600 )
+        maxFontheight = (int) ((( 8.0 * (double) GetDesktopRectPixel().getHeight()) / 600.0) + 1.5);
+
+    Font aFont = aStyleSettings.GetMenuFont();
+    int defFontheight = aFont.GetHeight();
+    if( defFontheight > maxFontheight )
+        defFontheight = maxFontheight;
+
+    // if the UI is korean, chinese or another locale
+    // where the system font size is kown to be often too small to
+    // generate readable fonts enforce a minimum font size of 9 points
+    bool bBrokenLangFontHeight = MsLangId::isCJK(Application::GetSettings().GetUILanguageTag().getLanguageType());
+    if (bBrokenLangFontHeight)
+        defFontheight = std::max(9, defFontheight);
+
+    // i22098, toolfont will be scaled differently to avoid bloated rulers and status bars for big fonts
+    int toolfontheight = defFontheight;
+    if( toolfontheight > 9 )
+        toolfontheight = (defFontheight+8) / 2;
+
+    aFont = aStyleSettings.GetAppFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetAppFont( aFont );
+    aFont = aStyleSettings.GetTitleFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetTitleFont( aFont );
+    aFont = aStyleSettings.GetFloatTitleFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetFloatTitleFont( aFont );
+    // keep menu and help font size from system unless in broken locale size
+    if( bBrokenLangFontHeight )
+    {
+        aFont = aStyleSettings.GetMenuFont();
+        if( aFont.GetHeight() < defFontheight )
+        {
+            aFont.SetHeight( defFontheight );
+            aStyleSettings.SetMenuFont( aFont );
+        }
+        aFont = aStyleSettings.GetHelpFont();
+        if( aFont.GetHeight() < defFontheight )
+        {
+            aFont.SetHeight( defFontheight );
+            aStyleSettings.SetHelpFont( aFont );
+        }
+    }
+
+    // use different height for toolfont
+    aFont = aStyleSettings.GetToolFont();
+    aFont.SetHeight( toolfontheight );
+    aStyleSettings.SetToolFont( aFont );
+
+    aFont = aStyleSettings.GetLabelFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetLabelFont( aFont );
+    aFont = aStyleSettings.GetInfoFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetInfoFont( aFont );
+    aFont = aStyleSettings.GetRadioCheckFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetRadioCheckFont( aFont );
+    aFont = aStyleSettings.GetPushButtonFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetPushButtonFont( aFont );
+    aFont = aStyleSettings.GetFieldFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetFieldFont( aFont );
+    aFont = aStyleSettings.GetIconFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetIconFont( aFont );
+    aFont = aStyleSettings.GetGroupFont();
+    aFont.SetHeight( defFontheight );
+    aStyleSettings.SetGroupFont( aFont );
+
+    rSettings.SetStyleSettings( aStyleSettings );
+
+    bool bForceHCMode = false;
+
+    // auto detect HC mode; if the system already set it to "yes"
+    // (see above) then accept that
+    if( !rSettings.GetStyleSettings().GetHighContrastMode() )
+    {
+        bool bTmp = false, bAutoHCMode = true;
+        utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithComponentContext(
+            comphelper::getProcessComponentContext(),
+            OUString("org.openoffice.Office.Common/Accessibility") );    // note: case sensitive !
+        if ( aNode.isValid() )
+        {
+            ::com::sun::star::uno::Any aValue = aNode.getNodeValue( OUString("AutoDetectSystemHC") );
+            if( aValue >>= bTmp )
+                bAutoHCMode = bTmp;
+        }
+        if( bAutoHCMode )
+        {
+            if( rSettings.GetStyleSettings().GetFaceColor().IsDark() ||
+                rSettings.GetStyleSettings().GetWindowColor().IsDark() )
+                bForceHCMode = true;
+        }
+    }
+
+    static const char* pEnvHC = getenv( "SAL_FORCE_HC" );
+    if( pEnvHC && *pEnvHC )
+        bForceHCMode = true;
+
+    if( bForceHCMode )
+    {
+        aStyleSettings = rSettings.GetStyleSettings();
+        aStyleSettings.SetHighContrastMode( true );
+        rSettings.SetStyleSettings( aStyleSettings );
+    }
+
+#if defined(DBG_UTIL)
+    // If needed, set AppFont to bold, in order to check
+    // if there is enough space available for texts on other systems
+    if ( DbgIsBoldAppFont() )
+    {
+        aStyleSettings = rSettings.GetStyleSettings();
+        aFont = aStyleSettings.GetAppFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetAppFont( aFont );
+        aFont = aStyleSettings.GetGroupFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetGroupFont( aFont );
+        aFont = aStyleSettings.GetLabelFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetLabelFont( aFont );
+        aFont = aStyleSettings.GetRadioCheckFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetRadioCheckFont( aFont );
+        aFont = aStyleSettings.GetPushButtonFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetPushButtonFont( aFont );
+        aFont = aStyleSettings.GetFieldFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetFieldFont( aFont );
+        aFont = aStyleSettings.GetIconFont();
+        aFont.SetWeight( WEIGHT_BOLD );
+        aStyleSettings.SetIconFont( aFont );
+        rSettings.SetStyleSettings( aStyleSettings );
+    }
+#endif
+
+    if ( bCallHdl )
+        GetpApp()->OverrideSystemSettings( rSettings );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 849bce6..a2d2736 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -508,263 +508,6 @@ bool Window::ImplCheckUIFont( const Font& rFont )
     return bUIFontOk;
 }
 
-void Window::ImplUpdateGlobalSettings( AllSettings& rSettings, bool bCallHdl )
-{
-    StyleSettings aTmpSt( rSettings.GetStyleSettings() );
-    aTmpSt.SetHighContrastMode( false );
-    rSettings.SetStyleSettings( aTmpSt );
-    ImplGetFrame()->UpdateSettings( rSettings );
-    // reset default border width for layouters
-    ImplGetSVData()->maAppData.mnDefaultLayoutBorder = -1;
-
-    // Verify availability of the configured UI font, otherwise choose "Andale Sans UI"
-
-    // WTF, what makes Andale Sans UI a suitable cross-platform fallback font?
-
-    OUString aUserInterfaceFont;
-    bool bUseSystemFont = rSettings.GetStyleSettings().GetUseSystemUIFonts();
-
-    // check whether system UI font can display a typical UI text
-    if( bUseSystemFont )
-        bUseSystemFont = ImplCheckUIFont( rSettings.GetStyleSettings().GetAppFont() );
-
-    if ( !bUseSystemFont )
-    {
-        OutputDevice *pOutDev = GetOutDev();
-        pOutDev->ImplInitFontList();
-        OUString aConfigFont = utl::DefaultFontConfiguration::get().getUserInterfaceFont( rSettings.GetUILanguageTag() );
-        sal_Int32 nIndex = 0;
-        while( nIndex != -1 )
-        {
-            OUString aName( aConfigFont.getToken( 0, ';', nIndex ) );
-            if ( !aName.isEmpty() && mpWindowImpl->mpFrameData->mpFontCollection->FindFontFamily( aName ) )
-            {
-                aUserInterfaceFont = aConfigFont;
-                break;
-            }
-        }
-
-        if ( aUserInterfaceFont.isEmpty() )
-        {
-            OUString aFallbackFont ("Andale Sans UI" );
-            if ( mpWindowImpl->mpFrameData->mpFontCollection->FindFontFamily( aFallbackFont ) )
-                aUserInterfaceFont = aFallbackFont;
-        }
-    }
-
-    if ( !bUseSystemFont && !aUserInterfaceFont.isEmpty() )
-    {
-        StyleSettings aStyleSettings = rSettings.GetStyleSettings();
-        Font aFont = aStyleSettings.GetAppFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetAppFont( aFont );
-        aFont = aStyleSettings.GetHelpFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetHelpFont( aFont );
-        aFont = aStyleSettings.GetTitleFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetTitleFont( aFont );
-        aFont = aStyleSettings.GetFloatTitleFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetFloatTitleFont( aFont );
-        aFont = aStyleSettings.GetMenuFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetMenuFont( aFont );
-        aFont = aStyleSettings.GetToolFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetToolFont( aFont );
-        aFont = aStyleSettings.GetLabelFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetLabelFont( aFont );
-        aFont = aStyleSettings.GetInfoFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetInfoFont( aFont );
-        aFont = aStyleSettings.GetRadioCheckFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetRadioCheckFont( aFont );
-        aFont = aStyleSettings.GetPushButtonFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetPushButtonFont( aFont );
-        aFont = aStyleSettings.GetFieldFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetFieldFont( aFont );
-        aFont = aStyleSettings.GetIconFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetIconFont( aFont );
-        aFont = aStyleSettings.GetGroupFont();
-        aFont.SetName( aUserInterfaceFont );
-        aStyleSettings.SetGroupFont( aFont );
-        rSettings.SetStyleSettings( aStyleSettings );
-    }
-
-    StyleSettings aStyleSettings = rSettings.GetStyleSettings();
-    // #97047: Force all fonts except Menu and Help to a fixed height
-    // to avoid UI scaling due to large fonts
-    // - but allow bigger fonts on bigger screens (i16682, i21238)
-    //   dialogs were designed to fit 800x600 with an 8pt font, so scale accordingly
-    int maxFontheight = 9; // #107886#: 9 is default for some asian systems, so always allow if requested
-    if( GetDesktopRectPixel().getHeight() > 600 )
-        maxFontheight = (int) ((( 8.0 * (double) GetDesktopRectPixel().getHeight()) / 600.0) + 1.5);
-
-    Font aFont = aStyleSettings.GetMenuFont();
-    int defFontheight = aFont.GetHeight();
-    if( defFontheight > maxFontheight )
-        defFontheight = maxFontheight;
-
-    // if the UI is korean, chinese or another locale
-    // where the system font size is kown to be often too small to
-    // generate readable fonts enforce a minimum font size of 9 points
-    bool bBrokenLangFontHeight = MsLangId::isCJK(Application::GetSettings().GetUILanguageTag().getLanguageType());
-    if (bBrokenLangFontHeight)
-        defFontheight = std::max(9, defFontheight);
-
-    // i22098, toolfont will be scaled differently to avoid bloated rulers and status bars for big fonts
-    int toolfontheight = defFontheight;
-    if( toolfontheight > 9 )
-        toolfontheight = (defFontheight+8) / 2;
-
-    aFont = aStyleSettings.GetAppFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetAppFont( aFont );
-    aFont = aStyleSettings.GetTitleFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetTitleFont( aFont );
-    aFont = aStyleSettings.GetFloatTitleFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetFloatTitleFont( aFont );
-    // keep menu and help font size from system unless in broken locale size
-    if( bBrokenLangFontHeight )
-    {
-        aFont = aStyleSettings.GetMenuFont();
-        if( aFont.GetHeight() < defFontheight )
-        {
-            aFont.SetHeight( defFontheight );
-            aStyleSettings.SetMenuFont( aFont );
-        }
-        aFont = aStyleSettings.GetHelpFont();
-        if( aFont.GetHeight() < defFontheight )
-        {
-            aFont.SetHeight( defFontheight );
-            aStyleSettings.SetHelpFont( aFont );
-        }
-    }
-
-    // use different height for toolfont
-    aFont = aStyleSettings.GetToolFont();
-    aFont.SetHeight( toolfontheight );
-    aStyleSettings.SetToolFont( aFont );
-
-    aFont = aStyleSettings.GetLabelFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetLabelFont( aFont );
-    aFont = aStyleSettings.GetInfoFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetInfoFont( aFont );
-    aFont = aStyleSettings.GetRadioCheckFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetRadioCheckFont( aFont );
-    aFont = aStyleSettings.GetPushButtonFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetPushButtonFont( aFont );
-    aFont = aStyleSettings.GetFieldFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetFieldFont( aFont );
-    aFont = aStyleSettings.GetIconFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetIconFont( aFont );
-    aFont = aStyleSettings.GetGroupFont();
-    aFont.SetHeight( defFontheight );
-    aStyleSettings.SetGroupFont( aFont );
-
-    rSettings.SetStyleSettings( aStyleSettings );
-
-    bool bForceHCMode = false;
-
-    // auto detect HC mode; if the system already set it to "yes"
-    // (see above) then accept that
-    if( !rSettings.GetStyleSettings().GetHighContrastMode() )
-    {
-        bool bTmp = false, bAutoHCMode = true;
-        utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithComponentContext(
-            comphelper::getProcessComponentContext(),
-            OUString("org.openoffice.Office.Common/Accessibility") );    // note: case sensitive !
-        if ( aNode.isValid() )
-        {
-            ::com::sun::star::uno::Any aValue = aNode.getNodeValue( OUString("AutoDetectSystemHC") );
-            if( aValue >>= bTmp )
-                bAutoHCMode = bTmp;
-        }
-        if( bAutoHCMode )
-        {
-            if( rSettings.GetStyleSettings().GetFaceColor().IsDark() ||
-                rSettings.GetStyleSettings().GetWindowColor().IsDark() )
-                bForceHCMode = true;
-        }
-    }
-
-    static const char* pEnvHC = getenv( "SAL_FORCE_HC" );
-    if( pEnvHC && *pEnvHC )
-        bForceHCMode = true;
-
-    if( bForceHCMode )
-    {
-        aStyleSettings = rSettings.GetStyleSettings();
-        aStyleSettings.SetHighContrastMode( true );
-        rSettings.SetStyleSettings( aStyleSettings );
-    }
-
-#if defined(DBG_UTIL)
-    // If needed, set AppFont to bold, in order to check
-    // if there is enough space available for texts on other systems
-    if ( DbgIsBoldAppFont() )
-    {
-        aStyleSettings = rSettings.GetStyleSettings();
-        aFont = aStyleSettings.GetAppFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetAppFont( aFont );
-        aFont = aStyleSettings.GetGroupFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetGroupFont( aFont );
-        aFont = aStyleSettings.GetLabelFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetLabelFont( aFont );
-        aFont = aStyleSettings.GetRadioCheckFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetRadioCheckFont( aFont );
-        aFont = aStyleSettings.GetPushButtonFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetPushButtonFont( aFont );
-        aFont = aStyleSettings.GetFieldFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetFieldFont( aFont );
-        aFont = aStyleSettings.GetIconFont();
-        aFont.SetWeight( WEIGHT_BOLD );
-        aStyleSettings.SetIconFont( aFont );
-        rSettings.SetStyleSettings( aStyleSettings );
-    }
-#endif
-
-    if ( bCallHdl )
-        GetpApp()->OverrideSystemSettings( rSettings );
-}
-
-MouseEvent ImplTranslateMouseEvent( const MouseEvent& rE, Window* pSource, Window* pDest )
-{
-    Point aPos = pSource->OutputToScreenPixel( rE.GetPosPixel() );
-    aPos = pDest->ScreenToOutputPixel( aPos );
-    return MouseEvent( aPos, rE.GetClicks(), rE.GetMode(), rE.GetButtons(), rE.GetModifier() );
-}
-
-CommandEvent ImplTranslateCommandEvent( const CommandEvent& rCEvt, Window* pSource, Window* pDest )
-{
-    if ( !rCEvt.IsMouseEvent() )
-        return rCEvt;
-
-    Point aPos = pSource->OutputToScreenPixel( rCEvt.GetMousePosPixel() );
-    aPos = pDest->ScreenToOutputPixel( aPos );
-    return CommandEvent( aPos, rCEvt.GetCommand(), rCEvt.IsMouseEvent(), rCEvt.GetData() );
-}
-
 void Window::ImplInitWindowData( WindowType nType )
 {
     // We will eventually being removing the inheritance of OutputDevice from Window.
@@ -1114,62 +857,6 @@ void Window::ImplSetFrameParent( const Window* pParent )
     }
 }
 
-void Window::ImplCallResize()
-{
-    mpWindowImpl->mbCallResize = false;
-
-    if( GetBackground().IsGradient() )
-        Invalidate();
-
-    Resize();
-
-    // #88419# Most classes don't call the base class in Resize() and Move(),
-    // => Call ImpleResize/Move instead of Resize/Move directly...
-    ImplCallEventListeners( VCLEVENT_WINDOW_RESIZE );
-}
-
-void Window::ImplCallMove()
-{
-    mpWindowImpl->mbCallMove = false;
-
-    if( mpWindowImpl->mbFrame )
-    {
-        // update frame position
-        SalFrame *pParentFrame = NULL;
-        Window *pParent = ImplGetParent();
-        while( pParent )
-        {
-            if( pParent->mpWindowImpl->mpFrame != mpWindowImpl->mpFrame )
-            {
-                pParentFrame = pParent->mpWindowImpl->mpFrame;
-                break;
-            }
-            pParent = pParent->GetParent();
-        }
-
-        SalFrameGeometry g = mpWindowImpl->mpFrame->GetGeometry();
-        mpWindowImpl->maPos = Point( g.nX, g.nY );
-        if( pParentFrame )
-        {
-            g = pParentFrame->GetGeometry();
-            mpWindowImpl->maPos -= Point( g.nX, g.nY );
-        }
-        // the client window and and all its subclients have the same position as the borderframe
-        // this is important for floating toolbars where the borderwindow is a floating window
-        // which has another borderwindow (ie the system floating window)
-        Window *pClientWin = mpWindowImpl->mpClientWindow;
-        while( pClientWin )
-        {
-            pClientWin->mpWindowImpl->maPos = mpWindowImpl->maPos;
-            pClientWin = pClientWin->mpWindowImpl->mpClientWindow;
-        }
-    }
-
-    Move();
-
-    ImplCallEventListeners( VCLEVENT_WINDOW_MOVE );
-}
-
 ImplWinData* Window::ImplGetWinData() const
 {
     if ( !mpWindowImpl->mpWinData )
@@ -1443,30 +1130,6 @@ void Window::ImplSetReallyVisible()
     }
 }
 
-void Window::ImplCallInitShow()
-{
-    mpWindowImpl->mbReallyShown   = true;
-    mpWindowImpl->mbInInitShow    = true;
-    StateChanged( STATE_CHANGE_INITSHOW );
-    mpWindowImpl->mbInInitShow    = false;
-
-    Window* pWindow = mpWindowImpl->mpFirstOverlap;
-    while ( pWindow )
-    {
-        if ( pWindow->mpWindowImpl->mbVisible )
-            pWindow->ImplCallInitShow();
-        pWindow = pWindow->mpWindowImpl->mpNext;
-    }
-
-    pWindow = mpWindowImpl->mpFirstChild;
-    while ( pWindow )
-    {
-        if ( pWindow->mpWindowImpl->mbVisible )
-            pWindow->ImplCallInitShow();
-        pWindow = pWindow->mpWindowImpl->mpNext;
-    }
-}
-
 void Window::ImplAddDel( ImplDelData* pDel ) // TODO: make "const" when incompatiblity ok
 {
     DBG_ASSERT( !pDel->mpWindow, "Window::ImplAddDel(): cannot add ImplDelData twice !" );
@@ -3007,83 +2670,6 @@ void Window::ImplInvertFocus( const Rectangle& rRect )
     InvertTracking( rRect, SHOWTRACK_SMALL | SHOWTRACK_WINDOW );
 }
 
-void Window::ImplCallFocusChangeActivate( Window* pNewOverlapWindow,
-                                          Window* pOldOverlapWindow )
-{
-    ImplSVData* pSVData = ImplGetSVData();
-    Window*     pNewRealWindow;
-    Window*     pOldRealWindow;
-    bool bCallActivate = true;
-    bool bCallDeactivate = true;
-
-    pOldRealWindow = pOldOverlapWindow->ImplGetWindow();
-    pNewRealWindow = pNewOverlapWindow->ImplGetWindow();
-    if ( (pOldRealWindow->GetType() != WINDOW_FLOATINGWINDOW) ||
-         pOldRealWindow->GetActivateMode() )
-    {
-        if ( (pNewRealWindow->GetType() == WINDOW_FLOATINGWINDOW) &&
-             !pNewRealWindow->GetActivateMode() )
-        {
-            pSVData->maWinData.mpLastDeacWin = pOldOverlapWindow;
-            bCallDeactivate = false;
-        }
-    }
-    else if ( (pNewRealWindow->GetType() != WINDOW_FLOATINGWINDOW) ||
-              pNewRealWindow->GetActivateMode() )
-    {
-        if ( pSVData->maWinData.mpLastDeacWin )
-        {
-            if ( pSVData->maWinData.mpLastDeacWin == pNewOverlapWindow )
-                bCallActivate = false;
-            else
-            {
-                Window* pLastRealWindow = pSVData->maWinData.mpLastDeacWin->ImplGetWindow();
-                pSVData->maWinData.mpLastDeacWin->mpWindowImpl->mbActive = false;
-                pSVData->maWinData.mpLastDeacWin->Deactivate();
-                if ( pLastRealWindow != pSVData->maWinData.mpLastDeacWin )
-                {
-                    pLastRealWindow->mpWindowImpl->mbActive = true;
-                    pLastRealWindow->Activate();
-                }
-            }
-            pSVData->maWinData.mpLastDeacWin = NULL;
-        }
-    }
-
-    if ( bCallDeactivate )
-    {
-        if( pOldOverlapWindow->mpWindowImpl->mbActive )
-        {
-            pOldOverlapWindow->mpWindowImpl->mbActive = false;
-            pOldOverlapWindow->Deactivate();
-        }
-        if ( pOldRealWindow != pOldOverlapWindow )
-        {
-            if( pOldRealWindow->mpWindowImpl->mbActive )
-            {
-                pOldRealWindow->mpWindowImpl->mbActive = false;
-                pOldRealWindow->Deactivate();
-            }
-        }
-    }
-    if ( bCallActivate && ! pNewOverlapWindow->mpWindowImpl->mbActive )
-    {
-        if( ! pNewOverlapWindow->mpWindowImpl->mbActive )
-        {
-            pNewOverlapWindow->mpWindowImpl->mbActive = true;
-            pNewOverlapWindow->Activate();
-        }
-        if ( pNewRealWindow != pNewOverlapWindow )
-        {
-            if( ! pNewRealWindow->mpWindowImpl->mbActive )
-            {
-                pNewRealWindow->mpWindowImpl->mbActive = true;
-                pNewRealWindow->Activate();
-            }
-        }
-    }
-}
-
 static bool IsWindowFocused(const WindowImpl& rWinImpl)
 {
     if (rWinImpl.mpSysObj)
@@ -4012,362 +3598,6 @@ void Window::StateChanged( StateChangedType eType )
     }
 }
 
-void Window::DataChanged( const DataChangedEvent& )
-{
-}
-
-void Window::ImplNotifyKeyMouseCommandEventListeners( NotifyEvent& rNEvt )
-{
-    if( rNEvt.GetType() == EVENT_COMMAND )
-    {
-        const CommandEvent* pCEvt = rNEvt.GetCommandEvent();
-        if ( pCEvt->GetCommand() != COMMAND_CONTEXTMENU )
-            // non context menu events are not to be notified up the chain
-            // so we return immediately
-            return;
-
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-        {
-            if ( rNEvt.GetWindow() == this )
-                // not interested in: The event listeners are already called in ::Command,
-                // and calling them here a second time doesn't make sense
-                ;
-            else
-            {
-                CommandEvent aCommandEvent = ImplTranslateCommandEvent( *pCEvt, rNEvt.GetWindow(), this );
-                ImplCallEventListeners( VCLEVENT_WINDOW_COMMAND, &aCommandEvent );
-            }
-        }
-    }
-
-    // #82968# notify event listeners for mouse and key events separately and
-    // not in PreNotify ( as for focus listeners )
-    // this allows for processing those events internally first and pass it to
-    // the toolkit later
-
-    ImplDelData aDelData;
-    ImplAddDel( &aDelData );
-
-    if( rNEvt.GetType() == EVENT_MOUSEMOVE )
-    {
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-        {
-            if ( rNEvt.GetWindow() == this )
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEMOVE, (void*)rNEvt.GetMouseEvent() );
-            else
-            {
-                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEMOVE, &aMouseEvent );
-            }
-        }
-    }
-    else if( rNEvt.GetType() == EVENT_MOUSEBUTTONUP )
-    {
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-        {
-            if ( rNEvt.GetWindow() == this )
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, (void*)rNEvt.GetMouseEvent() );
-            else
-            {
-                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONUP, &aMouseEvent );
-            }
-        }
-    }
-    else if( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
-    {
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-        {
-            if ( rNEvt.GetWindow() == this )
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, (void*)rNEvt.GetMouseEvent() );
-            else
-            {
-                MouseEvent aMouseEvent = ImplTranslateMouseEvent( *rNEvt.GetMouseEvent(), rNEvt.GetWindow(), this );
-                ImplCallEventListeners( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, &aMouseEvent );
-            }
-        }
-    }
-    else if( rNEvt.GetType() == EVENT_KEYINPUT )
-    {
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-            ImplCallEventListeners( VCLEVENT_WINDOW_KEYINPUT, (void*)rNEvt.GetKeyEvent() );
-    }
-    else if( rNEvt.GetType() == EVENT_KEYUP )
-    {
-        if ( mpWindowImpl->mbCompoundControl || ( rNEvt.GetWindow() == this ) )
-            ImplCallEventListeners( VCLEVENT_WINDOW_KEYUP, (void*)rNEvt.GetKeyEvent() );
-    }
-
-    if ( aDelData.IsDead() )
-        return;
-    ImplRemoveDel( &aDelData );
-
-    // #106721# check if we're part of a compound control and notify
-    Window *pParent = ImplGetParent();
-    while( pParent )
-    {
-        if( pParent->IsCompoundControl() )
-        {
-            pParent->ImplNotifyKeyMouseCommandEventListeners( rNEvt );
-            break;
-        }
-        pParent = pParent->ImplGetParent();
-    }
-}
-
-bool Window::PreNotify( NotifyEvent& rNEvt )
-{
-    bool bDone = false;
-    if ( mpWindowImpl->mpParent && !ImplIsOverlapWindow() )
-        bDone = mpWindowImpl->mpParent->PreNotify( rNEvt );
-
-    if ( !bDone )
-    {
-        if( rNEvt.GetType() == EVENT_GETFOCUS )
-        {
-            bool bCompoundFocusChanged = false;
-            if ( mpWindowImpl->mbCompoundControl && !mpWindowImpl->mbCompoundControlHasFocus && HasChildPathFocus() )
-            {
-                mpWindowImpl->mbCompoundControlHasFocus = true;
-                bCompoundFocusChanged = true;
-            }
-
-            if ( bCompoundFocusChanged || ( rNEvt.GetWindow() == this ) )
-                ImplCallEventListeners( VCLEVENT_WINDOW_GETFOCUS );
-        }
-        else if( rNEvt.GetType() == EVENT_LOSEFOCUS )
-        {
-            bool bCompoundFocusChanged = false;
-            if ( mpWindowImpl->mbCompoundControl && mpWindowImpl->mbCompoundControlHasFocus && !HasChildPathFocus() )
-            {
-                mpWindowImpl->mbCompoundControlHasFocus = false ;
-                bCompoundFocusChanged = true;
-            }
-
-            if ( bCompoundFocusChanged || ( rNEvt.GetWindow() == this ) )
-                ImplCallEventListeners( VCLEVENT_WINDOW_LOSEFOCUS );
-        }
-
-        // #82968# mouse and key events will be notified after processing ( in ImplNotifyKeyMouseCommandEventListeners() )!
-        //    see also ImplHandleMouseEvent(), ImplHandleKey()
-
-    }
-
-    return bDone;
-}
-
-bool Window::Notify( NotifyEvent& rNEvt )
-{
-    bool nRet = false;
-
-    // check for docking window
-    // but do nothing if window is docked and locked
-    ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this );
-    if( pWrapper && !( !pWrapper->IsFloatingMode() && pWrapper->IsLocked() ) )
-    {
-        if ( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
-        {
-            const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
-            bool bHit = pWrapper->GetDragArea().IsInside( pMEvt->GetPosPixel() );
-            if ( pMEvt->IsLeft() )
-            {
-                if ( pMEvt->IsMod1() && (pMEvt->GetClicks() == 2) )
-                {
-                    // ctrl double click toggles floating mode
-                    pWrapper->SetFloatingMode( !pWrapper->IsFloatingMode() );
-                    return true;
-                }
-                else if ( pMEvt->GetClicks() == 1 && bHit)
-                {
-                    // allow start docking during mouse move
-                    pWrapper->ImplEnableStartDocking();
-                    return true;
-                }
-            }
-        }
-        else if ( rNEvt.GetType() == EVENT_MOUSEMOVE )
-        {
-            const MouseEvent* pMEvt = rNEvt.GetMouseEvent();
-            bool bHit = pWrapper->GetDragArea().IsInside( pMEvt->GetPosPixel() );
-            if ( pMEvt->IsLeft() )
-            {
-                // check if a single click initiated this sequence ( ImplStartDockingEnabled() )
-                // check if window is docked and
-                if( pWrapper->ImplStartDockingEnabled() && !pWrapper->IsFloatingMode() &&
-                    !pWrapper->IsDocking() && bHit )
-                {
-                    Point   aPos = pMEvt->GetPosPixel();
-                    Window* pWindow = rNEvt.GetWindow();
-                    if ( pWindow != this )
-                    {
-                        aPos = pWindow->OutputToScreenPixel( aPos );
-                        aPos = ScreenToOutputPixel( aPos );
-                    }
-                    pWrapper->ImplStartDocking( aPos );
-                }
-                return true;
-            }
-        }
-        else if( rNEvt.GetType() == EVENT_KEYINPUT )
-        {
-            const KeyCode& rKey = rNEvt.GetKeyEvent()->GetKeyCode();
-            if( rKey.GetCode() == KEY_F10 && rKey.GetModifier() &&
-                rKey.IsShift() && rKey.IsMod1() )
-            {
-                pWrapper->SetFloatingMode( !pWrapper->IsFloatingMode() );
-                /* At this point the floating toolbar frame does not have the
-                 * input focus since these frames don't get the focus per default
-                 * To enable keyboard handling of this toolbar set the input focus
-                 * to the frame. This needs to be done with ToTop since GrabFocus
-                 * would not notice any change since "this" already has the focus.
-                 */
-                if( pWrapper->IsFloatingMode() )
-                    ToTop( TOTOP_GRABFOCUSONLY );
-                return true;
-            }
-        }
-    }
-
-    // manage the dialogs
-    if ( (GetStyle() & (WB_DIALOGCONTROL | WB_NODIALOGCONTROL)) == WB_DIALOGCONTROL )
-    {
-        // if the parent also has dialog control activated, the parent takes over control
-        if ( (rNEvt.GetType() == EVENT_KEYINPUT) || (rNEvt.GetType() == EVENT_KEYUP) )
-        {
-            if ( ImplIsOverlapWindow() ||
-                 ((getNonLayoutRealParent(this)->GetStyle() & (WB_DIALOGCONTROL | WB_NODIALOGCONTROL)) != WB_DIALOGCONTROL) )
-            {
-                nRet = ImplDlgCtrl( *rNEvt.GetKeyEvent(), rNEvt.GetType() == EVENT_KEYINPUT );
-            }
-        }
-        else if ( (rNEvt.GetType() == EVENT_GETFOCUS) || (rNEvt.GetType() == EVENT_LOSEFOCUS) )
-        {
-            ImplDlgCtrlFocusChanged( rNEvt.GetWindow(), rNEvt.GetType() == EVENT_GETFOCUS );
-            if ( (rNEvt.GetWindow() == this) && (rNEvt.GetType() == EVENT_GETFOCUS) &&
-                 !(GetStyle() & WB_TABSTOP) && !(mpWindowImpl->mnDlgCtrlFlags & WINDOW_DLGCTRL_WANTFOCUS) )
-            {
-                sal_uInt16 n = 0;
-                Window* pFirstChild = ImplGetDlgWindow( n, DLGWINDOW_FIRST );
-                if ( pFirstChild )
-                    pFirstChild->ImplControlFocus();
-            }
-        }
-    }
-
-    if ( !nRet )
-    {
-        if ( mpWindowImpl->mpParent && !ImplIsOverlapWindow() )
-            nRet = mpWindowImpl->mpParent->Notify( rNEvt );
-    }
-
-    return nRet;
-}
-
-void Window::ImplCallEventListeners( sal_uLong nEvent, void* pData )
-{
-    // The implementation was moved to CallEventListeners(),
-    // because derived classes in svtools must be able to
-    // call the event listeners and ImplCallEventListeners()
-    // is not exported.
-    // TODO: replace ImplCallEventListeners() by CallEventListeners() in vcl
-
-    CallEventListeners( nEvent, pData );
-}
-
-void Window::CallEventListeners( sal_uLong nEvent, void* pData )
-{
-    VclWindowEvent aEvent( this, nEvent, pData );
-
-    ImplDelData aDelData;
-    ImplAddDel( &aDelData );
-
-    ImplGetSVData()->mpApp->ImplCallEventListeners( &aEvent );
-
-    if ( aDelData.IsDead() )
-        return;
-
-    mpWindowImpl->maEventListeners.Call( &aEvent );
-
-    if ( aDelData.IsDead() )
-        return;
-
-    ImplRemoveDel( &aDelData );
-
-    Window* pWindow = this;
-    while ( pWindow )
-    {
-        pWindow->ImplAddDel( &aDelData );
-
-        pWindow->mpWindowImpl->maChildEventListeners.Call( &aEvent );
-
-        if ( aDelData.IsDead() )
-            return;
-
-        pWindow->ImplRemoveDel( &aDelData );
-
-        pWindow = pWindow->GetParent();
-    }
-}
-
-void Window::FireVclEvent( VclSimpleEvent* pEvent )
-{
-    ImplGetSVData()->mpApp->ImplCallEventListeners(pEvent);
-}
-
-void Window::AddEventListener( const Link& rEventListener )
-{
-    mpWindowImpl->maEventListeners.addListener( rEventListener );
-}
-
-void Window::RemoveEventListener( const Link& rEventListener )
-{
-    mpWindowImpl->maEventListeners.removeListener( rEventListener );
-}
-
-void Window::AddChildEventListener( const Link& rEventListener )
-{
-    mpWindowImpl->maChildEventListeners.addListener( rEventListener );
-}
-
-void Window::RemoveChildEventListener( const Link& rEventListener )
-{
-    mpWindowImpl->maChildEventListeners.removeListener( rEventListener );
-}
-
-ImplSVEvent * Window::PostUserEvent( const Link& rLink, void* pCaller )
-{
-    ImplSVEvent* pSVEvent = new ImplSVEvent;
-    pSVEvent->mpData    = pCaller;
-    pSVEvent->mpLink    = new Link( rLink );
-    pSVEvent->mpWindow  = this;
-    pSVEvent->mbCall    = true;
-    ImplAddDel( &(pSVEvent->maDelData) );
-    if ( !mpWindowImpl->mpFrame->PostEvent( pSVEvent ) )
-    {
-        ImplRemoveDel( &(pSVEvent->maDelData) );
-        delete pSVEvent->mpLink;
-        delete pSVEvent;
-        pSVEvent = 0;
-    }
-    return pSVEvent;
-}
-
-void Window::RemoveUserEvent( ImplSVEvent * nUserEvent )
-{
-    DBG_ASSERT( nUserEvent->mpWindow == this,
-                "Window::RemoveUserEvent(): Event doesn't send to this window or is already removed" );
-    DBG_ASSERT( nUserEvent->mbCall,
-                "Window::RemoveUserEvent(): Event is already removed" );
-
-    if ( nUserEvent->mpWindow )
-    {
-        nUserEvent->mpWindow->ImplRemoveDel( &(nUserEvent->maDelData) );
-        nUserEvent->mpWindow = NULL;
-    }
-
-    nUserEvent->mbCall = false;
-}
-
 bool Window::IsLocked( bool bChildren ) const
 {
     if ( mpWindowImpl->mnLockCount != 0 )
@@ -4606,127 +3836,6 @@ void Window::SetCompositionCharRect( const Rectangle* pRect, long nCompositionLe
     }
 }
 
-void Window::SetSettings( const AllSettings& rSettings )
-{
-    SetSettings( rSettings, false );
-}
-
-void Window::SetSettings( const AllSettings& rSettings, bool bChild )
-{
-
-    if ( mpWindowImpl->mpBorderWindow )
-    {
-        mpWindowImpl->mpBorderWindow->SetSettings( rSettings, false );
-        if ( (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) &&
-             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow )
-            ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow->SetSettings( rSettings, true );
-    }
-
-    AllSettings aOldSettings(*mxSettings);
-    OutputDevice::SetSettings( rSettings );
-    sal_uLong nChangeFlags = aOldSettings.GetChangeFlags( rSettings );
-
-    // recalculate AppFont-resolution and DPI-resolution
-    ImplInitResolutionSettings();
-
-    if ( nChangeFlags )
-    {
-        DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags );
-        DataChanged( aDCEvt );
-    }
-
-    if ( bChild || mpWindowImpl->mbChildNotify )
-    {
-        Window* pChild = mpWindowImpl->mpFirstChild;
-        while ( pChild )
-        {
-            pChild->SetSettings( rSettings, bChild );
-            pChild = pChild->mpWindowImpl->mpNext;
-        }
-    }
-}
-
-void Window::UpdateSettings( const AllSettings& rSettings, bool bChild )
-{
-
-    if ( mpWindowImpl->mpBorderWindow )
-    {
-        mpWindowImpl->mpBorderWindow->UpdateSettings( rSettings, false );
-        if ( (mpWindowImpl->mpBorderWindow->GetType() == WINDOW_BORDERWINDOW) &&
-             ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow )
-            ((ImplBorderWindow*)mpWindowImpl->mpBorderWindow)->mpMenuBarWindow->UpdateSettings( rSettings, true );
-    }
-
-    AllSettings aOldSettings(*mxSettings);
-    sal_uLong nChangeFlags = mxSettings->Update( mxSettings->GetWindowUpdate(), rSettings );
-    nChangeFlags |= SETTINGS_IN_UPDATE_SETTINGS; // Set this flag so the receiver of the data changed
-                                                 // event can distinguish between the changing of global
-                                                 // setting and a local change ( with SetSettings )
-
-    // recalculate AppFont-resolution and DPI-resolution
-    ImplInitResolutionSettings();
-
-    /* #i73785#
-    *  do not overwrite a WheelBehavior with false
-    *  this looks kind of a hack, but WheelBehavior
-    *  is always a local change, not a system property,
-    *  so we can spare all our users the hassle of reacting on
-    *  this in their respective DataChanged.
-    */
-    MouseSettings aSet( mxSettings->GetMouseSettings() );
-    aSet.SetWheelBehavior( aOldSettings.GetMouseSettings().GetWheelBehavior() );
-    mxSettings->SetMouseSettings( aSet );
-
-    if( (nChangeFlags & SETTINGS_STYLE) && IsBackground() )
-    {
-        Wallpaper aWallpaper = GetBackground();
-        if( !aWallpaper.IsBitmap() && !aWallpaper.IsGradient() )
-        {
-            if ( mpWindowImpl->mnStyle & WB_3DLOOK )
-            {
-                if (aOldSettings.GetStyleSettings().GetFaceColor() != rSettings.GetStyleSettings().GetFaceColor())
-                    SetBackground( Wallpaper( rSettings.GetStyleSettings().GetFaceColor() ) );
-            }
-            else
-            {
-                if (aOldSettings.GetStyleSettings().GetWindowColor() != rSettings.GetStyleSettings().GetWindowColor())
-                    SetBackground( Wallpaper( rSettings.GetStyleSettings().GetWindowColor() ) );
-            }
-        }
-    }
-
-    if ( nChangeFlags )
-    {
-        DataChangedEvent aDCEvt( DATACHANGED_SETTINGS, &aOldSettings, nChangeFlags );
-        DataChanged( aDCEvt );
-        // notify data change handler
-        ImplCallEventListeners( VCLEVENT_WINDOW_DATACHANGED, &aDCEvt);
-    }
-
-    if ( bChild || mpWindowImpl->mbChildNotify )
-    {
-        Window* pChild = mpWindowImpl->mpFirstChild;
-        while ( pChild )
-        {
-            pChild->UpdateSettings( rSettings, bChild );
-            pChild = pChild->mpWindowImpl->mpNext;
-        }
-    }
-}
-
-void Window::NotifyAllChildren( DataChangedEvent& rDCEvt )
-{
-
-    DataChanged( rDCEvt );
-
-    Window* pChild = mpWindowImpl->mpFirstChild;
-    while ( pChild )
-    {
-        pChild->NotifyAllChildren( rDCEvt );
-        pChild = pChild->mpWindowImpl->mpNext;
-    }
-}
-
 void Window::CollectChildren(::std::vector<Window *>& rAllChildren )
 {
     rAllChildren.push_back( this );


More information about the Libreoffice-commits mailing list