[Libreoffice-commits] core.git: sw/inc sw/source
Miklos Vajna
vmiklos at collabora.co.uk
Thu Nov 12 05:24:13 PST 2015
sw/inc/PostItMgr.hxx | 2 ++
sw/inc/SidebarWin.hxx | 2 ++
sw/source/uibase/docvw/PostItMgr.cxx | 31 +++++++++++++++++++++++++++++++
sw/source/uibase/docvw/SidebarWin.cxx | 8 ++++++++
sw/source/uibase/docvw/edtwin.cxx | 16 ++++++++++++++++
5 files changed, 59 insertions(+)
New commits:
commit b7ecf6279ef3343f12fce776862c027bfeff6617
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Thu Nov 12 14:21:03 2015 +0100
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.
Change-Id: I67e8e19f47156261fd7c7eafd4e63f743e0c4ce9
diff --git a/sw/inc/PostItMgr.hxx b/sw/inc/PostItMgr.hxx
index dbf4ce3..7427c7a 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 fb47322..f42bcb3 100644
--- a/sw/inc/SidebarWin.hxx
+++ b/sw/inc/SidebarWin.hxx
@@ -178,6 +178,8 @@ class SwSidebarWin : public vcl::Window
virtual void Draw(OutputDevice* pDev, const Point&, const Size&, DrawFlags) 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) override;
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
index b0f62a0..9622a10 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 414f3aa..ee2ed58 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, DrawFlags nInFlags)
{
if (mpMetadataAuthor->IsVisible() )
diff --git a/sw/source/uibase/docvw/edtwin.cxx b/sw/source/uibase/docvw/edtwin.cxx
index 498771a..a33257c 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -2764,6 +2764,22 @@ 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(nullptr);
GrabFocus();
More information about the Libreoffice-commits
mailing list