summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-11-12 14:21:03 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-11-16 11:38:24 +0100
commit2f6784080df8e22bc29d9e817ea9b17ecbcbf700 (patch)
treed72cd6f2e70cb17a001054a6c0ef98a2f1d14022 /sw
parent932353ebd8422a393405c52923c8a0e3a5dc4e50 (diff)
sw lok: route SwEditWin::MouseButtonDown to SidebarTextControl if necessary
LOK sends all mouse events to SwEditWin, so add initial hit testing in its mouse handler to forward the mouse events to the right VCL widget. (cherry picked from commit b7ecf6279ef3343f12fce776862c027bfeff6617) Conflicts: sw/inc/PostItMgr.hxx sw/source/uibase/docvw/SidebarWin.cxx sw/source/uibase/docvw/edtwin.cxx Change-Id: I67e8e19f47156261fd7c7eafd4e63f743e0c4ce9
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/PostItMgr.hxx2
-rw-r--r--sw/inc/SidebarWin.hxx2
-rw-r--r--sw/source/uibase/docvw/PostItMgr.cxx31
-rw-r--r--sw/source/uibase/docvw/SidebarWin.cxx8
-rw-r--r--sw/source/uibase/docvw/edtwin.cxx15
5 files changed, 58 insertions, 0 deletions
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index 2f9e32849db1..9451c3f39387 100644
--- a/sw/inc/PostItMgr.hxx
+++ b/sw/inc/PostItMgr.hxx
@@ -234,6 +234,8 @@ class SwPostItMgr: public SfxListener
Rectangle GetTopScrollRect(const unsigned long aPage) const;
bool IsHit(const Point &aPointPixel);
+ /// Get the matching window that is responsible for handling mouse events of rPointLogic, if any.
+ vcl::Window* IsHitSidebarWindow(const Point& rPointLogic);
Color GetArrowColor(sal_uInt16 aDirection,unsigned long aPage) const;
sw::annotation::SwAnnotationWin* GetAnnotationWin(const SwPostItField* pField) const;
diff --git a/sw/inc/SidebarWin.hxx b/sw/inc/SidebarWin.hxx
index 59d3ea61e024..fc95ec8996e5 100644
--- a/sw/inc/SidebarWin.hxx
+++ b/sw/inc/SidebarWin.hxx
@@ -179,6 +179,8 @@ class SwSidebarWin : public vcl::Window
virtual void Draw(OutputDevice* pDev, const Point&, const Size&, sal_uLong) SAL_OVERRIDE;
void PaintTile(vcl::RenderContext& rRenderContext, const Rectangle& rRect);
+ /// Get the matching sub-widget inside this sidebar widget for rPointLogic, if any.
+ vcl::Window* IsHitWindow(const Point& rPointLogic);
protected:
virtual void DataChanged( const DataChangedEvent& aEvent) SAL_OVERRIDE;
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index 2a2e5d596056..eb5755e20cf9 100644
--- a/sw/source/uibase/docvw/PostItMgr.cxx
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
@@ -1706,6 +1706,37 @@ bool SwPostItMgr::IsHit(const Point &aPointPixel)
}
return false;
}
+
+vcl::Window* SwPostItMgr::IsHitSidebarWindow(const Point& rPointLogic)
+{
+ vcl::Window* pRet = 0;
+
+ if (HasNotes() && ShowNotes())
+ {
+ bool bEnableMapMode = !mpEditWin->IsMapModeEnabled();
+ if (bEnableMapMode)
+ mpEditWin->EnableMapMode();
+
+ for (SwSidebarItem* pItem : mvPostItFields)
+ {
+ SwSidebarWin* pPostIt = pItem->pPostIt;
+ if (!pPostIt)
+ continue;
+
+ if (vcl::Window* pWindow = pPostIt->IsHitWindow(rPointLogic))
+ {
+ pRet = pWindow;
+ break;
+ }
+ }
+
+ if (bEnableMapMode)
+ mpEditWin->EnableMapMode(false);
+ }
+
+ return pRet;
+}
+
Rectangle SwPostItMgr::GetBottomScrollRect(const unsigned long aPage) const
{
SwRect aPageRect = mPages[aPage-1]->mPageRect;
diff --git a/sw/source/uibase/docvw/SidebarWin.cxx b/sw/source/uibase/docvw/SidebarWin.cxx
index b8fcf7cdb286..dab3a92e8876 100644
--- a/sw/source/uibase/docvw/SidebarWin.cxx
+++ b/sw/source/uibase/docvw/SidebarWin.cxx
@@ -279,6 +279,14 @@ void SwSidebarWin::PaintTile(vcl::RenderContext& rRenderContext, const Rectangle
rRenderContext.Push(PushFlags::NONE);
}
+vcl::Window* SwSidebarWin::IsHitWindow(const Point& rPointLogic)
+{
+ Rectangle aRectangleLogic(EditWin()->PixelToLogic(GetPosPixel()), EditWin()->PixelToLogic(GetSizePixel()));
+ if (aRectangleLogic.IsInside(rPointLogic))
+ return mpSidebarTextControl;
+ return 0;
+}
+
void SwSidebarWin::Draw(OutputDevice* pDev, const Point& rPt, const Size& rSz, sal_uLong nInFlags)
{
if (mpMetadataAuthor->IsVisible() )
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index f392010fb6b1..11ca1729093f 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -2756,6 +2756,21 @@ void SwEditWin::MouseButtonDown(const MouseEvent& _rMEvt)
if (m_rView.GetPostItMgr()->IsHit(rMEvt.GetPosPixel()))
return;
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ if (vcl::Window* pWindow = m_rView.GetPostItMgr()->IsHitSidebarWindow(rMEvt.GetPosPixel()))
+ {
+ bool bDisableMapMode = pWindow->IsMapModeEnabled();
+ if (bDisableMapMode)
+ pWindow->EnableMapMode(false);
+
+ pWindow->MouseButtonDown(rMEvt);
+
+ if (bDisableMapMode)
+ pWindow->EnableMapMode();
+ return;
+ }
+ }
m_rView.GetPostItMgr()->SetActiveSidebarWin(0);
GrabFocus();