[accounts-dialog] Make selection moving work with non-user rows in the list



commit 3294913d55de878572aa52886f6956202cf945f9
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Jan 24 16:44:18 2010 -0500

    Make selection moving work with non-user rows in the list

 src/main.c |   39 +++++++++++++++++++++++++++++++++------
 1 files changed, 33 insertions(+), 6 deletions(-)
---
diff --git a/src/main.c b/src/main.c
index 6f5f0e1..4f150a7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -166,16 +166,44 @@ user_added (UmUserManager *um, UmUser *user, UserAccountDialog *d)
 }
 
 static void
-get_previous (GtkTreeModel *model, GtkTreeIter *iter, GtkTreeIter *prev)
+get_previous_user_row (GtkTreeModel *model,
+                       GtkTreeIter  *iter,
+                       GtkTreeIter  *prev)
 {
         GtkTreePath *path;
+        UmUser *user;
 
         path = gtk_tree_model_get_path (model, iter);
-        gtk_tree_path_prev (path);
-        gtk_tree_model_get_iter (model, prev, path);
+        while (gtk_tree_path_prev (path)) {
+                gtk_tree_model_get_iter (model, prev, path);
+                gtk_tree_model_get (model, prev, USER_COL, &user, -1);
+                if (user) {
+                        g_object_unref (user);
+                        break;
+                }
+        }
         gtk_tree_path_free (path);
 }
 
+static gboolean
+get_next_user_row (GtkTreeModel *model,
+                   GtkTreeIter  *iter,
+                   GtkTreeIter  *next)
+{
+        UmUser *user;
+
+        *next = *iter;
+        while (gtk_tree_model_iter_next (model, next)) {
+                gtk_tree_model_get (model, next, USER_COL, &user, -1);
+                if (user) {
+                        g_object_unref (user);
+                        return TRUE;
+                }
+        }
+
+        return FALSE;
+}
+
 static void
 user_removed (UmUserManager *um, UmUser *user, UserAccountDialog *d)
 {
@@ -197,9 +225,8 @@ user_removed (UmUserManager *um, UmUser *user, UserAccountDialog *d)
 
                         if (u != NULL) {
                                 if (um_user_get_uid (user) == um_user_get_uid (u)) {
-                                        next = iter;
-                                        if (!gtk_tree_model_iter_next (model, &next))
-                                                get_previous (model, &iter, &next);
+                                        if (!get_next_user_row (model, &iter, &next))
+                                                get_previous_user_row (model, &iter, &next);
                                         gtk_list_store_remove (store, &iter);
                                         gtk_tree_selection_select_iter (selection, &next);
                                         g_object_unref (u);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]