[Libreoffice-commits] core.git: solenv/sanitizers sw/source sw/uiconfig

Jim Raykowski (via logerrit) logerrit at kemper.freedesktop.org
Thu Mar 18 07:30:00 UTC 2021


 solenv/sanitizers/ui/modules/swriter.suppr             |    4 
 sw/source/uibase/docvw/FrameControlsManager.cxx        |    4 
 sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx |   83 ++++++++---------
 sw/source/uibase/inc/OutlineContentVisibilityWin.hxx   |   15 ++-
 sw/uiconfig/swriter/ui/outlinebutton.ui                |    8 -
 5 files changed, 62 insertions(+), 52 deletions(-)

New commits:
commit 48570b9b5e4939069f8a1a2541fd4efe6f2bb0aa
Author:     Jim Raykowski <raykowj at gmail.com>
AuthorDate: Sat Mar 13 09:49:59 2021 -0900
Commit:     Jim Raykowski <raykowj at gmail.com>
CommitDate: Thu Mar 18 08:29:11 2021 +0100

    tdf#140892 Outline Content Visibility Window button improvements
    
    - Makes the horizontal position of the button near to the first character
    horizontal position in the frame.
    
    - For RTL frames places the button to the right.
    
    - Changes the button symbol for show/expand content from a right-arrow
    to a down-arrow and for hide/collapse content from a down-arrow to an
    up-arrow.
    
    - SymbolType enums are replaced with ButtonSymbol enums to represent the
    button symbol for the outline content visibility state.
    
    Change-Id: Ie5d94b0dec0690c0798098ed19e38cc13d9d2682
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112463
    Tested-by: Jenkins
    Reviewed-by: Jim Raykowski <raykowj at gmail.com>

diff --git a/solenv/sanitizers/ui/modules/swriter.suppr b/solenv/sanitizers/ui/modules/swriter.suppr
index c828774ca825..a3a2bbd9c799 100644
--- a/solenv/sanitizers/ui/modules/swriter.suppr
+++ b/solenv/sanitizers/ui/modules/swriter.suppr
@@ -122,8 +122,8 @@ sw/uiconfig/swriter/ui/notebookbar_groups.ui://GtkLabel[@id='formatgrouplabel']
 sw/uiconfig/swriter/ui/notebookbar_groups.ui://GtkLabel[@id='insertgrouplabel'] orphan-label
 sw/uiconfig/swriter/ui/notebookbar_groups.ui://GtkLabel[@id='tablegrouplabel'] orphan-label
 sw/uiconfig/swriter/ui/notebookbar_groups.ui://GtkLabel[@id='imagegrouplabel'] orphan-label
-sw/uiconfig/swriter/ui/outlinebutton.ui://GtkButton[@id='right'] button-no-label
-sw/uiconfig/swriter/ui/outlinebutton.ui://GtkButton[@id='down'] button-no-label
+sw/uiconfig/swriter/ui/outlinebutton.ui://GtkButton[@id='show'] button-no-label
+sw/uiconfig/swriter/ui/outlinebutton.ui://GtkButton[@id='hide'] button-no-label
 sw/uiconfig/swriter/ui/pagemargincontrol.ui://GtkSpinButton[@id='hidden'] no-labelled-by
 sw/uiconfig/swriter/ui/pagesizecontrol.ui://GtkSpinButton[@id='metric'] no-labelled-by
 sw/uiconfig/swriter/ui/printmonitordialog.ui://GtkLabel[@id='docname'] orphan-label
diff --git a/sw/source/uibase/docvw/FrameControlsManager.cxx b/sw/source/uibase/docvw/FrameControlsManager.cxx
index aaf7aefd1302..622d5fced30b 100644
--- a/sw/source/uibase/docvw/FrameControlsManager.cxx
+++ b/sw/source/uibase/docvw/FrameControlsManager.cxx
@@ -269,7 +269,7 @@ void SwFrameControlsManager::SetOutlineContentVisibilityButton(const SwTextNode*
     assert(pWin != nullptr) ;
     pWin->Set();
 
-    if (pWin->GetSymbol() == SymbolType::ARROW_RIGHT)
+    if (pWin->GetSymbol() == ButtonSymbol::SHOW)
     {
         // show expand button immediately
         pWin->Show();
@@ -308,7 +308,7 @@ void SwFrameControlsManager::SetOutlineContentVisibilityButton(const SwTextNode*
             }
         }
     }
-    else if (!pWin->IsVisible() && pWin->GetSymbol() == SymbolType::ARROW_DOWN)
+    else if (!pWin->IsVisible() && pWin->GetSymbol() == ButtonSymbol::HIDE)
         pWin->ShowAll(true);
 }
 
diff --git a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
index 07f5122d1800..3a8284fd4398 100644
--- a/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
+++ b/sw/source/uibase/docvw/OutlineContentVisibilityWin.cxx
@@ -26,8 +26,8 @@
 SwOutlineContentVisibilityWin::SwOutlineContentVisibilityWin(SwEditWin* pEditWin,
                                                              const SwFrame* pFrame)
     : InterimItemWindow(pEditWin, "modules/swriter/ui/outlinebutton.ui", "OutlineButton")
-    , m_xRightBtn(m_xBuilder->weld_button("right"))
-    , m_xDownBtn(m_xBuilder->weld_button("down"))
+    , m_xShowBtn(m_xBuilder->weld_button("show"))
+    , m_xHideBtn(m_xBuilder->weld_button("hide"))
     , m_pEditWin(pEditWin)
     , m_pFrame(pFrame)
     , m_nDelayAppearing(0)
@@ -38,19 +38,19 @@ SwOutlineContentVisibilityWin::SwOutlineContentVisibilityWin(SwEditWin* pEditWin
     SetPaintTransparent(false);
     SetBackground(rStyleSettings.GetFaceColor());
 
-    Size aBtnsSize(m_xRightBtn->get_preferred_size());
+    Size aBtnsSize(m_xShowBtn->get_preferred_size());
     auto nDim = std::max(aBtnsSize.Width(), aBtnsSize.Height());
-    m_xRightBtn->set_size_request(nDim, nDim);
-    m_xDownBtn->set_size_request(nDim, nDim);
+    m_xShowBtn->set_size_request(nDim, nDim);
+    m_xHideBtn->set_size_request(nDim, nDim);
 
     SetSizePixel(get_preferred_size());
-    SetSymbol(SymbolType::DONTKNOW);
+    SetSymbol(ButtonSymbol::NONE);
 
-    m_xRightBtn->connect_mouse_press(LINK(this, SwOutlineContentVisibilityWin, MousePressHdl));
-    m_xDownBtn->connect_mouse_press(LINK(this, SwOutlineContentVisibilityWin, MousePressHdl));
+    m_xShowBtn->connect_mouse_press(LINK(this, SwOutlineContentVisibilityWin, MousePressHdl));
+    m_xHideBtn->connect_mouse_press(LINK(this, SwOutlineContentVisibilityWin, MousePressHdl));
 
-    m_xRightBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
-    m_xDownBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
+    m_xShowBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
+    m_xHideBtn->connect_key_press(LINK(this, SwOutlineContentVisibilityWin, KeyInputHdl));
 
     m_aDelayTimer.SetTimeout(25);
     m_aDelayTimer.SetInvokeHandler(LINK(this, SwOutlineContentVisibilityWin, DelayAppearHandler));
@@ -64,44 +64,44 @@ void SwOutlineContentVisibilityWin::dispose()
     m_pEditWin.clear();
     m_pFrame = nullptr;
 
-    m_xDownBtn.reset();
-    m_xRightBtn.reset();
+    m_xHideBtn.reset();
+    m_xShowBtn.reset();
 
     InterimItemWindow::dispose();
 }
 
-SymbolType SwOutlineContentVisibilityWin::GetSymbol() const
+ButtonSymbol SwOutlineContentVisibilityWin::GetSymbol() const
 {
-    if (m_xRightBtn->get_visible())
-        return SymbolType::ARROW_RIGHT;
-    if (m_xDownBtn->get_visible())
-        return SymbolType::ARROW_DOWN;
-    return SymbolType::DONTKNOW;
+    if (m_xShowBtn->get_visible())
+        return ButtonSymbol::SHOW;
+    if (m_xHideBtn->get_visible())
+        return ButtonSymbol::HIDE;
+    return ButtonSymbol::NONE;
 }
 
-void SwOutlineContentVisibilityWin::SetSymbol(SymbolType eStyle)
+void SwOutlineContentVisibilityWin::SetSymbol(ButtonSymbol eStyle)
 {
     if (GetSymbol() == eStyle)
         return;
 
-    bool bRight = eStyle == SymbolType::ARROW_RIGHT;
-    bool bDown = eStyle == SymbolType::ARROW_DOWN;
+    bool bShow = eStyle == ButtonSymbol::SHOW;
+    bool bHide = eStyle == ButtonSymbol::HIDE;
 
     bool bControlHasFocus = ControlHasFocus();
 
     // disable mouse move for the hidden button so we don't get mouse
     // leave events we don't care about when we swap buttons
-    m_xRightBtn->connect_mouse_move(Link<const MouseEvent&, bool>());
-    m_xDownBtn->connect_mouse_move(Link<const MouseEvent&, bool>());
+    m_xShowBtn->connect_mouse_move(Link<const MouseEvent&, bool>());
+    m_xHideBtn->connect_mouse_move(Link<const MouseEvent&, bool>());
 
-    m_xRightBtn->set_visible(bRight);
-    m_xDownBtn->set_visible(bDown);
+    m_xShowBtn->set_visible(bShow);
+    m_xHideBtn->set_visible(bHide);
 
     weld::Button* pButton = nullptr;
-    if (bRight)
-        pButton = m_xRightBtn.get();
-    else if (bDown)
-        pButton = m_xDownBtn.get();
+    if (bShow)
+        pButton = m_xShowBtn.get();
+    else if (bHide)
+        pButton = m_xHideBtn.get();
     InitControlBase(pButton);
     if (pButton)
     {
@@ -118,7 +118,7 @@ void SwOutlineContentVisibilityWin::Set()
     // outline node frame containing folded outline node content might be folded so need to hide it
     if (!pTextFrame || pTextFrame->IsInDtor())
     {
-        SetSymbol(SymbolType::DONTKNOW);
+        SetSymbol(ButtonSymbol::NONE);
         Hide();
         return;
     }
@@ -135,8 +135,7 @@ void SwOutlineContentVisibilityWin::Set()
     }
 
     // set symbol displayed on button
-    SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? SymbolType::ARROW_DOWN
-                                                         : SymbolType::ARROW_RIGHT);
+    SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? ButtonSymbol::HIDE : ButtonSymbol::SHOW);
 
     // set quick help
     SwOutlineNodes::size_type nOutlineNodesCount
@@ -150,12 +149,16 @@ void SwOutlineContentVisibilityWin::Set()
     SetQuickHelpText(sQuickHelp);
 
     // Set the position of the window
-    SwRect aSwRect = GetFrame()->getFrameArea(); // not far in margin
-    //SwRect aSwRect = GetFrame()->GetPaintArea(); // far in margin
-    aSwRect.AddTop(GetFrame()->GetTopMargin());
+    SwRect aFrameAreaRect = GetFrame()->getFrameArea();
+    aFrameAreaRect.AddTop(GetFrame()->GetTopMargin());
+    SwRect aCharRect;
+    GetFrame()->GetCharRect(aCharRect, SwPosition(*pTextNode));
     Point aPxPt(GetEditWin()->GetOutDev()->LogicToPixel(
-        aSwRect.TopLeft() - (aSwRect.TopLeft() - aSwRect.BottomLeft()) / 2));
-    aPxPt.AdjustX(-GetSizePixel().getWidth() + 1);
+        Point(aCharRect.Right(), aFrameAreaRect.Center().getY())));
+    if (GetFrame()->IsRightToLeft())
+        aPxPt.AdjustX(5);
+    else
+        aPxPt.AdjustX(-(GetSizePixel().getWidth() + 5));
     aPxPt.AdjustY(-GetSizePixel().getHeight() / 2);
     SetPosPixel(aPxPt);
 }
@@ -215,8 +218,8 @@ void SwOutlineContentVisibilityWin::ToggleOutlineContentVisibility(const bool bS
         rSh.ToggleOutlineContentVisibility(m_nOutlinePos);
     if (!m_bDestroyed)
     {
-        SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? SymbolType::ARROW_DOWN
-                                                             : SymbolType::ARROW_RIGHT);
+        SetSymbol(rSh.IsOutlineContentVisible(m_nOutlinePos) ? ButtonSymbol::HIDE
+                                                             : ButtonSymbol::SHOW);
     }
     rSh.LockView(false);
 }
@@ -248,7 +251,7 @@ IMPL_LINK(SwOutlineContentVisibilityWin, MouseMoveHdl, const MouseEvent&, rMEvt,
     {
         // MouseMove event may not be seen by edit window
         // hide collapse button and grab focus to document
-        if (GetSymbol() != SymbolType::ARROW_RIGHT)
+        if (GetSymbol() != ButtonSymbol::SHOW)
             Hide();
         GrabFocusToDocument();
     }
diff --git a/sw/source/uibase/inc/OutlineContentVisibilityWin.hxx b/sw/source/uibase/inc/OutlineContentVisibilityWin.hxx
index 02866f8532d5..fcd7617e40a1 100644
--- a/sw/source/uibase/inc/OutlineContentVisibilityWin.hxx
+++ b/sw/source/uibase/inc/OutlineContentVisibilityWin.hxx
@@ -12,11 +12,18 @@
 #include "edtwin.hxx"
 #include "FrameControl.hxx"
 
+enum class ButtonSymbol
+{
+    SHOW,
+    HIDE,
+    NONE
+};
+
 class SwOutlineContentVisibilityWin : public InterimItemWindow, public ISwFrameControl
 {
 private:
-    std::unique_ptr<weld::Button> m_xRightBtn;
-    std::unique_ptr<weld::Button> m_xDownBtn;
+    std::unique_ptr<weld::Button> m_xShowBtn;
+    std::unique_ptr<weld::Button> m_xHideBtn;
 
     VclPtr<SwEditWin> m_pEditWin;
     const SwFrame* m_pFrame;
@@ -41,8 +48,8 @@ public:
 
     void Set();
 
-    void SetSymbol(SymbolType eTyle);
-    SymbolType GetSymbol() const;
+    void SetSymbol(ButtonSymbol eTyle);
+    ButtonSymbol GetSymbol() const;
 
 private:
     DECL_LINK(DelayAppearHandler, Timer*, void);
diff --git a/sw/uiconfig/swriter/ui/outlinebutton.ui b/sw/uiconfig/swriter/ui/outlinebutton.ui
index a0c2b9e5db82..775ec4c3cf16 100644
--- a/sw/uiconfig/swriter/ui/outlinebutton.ui
+++ b/sw/uiconfig/swriter/ui/outlinebutton.ui
@@ -5,13 +5,13 @@
   <object class="GtkImage" id="image3">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
-    <property name="icon-name">go-next</property>
+    <property name="icon-name">go-down</property>
     <property name="icon_size">1</property>
   </object>
   <object class="GtkImage" id="image5">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
-    <property name="icon-name">go-down</property>
+    <property name="icon-name">go-up</property>
     <property name="icon_size">1</property>
   </object>
   <object class="GtkBox" id="OutlineButton">
@@ -20,7 +20,7 @@
     <property name="hexpand">True</property>
     <property name="vexpand">True</property>
     <child>
-      <object class="GtkButton" id="right">
+      <object class="GtkButton" id="show">
         <property name="can-focus">True</property>
         <property name="focus-on-click">False</property>
         <property name="receives-default">True</property>
@@ -38,7 +38,7 @@
       </packing>
     </child>
     <child>
-      <object class="GtkButton" id="down">
+      <object class="GtkButton" id="hide">
         <property name="visible">True</property>
         <property name="can-focus">True</property>
         <property name="focus-on-click">False</property>


More information about the Libreoffice-commits mailing list