summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2011-09-16 09:24:14 +0100
committerRichard Hughes <richard@hughsie.com>2011-09-16 09:24:19 +0100
commit3da731eb4ed3f59191504b135128a5dc939795ff (patch)
tree0c4525bbb713504b1853599726b670a2deefbad9
parentd06b9cae10d4a482f76b32394334ebec6073751f (diff)
downloadgnome-settings-daemon-3da731eb4ed3f59191504b135128a5dc939795ff.tar.gz
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
-rw-r--r--plugins/power/gsd-power-manager.c30
1 files changed, 16 insertions, 14 deletions
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index c1008dc3..f0b7d5b8 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;