diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-11-12 14:21:03 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2015-11-16 11:38:24 +0100 |
commit | 2f6784080df8e22bc29d9e817ea9b17ecbcbf700 (patch) | |
tree | d72cd6f2e70cb17a001054a6c0ef98a2f1d14022 /sw | |
parent | 932353ebd8422a393405c52923c8a0e3a5dc4e50 (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.hxx | 2 | ||||
-rw-r--r-- | sw/inc/SidebarWin.hxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/docvw/PostItMgr.cxx | 31 | ||||
-rw-r--r-- | sw/source/uibase/docvw/SidebarWin.cxx | 8 | ||||
-rw-r--r-- | sw/source/uibase/docvw/edtwin.cxx | 15 |
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(); |