[Libreoffice-commits] core.git: sw/source
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 19 00:23:13 UTC 2021
sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx | 32 +++++++++++++++--
sw/source/uibase/inc/FrameControl.hxx | 1
2 files changed, 31 insertions(+), 2 deletions(-)
New commits:
commit d748430c7d12d71a4cc4ed178e072026ea218641
Author: Jim Raykowski <raykowj at gmail.com>
AuthorDate: Tue Apr 13 13:47:44 2021 -0800
Commit: Jim Raykowski <raykowj at gmail.com>
CommitDate: Mon Apr 19 02:22:35 2021 +0200
Ensure outline content visibility 'Hide' button is removed
when mouse move leaving window event results in move outside of the
outline frame area and when entering a 'Show' button directly from a
'Hide' button which is required by gtk3 but not gen.
Change-Id: Ib4d834b8a3b9051ec628406b8da369986a9e1e21
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114071
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj at gmail.com>
diff --git a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
index 263009c13683..a50832c3385f 100644
--- a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
+++ b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
@@ -23,6 +23,8 @@
#include <viewopt.hxx>
+#include <FrameControlsManager.hxx>
+
SwOutlineContentVisibilityWin::SwOutlineContentVisibilityWin(SwEditWin* pEditWin,
const SwFrame* pFrame)
: InterimItemWindow(pEditWin, "modules/swriter/ui/outlinebutton.ui", "OutlineButton")
@@ -223,14 +225,40 @@ IMPL_LINK(SwOutlineContentVisibilityWin, MouseMoveHdl, const MouseEvent&, rMEvt,
auto nY = GetPosPixel().getY() + rMEvt.GetPosPixel().getY();
if (nY <= 0 || nY <= aFrameAreaPxRect.Top() || nY >= aFrameAreaPxRect.Bottom()
|| nY >= GetEditWin()->GetSizePixel().Height())
- Hide();
+ {
+ GetEditWin()->SetSavedOutlineFrame(nullptr);
+ GetEditWin()->GetFrameControlsManager().RemoveControlsByType(
+ FrameControlType::Outline, GetFrame());
+ // warning: "this" is disposed now
+ }
}
}
else if (rMEvt.IsEnterWindow())
{
+ // Leave window event might not have resulted in removing hide button from saved frame
+ // and the edit win might not receive mouse event between leaving saved frame button and
+ // entering this button.
+ if (GetFrame() != GetEditWin()->GetSavedOutlineFrame())
+ {
+ SwFrameControlPtr pFrameControl = GetEditWin()->GetFrameControlsManager().GetControl(
+ FrameControlType::Outline, GetEditWin()->GetSavedOutlineFrame());
+ if (pFrameControl)
+ {
+ SwOutlineContentVisibilityWin* pControl
+ = dynamic_cast<SwOutlineContentVisibilityWin*>(pFrameControl->GetIFacePtr());
+ if (pControl && pControl->GetSymbol() == ButtonSymbol::HIDE)
+ {
+ GetEditWin()->GetFrameControlsManager().RemoveControlsByType(
+ FrameControlType::Outline, GetEditWin()->GetSavedOutlineFrame());
+ // The outline content visibility window frame control (hide button)
+ // for saved outline frame is now disposed.
+ }
+ }
+ GetEditWin()->SetSavedOutlineFrame(const_cast<SwFrame*>(GetFrame()));
+ }
if (!m_bDestroyed && m_aDelayTimer.IsActive())
m_aDelayTimer.Stop();
- // bring button to top and grab focus
+ // bring button to top
SetZOrder(this, ZOrderFlags::First);
}
return false;
diff --git a/sw/source/uibase/inc/FrameControl.hxx b/sw/source/uibase/inc/FrameControl.hxx
index a2cc7e9edf21..9efce9cf699e 100644
--- a/sw/source/uibase/inc/FrameControl.hxx
+++ b/sw/source/uibase/inc/FrameControl.hxx
@@ -46,6 +46,7 @@ public:
~SwFrameControl();
vcl::Window* GetWindow() { return mxWindow.get(); }
+ ISwFrameControl* GetIFacePtr() { return mpIFace; }
void SetReadonly( bool bReadonly ) { mpIFace->SetReadonly( bReadonly ); }
void ShowAll( bool bShow ) { mpIFace->ShowAll( bShow ); }
More information about the Libreoffice-commits
mailing list