include/vcl/toolkit/treelist.hxx    |    2 +-
 include/vcl/toolkit/treelistbox.hxx |    2 +-
 include/vcl/weld/TreeView.hxx       |    2 +-
 vcl/inc/qt5/QtInstanceTreeView.hxx  |    1 -
 vcl/inc/salvtables.hxx              |    2 --
 vcl/qt5/QtInstanceTreeView.cxx      |    6 ------
 vcl/source/app/salvtables.cxx       |    6 ------
 vcl/source/treelist/treelist.cxx    |    3 +--
 vcl/source/treelist/treelistbox.cxx |    2 +-
 vcl/source/weld/TreeView.cxx        |    6 ++++++
 vcl/unx/gtk3/gtkinst.cxx            |    6 ------
 11 files changed, 11 insertions(+), 27 deletions(-)

New commits:
commit ec8a326453d6347e9cbcd8724ec0ee6bb275afc5
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Jan 10 20:51:20 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Jan 13 19:35:40 2026 +0100

    tdf#130857 weld: Implement TreeView::iter_has_child in base class
    
    Instead of having a purely virtual method that needs
    to be implemented in each of the toolkit-specific
    subclasses, implement the logic right in the base class.
    
    The new base class logic is equivalent to what the GTK
    and vcl implementations were doing so far.
    
    This also helps in preparation for implementing
    support for dummy/on-demand children (see the
    "expanding on-demand node details" comment above
    weld::TreeView::get_row_expanded) in the Qt
    implementation.
    
    Change-Id: I4a3dec27892a83ed4d94b05a6da1ab1f4ae4ad98
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196993
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx
index 74dc33a219b3..0a5ddfbaa209 100644
--- a/include/vcl/weld/TreeView.hxx
+++ b/include/vcl/weld/TreeView.hxx
@@ -339,7 +339,7 @@ public:
        then 0 is returned.
     */
     virtual int iter_compare(const TreeIter& a, const TreeIter& b) const = 0;
-    virtual bool iter_has_child(const TreeIter& rIter) const = 0;
+    bool iter_has_child(const TreeIter& rIter) const;
     // returns the number of direct children rIter has
     virtual int iter_n_children(const TreeIter& rIter) const = 0;
 
diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx 
b/vcl/inc/qt5/QtInstanceTreeView.hxx
index 0cab09b4565e..4fe51d26fa2c 100644
--- a/vcl/inc/qt5/QtInstanceTreeView.hxx
+++ b/vcl/inc/qt5/QtInstanceTreeView.hxx
@@ -69,7 +69,6 @@ public:
     virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
 
     virtual int iter_compare(const weld::TreeIter& a, const weld::TreeIter& b) 
const override;
-    virtual bool iter_has_child(const weld::TreeIter& rIter) const override;
     virtual int iter_n_children(const weld::TreeIter& rIter) const override;
     virtual void set_extra_row_indent(const weld::TreeIter& rIter, int 
nIndentLevel) override;
     virtual void set_text(const weld::TreeIter& rIter, const OUString& rStr,
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index a2d0f7f285f7..4b2806d1814b 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1746,8 +1746,6 @@ public:
 
     virtual int get_iter_depth(const weld::TreeIter& rIter) const override;
 
-    virtual bool iter_has_child(const weld::TreeIter& rIter) const override;
-
     virtual bool get_row_expanded(const weld::TreeIter& rIter) const override;
 
     virtual bool get_children_on_demand(const weld::TreeIter& rIter) const 
override;
diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx
index 44afabcb0f76..f1ced87e9d0e 100644
--- a/vcl/qt5/QtInstanceTreeView.cxx
+++ b/vcl/qt5/QtInstanceTreeView.cxx
@@ -271,12 +271,6 @@ int QtInstanceTreeView::iter_compare(const 
weld::TreeIter&, const weld::TreeIter
     return 0;
 }
 
-bool QtInstanceTreeView::iter_has_child(const weld::TreeIter& rIter) const
-{
-    const QtInstanceTreeIter& rQtIter = static_cast<const 
QtInstanceTreeIter&>(rIter);
-    return m_pModel->hasChildren(rQtIter.modelIndex());
-}
-
 int QtInstanceTreeView::iter_n_children(const weld::TreeIter& rIter) const
 {
     const QtInstanceTreeIter& rQtIter = static_cast<const 
QtInstanceTreeIter&>(rIter);
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 10b3e9ec4044..c1ff84bdfb30 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4564,12 +4564,6 @@ int SalInstanceTreeView::get_iter_depth(const 
weld::TreeIter& rIter) const
     return m_xTreeView->GetModel()->GetDepth(rVclIter.iter);
 }
 
-bool SalInstanceTreeView::iter_has_child(const weld::TreeIter& rIter) const
-{
-    SalInstanceTreeIter aTempCopy(static_cast<const 
SalInstanceTreeIter*>(&rIter));
-    return iter_children(aTempCopy);
-}
-
 bool SalInstanceTreeView::get_row_expanded(const weld::TreeIter& rIter) const
 {
     const SalInstanceTreeIter& rVclIter = static_cast<const 
SalInstanceTreeIter&>(rIter);
diff --git a/vcl/source/weld/TreeView.cxx b/vcl/source/weld/TreeView.cxx
index c19791de8dc1..4662d8bc6ce1 100644
--- a/vcl/source/weld/TreeView.cxx
+++ b/vcl/source/weld/TreeView.cxx
@@ -126,6 +126,12 @@ bool weld::TreeView::is_selected(int pos) const
 
     return false;
 }
+
+bool weld::TreeView::iter_has_child(const TreeIter& rIter) const
+{
+    std::unique_ptr<weld::TreeIter> pIter = make_iterator(&rIter);
+    return iter_children(*pIter);
+}
 }
 
 /* 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 5892268aa4bc..f14f2e75a193 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -15760,12 +15760,6 @@ public:
         return ret;
     }
 
-    virtual bool iter_has_child(const weld::TreeIter& rIter) const override
-    {
-        GtkInstanceTreeIter aTempCopy(static_cast<const 
GtkInstanceTreeIter*>(&rIter));
-        return iter_children(aTempCopy);
-    }
-
     virtual bool get_row_expanded(const weld::TreeIter& rIter) const override
     {
         const GtkInstanceTreeIter& rGtkIter = static_cast<const 
GtkInstanceTreeIter&>(rIter);
commit cbc01444f2eeb1ce4d1506d107dc487bca5bdf84
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Jan 10 20:32:15 2026 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Tue Jan 13 19:35:30 2026 +0100

    vcl: Make SvTreeList{,Box}::FirstChild param a const SvTreeListEntry*
    
    The param can be const.
    
    Change-Id: I890f484a40ceda45c35b2be4ad73681d17bf93cc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196992
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/include/vcl/toolkit/treelist.hxx b/include/vcl/toolkit/treelist.hxx
index 504a78363a5f..efe5b12a204a 100644
--- a/include/vcl/toolkit/treelist.hxx
+++ b/include/vcl/toolkit/treelist.hxx
@@ -145,7 +145,7 @@ public:
     SvTreeListEntry*    Prev( SvTreeListEntry* pEntry ) const;
     SvTreeListEntry*    Last() const;
 
-    SvTreeListEntry*    FirstChild( SvTreeListEntry* pParent ) const;
+    SvTreeListEntry* FirstChild(const SvTreeListEntry* pParent) const;
 
     sal_uInt32          Insert( SvTreeListEntry* pEntry,SvTreeListEntry* 
pPar,sal_uInt32 nPos = TREELIST_APPEND);
     sal_uInt32          Insert( SvTreeListEntry* pEntry,sal_uInt32 nRootPos = 
TREELIST_APPEND )
diff --git a/include/vcl/toolkit/treelistbox.hxx 
b/include/vcl/toolkit/treelistbox.hxx
index f7cd71eb6471..553490a5334b 100644
--- a/include/vcl/toolkit/treelistbox.hxx
+++ b/include/vcl/toolkit/treelistbox.hxx
@@ -364,7 +364,7 @@ public:
         return pModel ? pModel->Last() : nullptr;
     }
 
-    SvTreeListEntry* FirstChild( SvTreeListEntry* pParent ) const;
+    SvTreeListEntry* FirstChild(const SvTreeListEntry* pParent) const;
 
     sal_uInt32 GetEntryPos(const SvTreeListEntry* pEntry) const;
 
diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index 3f6d50572f39..f9d9106392b6 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -769,8 +769,7 @@ SvTreeListEntry* SvTreeList::FirstSelected( const 
SvListView* pView) const
     return pActSelEntry;
 }
 
-
-SvTreeListEntry* SvTreeList::FirstChild( SvTreeListEntry* pParent ) const
+SvTreeListEntry* SvTreeList::FirstChild(const SvTreeListEntry* pParent) const
 {
     if ( !pParent )
         pParent = pRootItem.get();
diff --git a/vcl/source/treelist/treelistbox.cxx 
b/vcl/source/treelist/treelistbox.cxx
index b3a6aeeff361..8fb39b1140a0 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -558,7 +558,7 @@ TriState SvTreeListBox::NotifyCopying(
     return NotifyMoving(pTarget,pEntry,rpNewParent,rNewChildPos);
 }
 
-SvTreeListEntry* SvTreeListBox::FirstChild( SvTreeListEntry* pParent ) const
+SvTreeListEntry* SvTreeListBox::FirstChild(const SvTreeListEntry* pParent) 
const
 {
     return pModel->FirstChild(pParent);
 }

Reply via email to