[accounts-dialog] Make selection moving work with non-user rows in the list
- From: Matthias Clasen <matthiasc src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [accounts-dialog] Make selection moving work with non-user rows in the list
- Date: Sun, 24 Jan 2010 21:46:40 +0000 (UTC)
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]