[Libreoffice-commits] core.git: include/vcl vcl/source vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri Mar 6 15:54:55 UTC 2020


 include/vcl/weld.hxx          |    2 ++
 vcl/source/app/salvtables.cxx |    9 +++++++++
 vcl/unx/gtk3/gtk3gtkinst.cxx  |   27 ++++++++++++++++++++++++++-
 3 files changed, 37 insertions(+), 1 deletion(-)

New commits:
commit e165db83d52f55ace9958c93374a21a6bf2676c6
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Mar 6 12:44:32 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Mar 6 16:54:17 2020 +0100

    add iter_previous
    
    Change-Id: Id481e687c623db6ade6c17d039f347e66cb167aa
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90106
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index ee86bf5d37f4..aeb656720188 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -897,6 +897,8 @@ public:
     virtual bool iter_previous_sibling(TreeIter& rIter) const = 0;
     // set iter to point to next node, depth first, then sibling
     virtual bool iter_next(TreeIter& rIter) const = 0;
+    // set iter to point to previous node, sibling first then depth
+    virtual bool iter_previous(TreeIter& rIter) const = 0;
     virtual bool iter_children(TreeIter& rIter) const = 0;
     bool iter_nth_sibling(TreeIter& rIter, int nChild) const
     {
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 0c73fdbba7ca..6aa99b7706fd 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4127,6 +4127,15 @@ public:
         return rVclIter.iter != nullptr;
     }
 
+    virtual bool iter_previous(weld::TreeIter& rIter) const override
+    {
+        SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
+        rVclIter.iter = m_xTreeView->Prev(rVclIter.iter);
+        if (rVclIter.iter && IsDummyEntry(rVclIter.iter))
+            return iter_previous(rVclIter);
+        return rVclIter.iter != nullptr;
+    }
+
     virtual bool iter_children(weld::TreeIter& rIter) const override
     {
         SalInstanceTreeIter& rVclIter = static_cast<SalInstanceTreeIter&>(rIter);
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);


More information about the Libreoffice-commits mailing list