[Libreoffice-commits] core.git: include/vcl sc/source vcl/inc vcl/source vcl/unx

Attila Szűcs (via logerrit) logerrit at kemper.freedesktop.org
Wed Jan 20 16:24:05 UTC 2021


 include/vcl/toolkit/treelistbox.hxx  |    6 ++++++
 include/vcl/weld.hxx                 |    2 ++
 sc/source/ui/cctrl/checklistmenu.cxx |    3 +++
 vcl/inc/salvtables.hxx               |    2 ++
 vcl/inc/svimpbox.hxx                 |    1 +
 vcl/source/app/salvtables.cxx        |    5 +++++
 vcl/source/treelist/treelistbox.cxx  |    6 ++++--
 vcl/unx/gtk3/gtk3gtkinst.cxx         |    4 ++++
 8 files changed, 27 insertions(+), 2 deletions(-)

New commits:
commit 3d2a431da1126f4924f6cd7e5abac6488cd480e7
Author:     Attila Szűcs <szucs.attila3 at nisz.hu>
AuthorDate: Thu Jan 7 19:07:23 2021 +0100
Commit:     László Németh <nemeth at numbertext.org>
CommitDate: Wed Jan 20 17:23:24 2021 +0100

    tdf#139115 vcl tree list: add new toggle behaviors
    
    at clicking on list items with checkboxes to clean-up
    generic VCL plugin commit 2471d6f44c7e8ecbe86a90eeb593b899a08a7408
    (tdf#116675 vcl tree list: toggle by label click (e.g. in AutoFilter)).
    
    This limits the new toggle-always to ScCheckListMenuControl
    (e.g. AutoFilter).
    
    set_clicks_to_toggle() options to set the effect of the
    click on a treeview list item:
    
    0 == clicking never toggles the checkbox (default setting)
    
    1 == clicking always toggles the checkbox
    
    2 == clicking only toggles the checkbox of a selected list item,
         i.e. the first click selects a not selected list item, and
         only the second click toggles its checkbox.
    
    It would be better if we could set this information in the
    .ui files, but I did not find a good way for that.
    
    A good place in the code to call this function can be
    found by searching for the .ui filename.
    
    Co-authored-by: Tibor Nagy (NISZ)
    
    Change-Id: I5c72d710508fc397f2b6f959d7680b23f8dc6f67
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108947
    Tested-by: László Németh <nemeth at numbertext.org>
    Reviewed-by: László Németh <nemeth at numbertext.org>

diff --git a/include/vcl/toolkit/treelistbox.hxx b/include/vcl/toolkit/treelistbox.hxx
index 199f37c093e8..895c6c15d860 100644
--- a/include/vcl/toolkit/treelistbox.hxx
+++ b/include/vcl/toolkit/treelistbox.hxx
@@ -221,6 +221,9 @@ class VCL_DLLPUBLIC SvTreeListBox
     bool mbQuickSearch; // Enables type-ahead search in the check list box.
     bool mbActivateOnSingleClick; // Make single click "activate" a row like a double-click normally does
     bool mbHoverSelection; // Make mouse over a row "select" a row like a single-click normally does
+    sal_Int8        mnClicksToToggle; // 0 == Click on a row not toggle its checkbox.
+                                      // 1 == Every click on row toggle its checkbox.
+                                      // 2 == First click select, second click toggle.
 
     SvTreeListEntry*    pHdlEntry;
 
@@ -680,6 +683,9 @@ public:
     void            SetHoverSelection(bool bEnable) { mbHoverSelection = bEnable; }
     bool            GetHoverSelection() const { return mbHoverSelection; }
 
+    // Set when clicks toggle the checkbox of the row.
+    void            SetClicksToToggle(sal_Int8 nCount) { mnClicksToToggle = nCount; }
+
     void            SetForceMakeVisible(bool bEnable);
 
     virtual FactoryFunction GetUITestFactory() const override;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index fcf0749f96c7..b788a1313b74 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -958,6 +958,8 @@ public:
     // inserted after this call which can be accessed with col index -1
     virtual void enable_toggle_buttons(ColumnToggleType eType) = 0;
 
+    virtual void set_clicks_to_toggle(int nToggleBehavior) = 0;
+
     //by index
     virtual int get_selected_index() const = 0;
     //Don't select when frozen, select after thaw. Note selection doesn't survive a freeze.
diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx
index b9f51cb84471..00d8a882d80c 100644
--- a/sc/source/ui/cctrl/checklistmenu.cxx
+++ b/sc/source/ui/cctrl/checklistmenu.cxx
@@ -463,6 +463,9 @@ ScCheckListMenuControl::ScCheckListMenuControl(ScCheckListMenuWindow* pParent, v
     , maOpenTimer(this)
     , maCloseTimer(this)
 {
+    mxTreeChecks->set_clicks_to_toggle(1);
+    mxListChecks->set_clicks_to_toggle(1);
+
     /*
        tdf#136559 If we have no dates we don't need a tree
        structure, just a list. GtkListStore can be then
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index b8a71e08f917..8d8138690bf1 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1496,6 +1496,8 @@ public:
 
     virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col = -1) override;
 
+    virtual void set_clicks_to_toggle(int nToggleBehavior) override;
+
     virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override;
 
     void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col = -1);
diff --git a/vcl/inc/svimpbox.hxx b/vcl/inc/svimpbox.hxx
index ae171cca8e65..54382ea6e5d7 100644
--- a/vcl/inc/svimpbox.hxx
+++ b/vcl/inc/svimpbox.hxx
@@ -188,6 +188,7 @@ protected:
     VclPtr<SvTreeListBox>   m_pView;
     VclPtr<ScrollBar>       m_aVerSBar;
     SvTreeListEntry*        m_pCursor;
+    SvTreeListEntry*        m_pCursorOld;
     SvTreeListEntry*        m_pStartEntry;
     ImplSVEvent*            m_nCurUserEvent;
     Size                    m_aOutputSize;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 06d8c8f89533..6183b1a3ac24 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4061,6 +4061,11 @@ void SalInstanceTreeView::set_toggle(const weld::TreeIter& rIter, TriState eStat
     set_toggle(rVclIter.iter, eState, col);
 }
 
+void SalInstanceTreeView::set_clicks_to_toggle(int nToggleBehavior)
+{
+    m_xTreeView->SetClicksToToggle(nToggleBehavior);
+}
+
 void SalInstanceTreeView::set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel)
 {
     weld::TreeIter& rNonConstIter = const_cast<weld::TreeIter&>(rIter);
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 818c6481c0e5..5211bb56ecc1 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -399,6 +399,7 @@ SvTreeListBox::SvTreeListBox(vcl::Window* pParent, WinBits nWinStyle) :
     mbQuickSearch(false),
     mbActivateOnSingleClick(false),
     mbHoverSelection(false),
+    mnClicksToToggle(0), //at default clicking on a row won't toggle its default checkbox
     eSelMode(SelectionMode::NONE),
     nMinWidthInChars(0),
     mnDragAction(DND_ACTION_COPYMOVE | DND_ACTION_LINK),
@@ -2283,17 +2284,18 @@ void SvTreeListBox::Paint(vcl::RenderContext& rRenderContext, const tools::Recta
 
 void SvTreeListBox::MouseButtonDown( const MouseEvent& rMEvt )
 {
+    pImpl->m_pCursorOld = pImpl->m_pCursor;
     pImpl->MouseButtonDown( rMEvt );
 }
 
 void SvTreeListBox::MouseButtonUp( const MouseEvent& rMEvt )
 {
     // tdf#116675 clicking on an entry should toggle its checkbox
-    if (rMEvt.IsLeft() && (nTreeFlags & SvTreeFlags::CHKBTN))
+    if (rMEvt.IsLeft() && (nTreeFlags & SvTreeFlags::CHKBTN) && mnClicksToToggle > 0)
     {
         const Point aPnt = rMEvt.GetPosPixel();
         SvTreeListEntry* pEntry = GetEntry(aPnt);
-        if (pEntry && pEntry->m_Items.size() > 0)
+        if (pEntry && pEntry->m_Items.size() > 0 && (mnClicksToToggle == 1 || pEntry == pImpl->m_pCursorOld))
         {
             SvLBoxItem* pItem = GetItem(pEntry, aPnt.X());
             // if the checkbox button was clicked, that will be toggled later, do not toggle here
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index f019bd014ab0..a42dbd5f4d8b 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -11334,6 +11334,10 @@ public:
         }
     }
 
+    virtual void set_clicks_to_toggle(int /*nToggleBehavior*/) override
+    {
+    }
+
     virtual void set_extra_row_indent(const weld::TreeIter& rIter, int nIndentLevel) override
     {
         const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);


More information about the Libreoffice-commits mailing list