[gnome-settings-daemon] power: Do not emit multiple 'Changed' signals when recalculating
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] power: Do not emit multiple 'Changed' signals when recalculating
- Date: Fri, 16 Sep 2011 16:17:30 +0000 (UTC)
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]