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 35205c6e3e2f85d9b7db935689ec949c98e7e431 Author: Caolán McNamara <[email protected]> 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 (cherry picked from commit bdfccfde308f0267965933a8273e6e9201a2c67c) 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 83ae01c..e13e205 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 [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
