diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-03-06 12:44:32 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-03-06 16:54:17 +0100 |
commit | e165db83d52f55ace9958c93374a21a6bf2676c6 (patch) | |
tree | 597c816e59428bf033018dcd0cbd07b745e4e4e4 /vcl/unx | |
parent | c91f87fae09dc8de2e87c8b794ba606fff54e5a6 (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.cxx | 27 |
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); |