vcl/inc/svdata.hxx            |    1 +
 vcl/source/window/window.cxx  |    4 ++++
 vcl/source/window/winproc.cxx |   12 ++++++------
 3 files changed, 11 insertions(+), 6 deletions(-)

New commits:
commit bdfccfde308f0267965933a8273e6e9201a2c67c
Author: Caolán McNamara <caol...@redhat.com>
Date:   Wed Jun 15 21:05:50 2016 +0100

    crashreport: 644837b5-c445-4779-a75d-dd69fc2e3a6f
    
    drop hint of previous window to get mouse wheel event
    when that window is disposed in order to drop any
    references to it immediately that happens to avoid
    anything else lingering too late
    
    move the VclPtr into ImplSVData alongside the rest
    of the things like this so we can remove the over-the-top
    DeleteOnDeinit which itself replaced a relatively harmless
    static Window*
    
    Change-Id: I1e172071b711b6e4ded9a813ee3de730d3dfdf38

diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 5d0b719..39b5610 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -193,6 +193,7 @@ struct ImplSVWinData
     AutoTimer*              mpTrackTimer;                   // tracking timer
     ImageList*              mpMsgBoxImgList;                // ImageList for 
MessageBox
     VclPtr<vcl::Window>     mpAutoScrollWin;                // window, that is 
in AutoScrollMode mode
+    VclPtr<vcl::Window>     mpLastWheelWindow;              // window, that 
last received a mouse wheel event
     StartTrackingFlags      mnTrackFlags;                   // tracking flags
     StartAutoScrollFlags    mnAutoScrollFlags;              // auto scroll 
flags
     bool                    mbNoDeactivate;                 // true: do not 
execute Deactivate
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 13364c9..e70cdc6 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -477,6 +477,10 @@ void Window::dispose()
     if( pSVData->maWinData.mpActiveApplicationFrame == this )
         pSVData->maWinData.mpActiveApplicationFrame = nullptr;
 
+    // reset hint of what was the last wheeled window
+    if( pSVData->maWinData.mpLastWheelWindow == this )
+        pSVData->maWinData.mpLastWheelWindow = nullptr;
+
     // reset marked windows
     if ( mpWindowImpl->mpFrameData != nullptr )
     {
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index d72d48e..1f46253 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -1475,27 +1475,27 @@ public:
 bool HandleWheelEvent::HandleEvent(const SalWheelMouseEvent& rEvt)
 {
     static SalWheelMouseEvent aPreviousEvent;
-    static vcl::DeleteOnDeinit< VclPtr<vcl::Window> > xPreviousWindow( new 
VclPtr<vcl::Window> );
 
     if (!Setup())
         return false;
 
     VclPtr<vcl::Window> xMouseWindow = FindTarget();
 
+    ImplSVData* pSVData = ImplGetSVData();
+
     // avoid the problem that scrolling via wheel to this point brings a widget
     // under the mouse that also accepts wheel commands, so stick with the old
     // widget if the time gap is very small
-    VclPtr<vcl::Window> tmp = *xPreviousWindow.get();
-    if (shouldReusePreviousMouseWindow(aPreviousEvent, rEvt) && 
acceptableWheelScrollTarget(tmp))
+    if (shouldReusePreviousMouseWindow(aPreviousEvent, rEvt) && 
acceptableWheelScrollTarget(pSVData->maWinData.mpLastWheelWindow))
     {
-        xMouseWindow = tmp;
+        xMouseWindow = pSVData->maWinData.mpLastWheelWindow;
     }
 
     aPreviousEvent = rEvt;
 
-    (*xPreviousWindow.get()) = Dispatch(xMouseWindow);
+    pSVData->maWinData.mpLastWheelWindow = Dispatch(xMouseWindow);
 
-    return *xPreviousWindow.get();
+    return pSVData->maWinData.mpLastWheelWindow.get();
 }
 
 class HandleGestureEvent : public HandleGestureEventBase
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to