summaryrefslogtreecommitdiff
path: root/vcl/unx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-03-06 12:44:32 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-03-06 16:54:17 +0100
commite165db83d52f55ace9958c93374a21a6bf2676c6 (patch)
tree597c816e59428bf033018dcd0cbd07b745e4e4e4 /vcl/unx
parentc91f87fae09dc8de2e87c8b794ba606fff54e5a6 (diff)
add iter_previous
Change-Id: Id481e687c623db6ade6c17d039f347e66cb167aa Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90106 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/unx')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx27
1 files changed, 26 insertions, 1 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index cb0fb884affe..bf480535ec8e 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9125,7 +9125,7 @@ private:
return true;
}
- void last_child(GtkTreeModel* pModel, GtkTreeIter* result, GtkTreeIter* pParent, int nChildren)
+ void last_child(GtkTreeModel* pModel, GtkTreeIter* result, GtkTreeIter* pParent, int nChildren) const
{
gtk_tree_model_iter_nth_child(pModel, result, pParent, nChildren - 1);
nChildren = gtk_tree_model_iter_n_children(pModel, result);
@@ -10118,6 +10118,31 @@ public:
return false;
}
+ virtual bool iter_previous(weld::TreeIter& rIter) const override
+ {
+ GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);
+ GtkTreeModel *pModel = GTK_TREE_MODEL(m_pTreeStore);
+ GtkTreeIter iter = rGtkIter.iter;
+ GtkTreeIter tmp = iter;
+ if (gtk_tree_model_iter_previous(pModel, &tmp))
+ {
+ // Move down level(s) until we find the level where the last node exists.
+ int nChildren = gtk_tree_model_iter_n_children(pModel, &tmp);
+ if (!nChildren)
+ rGtkIter.iter = tmp;
+ else
+ last_child(pModel, &rGtkIter.iter, &tmp, nChildren);
+ return true;
+ }
+ // Move up level
+ if (gtk_tree_model_iter_parent(pModel, &tmp, &iter))
+ {
+ rGtkIter.iter = tmp;
+ return true;
+ }
+ return false;
+ }
+
virtual bool iter_children(weld::TreeIter& rIter) const override
{
GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(rIter);