[gnome-control-center] user-accounts: Don't show heading for other accounts if there are none



commit f4c6f6093edf63b1e3483a2fa28e51ce088fabcf
Author: Ondrej Holy <oholy redhat com>
Date:   Thu Mar 21 15:15:16 2013 +0100

    user-accounts: Don't show heading for other accounts if there are none
    
    https://bugzilla.gnome.org/show_bug.cgi?id=661688

 panels/user-accounts/um-user-panel.c |   46 ++++++++++++++++++++++++++-------
 1 files changed, 36 insertions(+), 10 deletions(-)
---
diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c
index 2de2ab8..f55a21d 100644
--- a/panels/user-accounts/um-user-panel.c
+++ b/panels/user-accounts/um-user-panel.c
@@ -72,6 +72,9 @@ struct _CcUserPanelPrivate {
         UmPasswordDialog *password_dialog;
         UmPhotoDialog *photo_dialog;
         UmHistoryDialog *history_dialog;
+
+        gint other_accounts;
+        GtkTreeIter *other_iter;
 };
 
 static GtkWidget *
@@ -140,7 +143,7 @@ user_added (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
         GtkTreeIter iter;
         GtkTreeIter dummy;
         GdkPixbuf *pixbuf;
-        gchar *text;
+        gchar *text, *title;
         GtkTreeSelection *selection;
         gint sort_key;
 
@@ -157,6 +160,7 @@ user_added (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
                 sort_key = 1;
         }
         else {
+                d->other_accounts++;
                 sort_key = 3;
         }
         gtk_list_store_append (store, &iter);
@@ -177,6 +181,19 @@ user_added (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
             !gtk_tree_selection_get_selected (selection, &model, &dummy)) {
                 gtk_tree_selection_select_iter (selection, &iter);
         }
+
+        /* Show heading for other accounts if new one have been added. */
+        if (d->other_accounts == 1 && sort_key == 3) {
+                title = g_strdup_printf ("<small><span foreground=\"#555555\">%s</span></small>", _("Other 
Accounts"));
+                gtk_list_store_append (store, &iter);
+                gtk_list_store_set (store, &iter,
+                                    TITLE_COL, title,
+                                    HEADING_ROW_COL, TRUE,
+                                    SORT_KEY_COL, 2,
+                                    -1);
+                d->other_iter = gtk_tree_iter_copy (&iter);
+                g_free (title);
+        }
 }
 
 static void
@@ -227,6 +244,7 @@ user_removed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
         GtkListStore *store;
         GtkTreeIter iter, next;
         ActUser *u;
+        gint key;
 
         g_debug ("user removed: %s\n", act_user_get_user_name (user));
         tv = (GtkTreeView *)get_widget (d, "list-treeview");
@@ -235,12 +253,15 @@ user_removed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
         store = GTK_LIST_STORE (model);
         if (gtk_tree_model_get_iter_first (model, &iter)) {
                 do {
-                        gtk_tree_model_get (model, &iter, USER_COL, &u, -1);
+                        gtk_tree_model_get (model, &iter, USER_COL, &u, SORT_KEY_COL, &key, -1);
 
                         if (u != NULL) {
                                 if (act_user_get_uid (user) == act_user_get_uid (u)) {
                                         if (!get_next_user_row (model, &iter, &next))
                                                 get_previous_user_row (model, &iter, &next);
+                                        if (key == 3) {
+                                                d->other_accounts--;
+                                        }
                                         gtk_list_store_remove (store, &iter);
                                         gtk_tree_selection_select_iter (selection, &next);
                                         g_object_unref (u);
@@ -250,6 +271,13 @@ user_removed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
                         }
                 } while (gtk_tree_model_iter_next (model, &iter));
         }
+
+        /* Hide heading for other accounts if last one have been removed. */
+        if (d->other_iter != NULL && d->other_accounts == 0 && key == 3) {
+                gtk_list_store_remove (store, d->other_iter);
+                gtk_tree_iter_free (d->other_iter);
+                d->other_iter = NULL;
+        }
 }
 
 static void show_user (ActUser *user, CcUserPanelPrivate *d);
@@ -1236,14 +1264,8 @@ setup_main_window (CcUserPanelPrivate *d)
                             -1);
         g_free (title);
 
-        title = g_strdup_printf ("<small><span foreground=\"#555555\">%s</span></small>", _("Other 
Accounts"));
-        gtk_list_store_append (store, &iter);
-        gtk_list_store_set (store, &iter,
-                            TITLE_COL, title,
-                            HEADING_ROW_COL, TRUE,
-                            SORT_KEY_COL, 2,
-                            -1);
-        g_free (title);
+        d->other_accounts = 0;
+        d->other_iter = NULL;
 
         column = gtk_tree_view_column_new ();
         cell = gtk_cell_renderer_pixbuf_new ();
@@ -1409,6 +1431,10 @@ cc_user_panel_dispose (GObject *object)
                 g_object_unref (priv->permission);
                 priv->permission = NULL;
         }
+        if (priv->other_iter) {
+                gtk_tree_iter_free (priv->other_iter);
+                priv->other_iter = NULL;
+        }
         G_OBJECT_CLASS (cc_user_panel_parent_class)->dispose (object);
 }
 


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