include/vcl/weld/TreeView.hxx      |    2 +-
 vcl/Library_vcl.mk                 |    1 +
 vcl/inc/qt5/QtInstanceTreeView.hxx |    1 -
 vcl/inc/salvtables.hxx             |    5 -----
 vcl/qt5/QtInstanceTreeView.cxx     |   16 ----------------
 vcl/source/app/salvtables.cxx      |   18 ++----------------
 vcl/source/weld/TreeView.cxx       |   24 ++++++++++++++++++++++++
 vcl/unx/gtk3/gtkinst.cxx           |   28 ----------------------------
 8 files changed, 28 insertions(+), 67 deletions(-)

New commits:
commit 0d6539bb2ae53c430f58c85cb03be3c8cf1954c5
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Dec 20 08:32:07 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 20 12:30:36 2025 +0100

    weld: Deduplicate weld::TreeView::get_selected_index impls
    
    There is already weld::TreeView::get_selected
    to get a weld::TreeIter for the currently
    selected entry.
    
    Implement the index-based method using that
    one right in the abstract weld::TreeView base
    class instead of implementing it in each of the
    toolkit-specific subclasses separately.
    
    Change-Id: Iadf72229f025919906ce6820894613a40cd0cc79
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195957
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index b030c9313c66..cd3909ae09b8 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -224,7 +224,7 @@ public:
     virtual void set_clicks_to_toggle(int nToggleBehavior) = 0;
 
     //by index
-    virtual int get_selected_index() const = 0;
+    int get_selected_index() const;
 
     void remove(int pos)
     {
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index f82f3bd5a02a..6b7e5b020f08 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -588,6 +588,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
     vcl/source/weld/IconView \
     vcl/source/weld/ItemView \
     vcl/source/weld/MetricSpinButton \
+    vcl/source/weld/TreeView \
     vcl/source/weld/weldutils \
     vcl/backendtest/outputdevice/bitmap \
     vcl/backendtest/outputdevice/clip \
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index 337991762d9e..9b95c79c3efe 100644
--- a/vcl/inc/qt5/QtInstanceTreeView.hxx
+++ b/vcl/inc/qt5/QtInstanceTreeView.hxx
@@ -55,7 +55,6 @@ public:
 
     virtual void set_clicks_to_toggle(int nToggleBehavior) override;
 
-    virtual int get_selected_index() const override;
     virtual void do_remove(int nPos) override;
     virtual OUString get_text(int nRow, int nCol = -1) const override;
     virtual void set_text(int nRow, const OUString& rText, int nCol = -1) 
override;
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index f885f6933ab7..fe800d6bd80c 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1748,8 +1748,6 @@ public:
     virtual void set_image(const weld::TreeIter& rIter, VirtualDevice& rImage,
                            int col = -1) override;
 
-    virtual int get_selected_index() const override;
-
     virtual void copy_iterator(const weld::TreeIter& rSource, weld::TreeIter& 
rDest) const override;
 
     virtual bool get_selected(weld::TreeIter* pIter) const override;
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index 6f87ee170423..8c590f3ad09d 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -143,22 +143,6 @@ void 
QtInstanceTreeView::enable_toggle_buttons(weld::ColumnToggleType)
 
 void QtInstanceTreeView::set_clicks_to_toggle(int) { assert(false && "Not 
implemented yet"); }
 
-int QtInstanceTreeView::get_selected_index() const
-{
-    SolarMutexGuard g;
-
-    int nIndex = -1;
-    GetQtInstance().RunInMainThread([&] {
-        const QModelIndexList aSelectedIndexes = 
m_pSelectionModel->selectedIndexes();
-        if (aSelectedIndexes.empty())
-            return;
-
-        nIndex = aSelectedIndexes.first().row();
-    });
-
-    return nIndex;
-}
-
 void QtInstanceTreeView::do_remove(int nPos) { do_remove(treeIter(nPos)); }
 
 OUString QtInstanceTreeView::get_text(int nRow, int nCol) const
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 27157e31a376..1a8854d11cf4 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4560,15 +4560,6 @@ void SalInstanceTreeView::set_image(const 
weld::TreeIter& rIter, VirtualDevice&
     set_image(rVclIter.iter, createImage(rImage), col);
 }
 
-int SalInstanceTreeView::get_selected_index() const
-{
-    assert(m_xTreeView->IsUpdateMode() && "don't request selection when 
frozen");
-    SvTreeListEntry* pEntry = m_xTreeView->FirstSelected();
-    if (!pEntry)
-        return -1;
-    return SvTreeList::GetRelPos(pEntry);
-}
-
 void SalInstanceTreeView::copy_iterator(const weld::TreeIter& rSource, 
weld::TreeIter& rDest) const
 {
     const SalInstanceTreeIter& rVclSource(static_cast<const 
SalInstanceTreeIter&>(rSource));
diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx
new file mode 100644
index 000000000000..ccb990d27f9c
--- /dev/null
+++ b/vcl/source/weld/TreeView.cxx
@@ -0,0 +1,24 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <vcl/weld/TreeView.hxx>
+
+namespace weld
+{
+int weld::TreeView::get_selected_index() const
+{
+    std::unique_ptr<weld::TreeIter> pIter = make_iterator();
+    if (get_selected(pIter.get()))
+        return get_iter_index_in_parent(*pIter);
+
+    return -1;
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 9da061781fac..5c5fa040c813 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -15684,34 +15684,6 @@ public:
         move_subtree(rGtkIter.iter, pGtkParentIter ? 
const_cast<GtkTreeIter*>(&pGtkParentIter->iter) : nullptr, nIndexInNewParent);
     }
 
-    virtual int get_selected_index() const override
-    {
-        assert(gtk_tree_view_get_model(m_pTreeView) && "don't request 
selection when frozen");
-        int nRet = -1;
-        GtkTreeSelection *selection = gtk_tree_view_get_selection(m_pTreeView);
-        if (gtk_tree_selection_get_mode(selection) != GTK_SELECTION_MULTIPLE)
-        {
-            GtkTreeIter iter;
-            GtkTreeModel* pModel;
-            if 
(gtk_tree_selection_get_selected(gtk_tree_view_get_selection(m_pTreeView), 
&pModel, &iter))
-            {
-                GtkTreePath* path = gtk_tree_model_get_path(pModel, &iter);
-
-                gint depth;
-                gint* indices = gtk_tree_path_get_indices_with_depth(path, 
&depth);
-                nRet = indices[depth-1];
-
-                gtk_tree_path_free(path);
-            }
-        }
-        else
-        {
-            auto vec = get_selected_rows();
-            return vec.empty() ? -1 : vec[0];
-        }
-        return nRet;
-    }
-
     bool get_selected_iterator(GtkTreeIter* pIter) const
     {
         assert(gtk_tree_view_get_model(m_pTreeView) && "don't request 
selection when frozen");
commit 2bdee0cddd10136b558a95af7562b9e1ee4e8f4d
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Dec 20 08:07:31 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 20 12:30:28 2025 +0100

    vcl weld: Merge both SalInstanceItemView::set_id
    
    With
    
        Change-Id: Idd8f674f7852987723040e3af2335645b395fe46
        Author: Michael Weghorn <[email protected]>
        Date:   Sat Dec 20 08:03:00 2025 +0100
    
            weld: Implement index-based ItemView::{g,s}et_id in base class
    
    in place, the helper method is only used in one
    place, so inline the logic there.
    
    Change-Id: Ia0a4df6c58dab5c396c3730770e1ffc3c1e26eb2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/195956
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index faccdee57f12..f885f6933ab7 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1527,9 +1527,6 @@ public:
 
     virtual int n_children() const override;
 
-protected:
-    void set_id(SvTreeListEntry* pEntry, const OUString& rId);
-
 private:
     const OUString* getEntryData(int index) const;
 };
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 63550d320a4a..27157e31a376 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3567,16 +3567,11 @@ OUString SalInstanceItemView::get_id(const 
weld::TreeIter& rIter) const
     return OUString();
 }
 
-void SalInstanceItemView::set_id(SvTreeListEntry* pEntry, const OUString& rId)
-{
-    m_aUserData.emplace_back(std::make_unique<OUString>(rId));
-    pEntry->SetUserData(m_aUserData.back().get());
-}
-
 void SalInstanceItemView::set_id(const weld::TreeIter& rIter, const OUString& 
rId)
 {
     const SalInstanceTreeIter& rVclIter = static_cast<const 
SalInstanceTreeIter&>(rIter);
-    set_id(rVclIter.iter, rId);
+    m_aUserData.emplace_back(std::make_unique<OUString>(rId));
+    rVclIter.iter->SetUserData(m_aUserData.back().get());
 }
 
 OUString SalInstanceItemView::get_selected_id() const

Reply via email to