[gnome-settings-daemon] power: Do not emit multiple 'Changed' signals when recalculating



commit 3da731eb4ed3f59191504b135128a5dc939795ff
Author: Richard Hughes <richard hughsie com>
Date:   Fri Sep 16 09:24:14 2011 +0100

    power: Do not emit multiple 'Changed' signals when recalculating
    
    We were issuing up to three changed signals, and always doing at least one when
    nothing had actually changed.
    Ensure we only send one signal, and only send that if something was different
    from before.
    
    Resolves https://bugzilla.gnome.org/show_bug.cgi?id=659204

 plugins/power/gsd-power-manager.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index c1008dc..f0b7d5b 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -631,10 +631,6 @@ engine_recalculate_state_icon (GsdPowerManager *manager)
 
                 /* set fallback icon */
                 gtk_status_icon_set_visible (manager->priv->status_icon, FALSE);
-
-                /* icon before, now none */
-                engine_emit_changed (manager);
-
                 return TRUE;
         }
 
@@ -644,8 +640,6 @@ engine_recalculate_state_icon (GsdPowerManager *manager)
                 /* set fallback icon */
                 gtk_status_icon_set_visible (manager->priv->status_icon, TRUE);
                 gtk_status_icon_set_from_gicon (manager->priv->status_icon, icon);
-
-                engine_emit_changed (manager);
                 manager->priv->previous_icon = icon;
                 return TRUE;
         }
@@ -657,8 +651,6 @@ engine_recalculate_state_icon (GsdPowerManager *manager)
 
                 /* set fallback icon */
                 gtk_status_icon_set_from_gicon (manager->priv->status_icon, icon);
-
-                engine_emit_changed (manager);
                 return TRUE;
         }
 
@@ -681,7 +673,6 @@ engine_recalculate_state_summary (GsdPowerManager *manager)
                 gtk_status_icon_set_tooltip_text (manager->priv->status_icon,
                                                   summary);
 
-                engine_emit_changed (manager);
                 return TRUE;
         }
 
@@ -693,7 +684,6 @@ engine_recalculate_state_summary (GsdPowerManager *manager)
                 gtk_status_icon_set_tooltip_text (manager->priv->status_icon,
                                                   summary);
 
-                engine_emit_changed (manager);
                 return TRUE;
         }
         g_debug ("no change");
@@ -705,10 +695,19 @@ engine_recalculate_state_summary (GsdPowerManager *manager)
 static void
 engine_recalculate_state (GsdPowerManager *manager)
 {
-        engine_recalculate_state_icon (manager);
-        engine_recalculate_state_summary (manager);
+        gboolean ret;
+        gboolean has_changed = FALSE;
 
-        engine_emit_changed (manager);
+        ret = engine_recalculate_state_icon (manager);
+        if (ret)
+                has_changed = TRUE;
+        ret = engine_recalculate_state_summary (manager);
+        if (ret)
+                has_changed = TRUE;
+
+        /* only emit if the icon or summary has changed */
+        if (has_changed)
+                engine_emit_changed (manager);
 }
 
 static UpDevice *
@@ -770,6 +769,7 @@ engine_update_composite_device (GsdPowerManager *manager,
         gboolean is_charging = FALSE;
         gboolean is_discharging = FALSE;
         gboolean is_fully_charged = TRUE;
+        gboolean has_changed;
         GPtrArray *array;
         UpDevice *device;
         UpDeviceState state;
@@ -854,7 +854,9 @@ engine_update_composite_device (GsdPowerManager *manager,
                       NULL);
 
         /* force update of icon */
-        engine_recalculate_state_icon (manager);
+        has_changed = engine_recalculate_state_icon (manager);
+        if (has_changed)
+                engine_emit_changed (manager);
 out:
         /* return composite device or original device */
         return device;



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