include/vcl/weld/TreeView.hxx      |    3 ++-
 vcl/inc/qt5/QtInstanceTreeView.hxx |    2 +-
 vcl/inc/salvtables.hxx             |    2 +-
 vcl/qt5/QtInstanceTreeView.cxx     |    2 +-
 vcl/source/app/salvtables.cxx      |   10 ++--------
 vcl/source/treelist/treelist.cxx   |   12 +++---------
 vcl/source/weld/TreeView.cxx       |    8 ++++++++
 vcl/unx/gtk3/gtkinst.cxx           |    7 +------
 8 files changed, 19 insertions(+), 27 deletions(-)

New commits:
commit d74c234b3dbfb68b42394847a55e69bca09a7d53
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sun Jan 11 00:09:16 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Jan 13 19:35:55 2026 +0100

    vcl: Simplify SvTreeList::Prev
    
    Use the existing SvTreeListEntry::PrevSibling
    to get the previous sibling.
    
    Change-Id: I1b31efe03546d77c04384ce80f77202dafffb417
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196995
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index f9d9106392b6..1f158e5fd04a 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -529,17 +529,11 @@ SvTreeListEntry* SvTreeList::Prev( SvTreeListEntry* 
pActEntry ) const
 {
     assert(pActEntry && "Entry?");
 
-    SvTreeListEntries* pActualList = &pActEntry->pParent->m_Children;
-    sal_uInt32 nActualPos = pActEntry->GetChildListPos();
-
-    if ( nActualPos > 0 )
+    if (SvTreeListEntry* pPrevSibling = pActEntry->PrevSibling())
     {
-        pActEntry = (*pActualList)[nActualPos-1].get();
+        pActEntry = pPrevSibling;
         while (!pActEntry->m_Children.empty())
-        {
-            pActualList = &pActEntry->m_Children;
-            pActEntry = pActualList->back().get();
-        }
+            pActEntry = pActEntry->m_Children.back().get();
         return pActEntry;
     }
     if ( pActEntry->pParent == pRootItem.get() )
commit 9d055f5261b4436527eb7ad2b37fbdb201a11d4d
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Jan 10 21:46:57 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Jan 13 19:35:48 2026 +0100

    tdf#130857 weld: Filter dummy entries in base weld::TreeView::iter_children
    
    Make the so far purely virtual weld::TreeView::iter_children
    a new method implemented directly in the base class that
    wraps the new purely virtual weld::TreeView::do_iter_children.
    
    Let the new base class implementation/wrapper detect
    when a node is a children-on-demand-node (as described
    in the "expanding on-demand node details" comment
    above weld::TreeView::get_row_expanded) and return
    false right there, to unify and deduplicate the toolkit-specific
    implementations a bit.
    
    This is also one step to prepare for implementing support for
    on-demand children in the Qt implementation.
    
    Change-Id: I9c0d5e5893ebef029c0065b45b0805d009b99516
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196994
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index 0a5ddfbaa209..6fb8b9ed8031 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -132,6 +132,7 @@ protected:
     using weld::ItemView::do_set_cursor;
     virtual void do_set_cursor(int pos) = 0;
     virtual void do_scroll_to_row(const TreeIter& rIter) = 0;
+    virtual bool do_iter_children(TreeIter& rIter) const = 0;
     virtual void do_set_children_on_demand(const TreeIter& rIter, bool 
bChildrenOnDemand) = 0;
     virtual void do_remove_selection() = 0;
 
@@ -318,7 +319,7 @@ public:
     // set iter to point to previous node, sibling first then depth
     virtual bool iter_previous(TreeIter& rIter) const = 0;
     // set iter to point to first child node
-    virtual bool iter_children(TreeIter& rIter) const = 0;
+    bool iter_children(TreeIter& rIter) const;
     bool iter_nth_sibling(TreeIter& rIter, int nChild) const
     {
         bool bRet = true;
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index 4fe51d26fa2c..f7b6dcbaf15e 100644
--- a/vcl/inc/qt5/QtInstanceTreeView.hxx
+++ b/vcl/inc/qt5/QtInstanceTreeView.hxx
@@ -64,7 +64,7 @@ public:
     virtual bool iter_previous_sibling(weld::TreeIter& rIter) const override;
     virtual bool iter_next(weld::TreeIter& rIter) const override;
     virtual bool iter_previous(weld::TreeIter& rIter) const override;
-    virtual bool iter_children(weld::TreeIter& rIter) const override;
+    virtual bool do_iter_children(weld::TreeIter& rIter) const override;
     virtual bool iter_parent(weld::TreeIter& rIter) const override;
     virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
 
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 4b2806d1814b..10bda5c0cee1 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1732,7 +1732,7 @@ public:
 
     virtual bool iter_previous(weld::TreeIter& rIter) const override;
 
-    virtual bool iter_children(weld::TreeIter& rIter) const override;
+    virtual bool do_iter_children(weld::TreeIter& rIter) const override;
 
     virtual bool iter_parent(weld::TreeIter& rIter) const override;
 
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index f1ced87e9d0e..e59ef68c67f1 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -233,7 +233,7 @@ bool QtInstanceTreeView::iter_previous(weld::TreeIter&) 
const
     return false;
 }
 
-bool QtInstanceTreeView::iter_children(weld::TreeIter& rIter) const
+bool QtInstanceTreeView::do_iter_children(weld::TreeIter& rIter) const
 {
     QtInstanceTreeIter& rQtIter = static_cast<QtInstanceTreeIter&>(rIter);
     const QModelIndex aChildIndex = m_pModel->index(0, 0, 
rQtIter.modelIndex());
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index c1ff84bdfb30..c59762ec6c9e 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4513,17 +4513,11 @@ bool SalInstanceTreeView::iter_previous(weld::TreeIter& 
rIter) const
     return rVclIter.iter != nullptr;
 }
 
-bool SalInstanceTreeView::iter_children(weld::TreeIter& rIter) const
+bool SalInstanceTreeView::do_iter_children(weld::TreeIter& rIter) const
 {
     SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
     rVclIter.iter = m_xTreeView->FirstChild(rVclIter.iter);
-    bool bRet = rVclIter.iter != nullptr;
-    if (bRet)
-    {
-        //on-demand dummy entry doesn't count
-        return !IsDummyEntry(rVclIter.iter);
-    }
-    return bRet;
+    return rVclIter.iter != nullptr;
 }
 
 bool SalInstanceTreeView::iter_parent(weld::TreeIter& rIter) const
diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx
index 4662d8bc6ce1..2e2ce98baaa8 100644
--- a/vcl/source/weld/TreeView.cxx
+++ b/vcl/source/weld/TreeView.cxx
@@ -127,6 +127,14 @@ bool weld::TreeView::is_selected(int pos) const
     return false;
 }
 
+bool weld::TreeView::iter_children(TreeIter& rIter) const
+{
+    if (get_children_on_demand(rIter))
+        return false;
+
+    return do_iter_children(rIter);
+}
+
 bool weld::TreeView::iter_has_child(const TreeIter& rIter) const
 {
     std::unique_ptr<weld::TreeIter> pIter = make_iterator(&rIter);
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index f14f2e75a193..6ee98ef27d36 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -15669,17 +15669,12 @@ public:
         return false;
     }
 
-    virtual bool iter_children(weld::TreeIter& rIter) const override
+    virtual bool do_iter_children(weld::TreeIter& rIter) const override
     {
         GtkInstanceTreeIter& rGtkIter = 
static_cast<GtkInstanceTreeIter&>(rIter);
         GtkTreeIter tmp;
         bool ret = gtk_tree_model_iter_children(m_pTreeModel, &tmp, 
&rGtkIter.iter);
         rGtkIter.iter = tmp;
-        if (ret)
-        {
-            //on-demand dummy entry doesn't count
-            return get_text(rGtkIter, -1) != "<dummy>";
-        }
         return ret;
     }
 

Reply via email to