[Libreoffice-commits] core.git: cui/source include/vcl sw/source vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Jun 5 14:57:55 UTC 2020


 cui/source/dialogs/multipat.cxx |    5 +----
 cui/source/options/certpath.cxx |    5 +----
 cui/source/options/optjava.cxx  |    5 +----
 include/vcl/weld.hxx            |    5 ++---
 sw/source/ui/index/cnttab.cxx   |    6 +-----
 vcl/source/app/salvtables.cxx   |   11 ++++++++---
 vcl/unx/gtk3/gtk3gtkinst.cxx    |   18 ++++++++++++++++++
 7 files changed, 32 insertions(+), 23 deletions(-)

New commits:
commit 32e49998b2edde7a6a8fecddf5da71f3aa5815c2
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Jun 5 12:31:58 2020 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Jun 5 16:57:17 2020 +0200

    we can't mix radiobuttons and checkbuttons so don't imply otherwise
    
    Change-Id: I11a85090bd14d8655efb95433417764dd1f79052
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95592
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/dialogs/multipat.cxx b/cui/source/dialogs/multipat.cxx
index 5b38d584d76f..bd121578c3bb 100644
--- a/cui/source/dialogs/multipat.cxx
+++ b/cui/source/dialogs/multipat.cxx
@@ -197,10 +197,7 @@ SvxMultiPathDialog::SvxMultiPathDialog(weld::Window* pParent)
     std::vector<int> aWidths;
     aWidths.push_back(m_xRadioLB->get_checkbox_column_width());
     m_xRadioLB->set_column_fixed_widths(aWidths);
-
-    std::vector<int> aRadioColumns;
-    aRadioColumns.push_back(0);
-    m_xRadioLB->set_toggle_columns_as_radio(aRadioColumns);
+    m_xRadioLB->set_toggle_columns_as_radio();
     m_xRadioLB->connect_toggled(LINK(this, SvxMultiPathDialog, CheckHdl_Impl));
     m_xRadioLB->connect_changed(LINK(this, SvxMultiPathDialog, SelectHdl_Impl));
     m_xAddBtn->connect_clicked(LINK(this, SvxMultiPathDialog, AddHdl_Impl));
diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx
index 3f2359a5ac50..3b491dadaf89 100644
--- a/cui/source/options/certpath.cxx
+++ b/cui/source/options/certpath.cxx
@@ -38,10 +38,7 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
     aWidths.push_back(m_xCertPathList->get_checkbox_column_width());
     aWidths.push_back(m_xCertPathList->get_approximate_digit_width() * 20);
     m_xCertPathList->set_column_fixed_widths(aWidths);
-
-    std::vector<int> aRadioColumns;
-    aRadioColumns.push_back(0);
-    m_xCertPathList->set_toggle_columns_as_radio(aRadioColumns);
+    m_xCertPathList->set_toggle_columns_as_radio();
 
     m_xCertPathList->connect_toggled(LINK(this, CertPathDialog, CheckHdl_Impl));
     m_xManualButton->connect_clicked( LINK( this, CertPathDialog, ManualHdl_Impl ) );
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 2d4df6cb3069..d9a54e0f250d 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -92,10 +92,7 @@ SvxJavaOptionsPage::SvxJavaOptionsPage(weld::Container* pPage, weld::DialogContr
     aWidths.push_back(m_xJavaList->get_checkbox_column_width());
     aWidths.push_back(m_xJavaList->get_pixel_size("Sun Microsystems Inc.").Width());
     m_xJavaList->set_column_fixed_widths(aWidths);
-
-    std::vector<int> aRadioColumns;
-    aRadioColumns.push_back(0);
-    m_xJavaList->set_toggle_columns_as_radio(aRadioColumns);
+    m_xJavaList->set_toggle_columns_as_radio();
 
     m_xJavaEnableCB->connect_clicked( LINK( this, SvxJavaOptionsPage, EnableHdl_Impl ) );
     m_xJavaList->connect_toggled( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) );
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index fedf414432c3..b53bf27c7902 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -793,8 +793,6 @@ protected:
     std::function<int(const weld::TreeIter&, const weld::TreeIter&)> m_aCustomSort;
 
 protected:
-    std::vector<int> m_aRadioIndexes;
-
     void signal_changed() { m_aChangeHdl.Call(*this); }
     bool signal_row_activated() { return m_aRowActivatedHdl.Call(*this); }
     void signal_column_clicked(int nColumn) { m_aColumnClickedHdl.Call(nColumn); }
@@ -1134,7 +1132,8 @@ public:
     // remove the selected nodes
     virtual void remove_selection() = 0;
 
-    void set_toggle_columns_as_radio(const std::vector<int>& rCols) { m_aRadioIndexes = rCols; }
+    // call before inserting any content
+    virtual void set_toggle_columns_as_radio() = 0;
 
     virtual void vadjustment_set_value(int value) = 0;
     virtual int vadjustment_get_value() const = 0;
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index 91e41c7a8b2e..300d046df5d0 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -499,11 +499,7 @@ SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(weld::Window* pParent,
     m_xLeftPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
     m_xRightPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
     m_xHeaderTree->connect_size_allocate(LINK(this, SwAddStylesDlg_Impl, TreeSizeAllocHdl));
-
-    std::vector<int> aRadioColumns;
-    for (sal_uInt16 i = 0; i <= MAXLEVEL; ++i)
-        aRadioColumns.push_back(i + 1);
-    m_xHeaderTree->set_toggle_columns_as_radio(aRadioColumns);
+    m_xHeaderTree->set_toggle_columns_as_radio();
     m_xHeaderTree->connect_toggled(LINK(this, SwAddStylesDlg_Impl, RadioToggleOnHdl));
 
     std::vector<int> aWidths;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index e00adc86f6a5..5125af466f6b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3202,6 +3202,7 @@ private:
     o3tl::sorted_vector<SvTreeListEntry*> m_aExpandingPlaceHolderParents;
     // which columns should be custom rendered
     o3tl::sorted_vector<int> m_aCustomRenders;
+    bool m_bTogglesAsRadio;
     bool m_bDisableCheckBoxAutoWidth;
     int m_nSortColumn;
 
@@ -3329,6 +3330,7 @@ public:
         , m_xTreeView(pTreeView)
         , m_aCheckButtonData(pTreeView, false)
         , m_aRadioButtonData(pTreeView, true)
+        , m_bTogglesAsRadio(false)
         , m_bDisableCheckBoxAutoWidth(false)
         , m_nSortColumn(-1)
     {
@@ -3814,10 +3816,13 @@ public:
         return ::get_toggle(rVclIter.iter, col);
     }
 
+    virtual void set_toggle_columns_as_radio() override
+    {
+        m_bTogglesAsRadio = true;
+    }
+
     void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col)
     {
-        bool bRadio = std::find(m_aRadioIndexes.begin(), m_aRadioIndexes.end(), col)
-                      != m_aRadioIndexes.end();
         ++col; //skip dummy/expander column
 
         // blank out missing entries
@@ -3826,7 +3831,7 @@ public:
 
         if (static_cast<size_t>(col) == pEntry->ItemCount())
         {
-            SvLBoxButtonData* pData = bRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
+            SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
 
             // if we want to have the implicit auto-sizing of the checkbox
             // column we need to call EnableCheckButton and CheckBoxInserted to
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index b07acf43e0b6..f48e98c46903 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -10430,6 +10430,24 @@ public:
         }
     }
 
+    virtual void set_toggle_columns_as_radio() override
+    {
+        for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
+        {
+            GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data);
+            GList *pRenderers = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(pColumn));
+            for (GList* pRenderer = g_list_first(pRenderers); pRenderer; pRenderer = g_list_next(pRenderer))
+            {
+                GtkCellRenderer* pCellRenderer = GTK_CELL_RENDERER(pRenderer->data);
+                if (!GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
+                    continue;
+                GtkCellRendererToggle* pToggle = GTK_CELL_RENDERER_TOGGLE(pCellRenderer);
+                gtk_cell_renderer_toggle_set_radio(pToggle, true);
+            }
+            g_list_free(pRenderers);
+        }
+    }
+
     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