Blame SOURCES/0356-sw-lok-comments-handle-mouse-up-down-events-on-the-v.patch

f325b2
From 107c94bbccb8c2607d02bc37096a332c90ba9e83 Mon Sep 17 00:00:00 2001
f325b2
From: Miklos Vajna <vmiklos@collabora.co.uk>
f325b2
Date: Mon, 23 Nov 2015 16:21:43 +0100
f325b2
Subject: [PATCH 356/398] sw lok comments: handle mouse up/down events on the
f325b2
 vertical scrollbar
f325b2
f325b2
(cherry picked from commit 527190f0c0284a9a4f5a021d0a9163ef9a63a67f)
f325b2
f325b2
Change-Id: Ib1c334825a6629224fe0c8fba564656d53e67410
f325b2
---
f325b2
 sw/source/uibase/docvw/SidebarWin.cxx | 55 ++++++++++++++++++++++++++++-------
f325b2
 1 file changed, 45 insertions(+), 10 deletions(-)
f325b2
f325b2
diff --git a/sw/source/uibase/docvw/SidebarWin.cxx b/sw/source/uibase/docvw/SidebarWin.cxx
f325b2
index 47c65c86b06b..c95a8909de54 100644
f325b2
--- a/sw/source/uibase/docvw/SidebarWin.cxx
f325b2
+++ b/sw/source/uibase/docvw/SidebarWin.cxx
f325b2
@@ -93,9 +93,19 @@ void lcl_translateTwips(vcl::Window& rParent, vcl::Window& rChild, MouseEvent* p
f325b2
 {
f325b2
     // Set map mode, so that callback payloads will contain absolute coordinates instead of relative ones.
f325b2
     Point aOffset(rChild.GetOutOffXPixel() - rParent.GetOutOffXPixel(), rChild.GetOutOffYPixel() - rParent.GetOutOffYPixel());
f325b2
+    if (!rChild.IsMapModeEnabled())
f325b2
+    {
f325b2
+        MapMode aMapMode(rChild.GetMapMode());
f325b2
+        aMapMode.SetMapUnit(MAP_TWIP);
f325b2
+        aMapMode.SetScaleX(rParent.GetMapMode().GetScaleX());
f325b2
+        aMapMode.SetScaleY(rParent.GetMapMode().GetScaleY());
f325b2
+        rChild.SetMapMode(aMapMode);
f325b2
+        rChild.EnableMapMode();
f325b2
+    }
f325b2
     aOffset = rChild.PixelToLogic(aOffset);
f325b2
     MapMode aMapMode(rChild.GetMapMode());
f325b2
     aMapMode.SetOrigin(aOffset);
f325b2
+    aMapMode.SetMapUnit(rParent.GetMapMode().GetMapUnit());
f325b2
     rChild.SetMapMode(aMapMode);
f325b2
     rChild.EnableMapMode(false);
f325b2
 
f325b2
@@ -109,6 +119,31 @@ void lcl_translateTwips(vcl::Window& rParent, vcl::Window& rChild, MouseEvent* p
f325b2
     }
f325b2
 }
f325b2
 
f325b2
+/// Decide which one from the children of rParent should get rMouseEvent.
f325b2
+vcl::Window* lcl_getHitWindow(sw::sidebarwindows::SwSidebarWin& rParent, const MouseEvent& rMouseEvent)
f325b2
+{
f325b2
+    vcl::Window* pRet = 0;
f325b2
+
f325b2
+    rParent.EditWin()->Push(PushFlags::MAPMODE);
f325b2
+    rParent.EditWin()->EnableMapMode();
f325b2
+    for (sal_Int16 i = rParent.GetChildCount() - 1; i >= 0; --i)
f325b2
+    {
f325b2
+        vcl::Window* pChild = rParent.GetChild(i);
f325b2
+
f325b2
+        Point aPosition(rParent.GetPosPixel());
f325b2
+        aPosition.Move(pChild->GetPosPixel().getX(), pChild->GetPosPixel().getY());
f325b2
+        Size aSize(rParent.GetSizePixel());
f325b2
+        Rectangle aRectangleLogic(rParent.EditWin()->PixelToLogic(aPosition), rParent.EditWin()->PixelToLogic(aSize));
f325b2
+        if (aRectangleLogic.IsInside(rMouseEvent.GetPosPixel()))
f325b2
+        {
f325b2
+            pRet = pChild;
f325b2
+            break;
f325b2
+        }
f325b2
+    }
f325b2
+    rParent.EditWin()->Pop();
f325b2
+    return pRet;
f325b2
+}
f325b2
+
f325b2
 }
f325b2
 
f325b2
 namespace sw { namespace sidebarwindows {
f325b2
@@ -442,29 +477,29 @@ void SwSidebarWin::MouseMove(const MouseEvent& rMouseEvent)
f325b2
 
f325b2
 void SwSidebarWin::MouseButtonDown(const MouseEvent& rMouseEvent)
f325b2
 {
f325b2
-    if (mpSidebarTextControl)
f325b2
+    if (vcl::Window* pHit = lcl_getHitWindow(*this, rMouseEvent))
f325b2
     {
f325b2
-        mpSidebarTextControl->Push(PushFlags::MAPMODE);
f325b2
+        pHit->Push(PushFlags::MAPMODE);
f325b2
         MouseEvent aMouseEvent(rMouseEvent);
f325b2
-        lcl_translateTwips(*EditWin(), *mpSidebarTextControl, &aMouseEvent);
f325b2
+        lcl_translateTwips(*EditWin(), *pHit, &aMouseEvent);
f325b2
 
f325b2
-        mpSidebarTextControl->MouseButtonDown(aMouseEvent);
f325b2
+        pHit->MouseButtonDown(aMouseEvent);
f325b2
 
f325b2
-        mpSidebarTextControl->Pop();
f325b2
+        pHit->Pop();
f325b2
     }
f325b2
 }
f325b2
 
f325b2
 void SwSidebarWin::MouseButtonUp(const MouseEvent& rMouseEvent)
f325b2
 {
f325b2
-    if (mpSidebarTextControl)
f325b2
+    if (vcl::Window* pHit = lcl_getHitWindow(*this, rMouseEvent))
f325b2
     {
f325b2
-        mpSidebarTextControl->Push(PushFlags::MAPMODE);
f325b2
+        pHit->Push(PushFlags::MAPMODE);
f325b2
         MouseEvent aMouseEvent(rMouseEvent);
f325b2
-        lcl_translateTwips(*EditWin(), *mpSidebarTextControl, &aMouseEvent);
f325b2
+        lcl_translateTwips(*EditWin(), *pHit, &aMouseEvent);
f325b2
 
f325b2
-        mpSidebarTextControl->MouseButtonUp(aMouseEvent);
f325b2
+        pHit->MouseButtonUp(aMouseEvent);
f325b2
 
f325b2
-        mpSidebarTextControl->Pop();
f325b2
+        pHit->Pop();
f325b2
     }
f325b2
 }
f325b2
 
f325b2
-- 
f325b2
2.12.0
f325b2