[gnome-control-center] user-accounts: Disable animations when reloading users



commit b4c26363d8ae37452deedb0120f4ff7c1a7c99e6
Author: Ondrej Holy <oholy redhat com>
Date:   Mon Feb 13 09:16:59 2017 +0100

    user-accounts: Disable animations when reloading users
    
    Animations cause unwanted effects when reloading users, disable them.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778405

 panels/user-accounts/um-user-panel.c |   36 +++++++++++++++++++--------------
 1 files changed, 21 insertions(+), 15 deletions(-)
---
diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c
index 0a88a45..ceea188 100644
--- a/panels/user-accounts/um-user-panel.c
+++ b/panels/user-accounts/um-user-panel.c
@@ -96,6 +96,7 @@ get_widget (CcUserPanelPrivate *d, const char *name)
 #define PAGE_ADDUSER "_adduser"
 
 static void show_restart_notification (CcUserPanelPrivate *d, const gchar *locale);
+static gint user_compare (gconstpointer i, gconstpointer u);
 
 typedef struct {
         CcUserPanel *self;
@@ -265,10 +266,18 @@ sort_users (gconstpointer a, gconstpointer b)
 }
 
 static void
-reload_users (CcUserPanelPrivate *d)
+reload_users (CcUserPanelPrivate *d, ActUser *selected_user)
 {
         ActUser *user;
         GSList *list, *l;
+        UmCarouselItem *item;
+        GtkSettings *settings;
+        gboolean animations;
+
+        settings = gtk_settings_get_default ();
+
+        g_object_get (settings, "gtk-enable-animations", &animations, NULL);
+        g_object_set (settings, "gtk-enable-animations", FALSE, NULL);
 
         um_carousel_purge_items (d->carousel);
 
@@ -284,6 +293,13 @@ reload_users (CcUserPanelPrivate *d)
                 user_added (d->um, user, d);
         }
         g_slist_free (list);
+
+        if (selected_user) {
+                item = um_carousel_find_item (d->carousel, selected_user, user_compare);
+                um_carousel_select_item (d->carousel, item);
+        }
+
+        g_object_set (settings, "gtk-enable-animations", animations, NULL);
 }
 
 static void
@@ -296,7 +312,7 @@ user_removed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
         gtk_revealer_set_reveal_child (GTK_REVEALER (d->carousel),
                                        show_carousel);
 
-        reload_users (d);
+        reload_users (d, NULL);
 
         /* Show the current user */
         user = act_user_manager_get_user_by_id (d->um, getuid ());
@@ -326,15 +342,10 @@ user_compare (gconstpointer i,
 static void
 user_changed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d)
 {
-        UmCarouselItem *item;
-
         if (act_user_get_uid (user) != act_user_get_uid (d->selected_user))
                 return;
 
-        reload_users (d);
-
-        item = um_carousel_find_item (d->carousel, user, user_compare);
-        um_carousel_select_item (d->carousel, item);
+        reload_users (d, user);
 }
 
 static void
@@ -344,7 +355,6 @@ select_created_user (GObject *object,
 {
         CcUserPanelPrivate *d = user_data;
         UmAccountDialog *dialog;
-        UmCarouselItem *item;
         ActUser *user;
 
         dialog = UM_ACCOUNT_DIALOG (object);
@@ -355,11 +365,7 @@ select_created_user (GObject *object,
         if (user == NULL)
                 return;
 
-        reload_users (d);
-
-        /* Find and select the last created user */
-        item = um_carousel_find_item (d->carousel, user, user_compare);
-        um_carousel_select_item (d->carousel, item);
+        reload_users (d, user);
 }
 
 static void
@@ -1124,7 +1130,7 @@ users_loaded (ActUserManager     *manager,
         g_signal_connect (d->um, "user-added", G_CALLBACK (user_added), d);
         g_signal_connect (d->um, "user-removed", G_CALLBACK (user_removed), d);
 
-        reload_users (d);
+        reload_users (d, NULL);
 
         /* Show the current user firstly. */
         user = act_user_manager_get_user_by_id (d->um, getuid ());


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