[gnome-settings-daemon/gnome-3-4] power: Don't leak notifications
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/gnome-3-4] power: Don't leak notifications
- Date: Thu, 14 Jun 2012 09:27:07 +0000 (UTC)
commit 3662aae585b8901ed1d66ce950177ee763f89259
Author: Chris Coulson <chris coulson canonical com>
Date: Thu Apr 12 11:54:51 2012 +0100
power: Don't leak notifications
https://bugzilla.gnome.org/show_bug.cgi?id=673978
plugins/power/gsd-power-manager.c | 54 +++++++++++++++++++++++-------------
1 files changed, 34 insertions(+), 20 deletions(-)
---
diff --git a/plugins/power/gsd-power-manager.c b/plugins/power/gsd-power-manager.c
index abec33f..76e1a6e 100644
--- a/plugins/power/gsd-power-manager.c
+++ b/plugins/power/gsd-power-manager.c
@@ -1197,6 +1197,28 @@ engine_device_removed_cb (UpClient *client, UpDevice *device, GsdPowerManager *m
}
static void
+on_notification_closed (NotifyNotification *notification, gpointer data)
+{
+ g_object_unref (notification);
+}
+
+static void
+create_notification (const char *summary,
+ const char *body,
+ const char *icon,
+ NotifyNotification **weak_pointer_location)
+{
+ NotifyNotification *notification;
+
+ notification = notify_notification_new (summary, body, icon);
+ *weak_pointer_location = notification;
+ g_object_add_weak_pointer (G_OBJECT (notification),
+ (gpointer *) weak_pointer_location);
+ g_signal_connect (notification, "closed",
+ G_CALLBACK (on_notification_closed), NULL);
+}
+
+static void
engine_ups_discharging (GsdPowerManager *manager, UpDevice *device)
{
const gchar *title;
@@ -1242,9 +1264,9 @@ engine_ups_discharging (GsdPowerManager *manager, UpDevice *device)
notify_close_if_showing (manager->priv->notification_discharging);
/* create a new notification */
- manager->priv->notification_discharging = notify_notification_new (title,
- message->str,
- get_first_themed_icon_name (icon));
+ create_notification (title, message->str,
+ get_first_themed_icon_name (icon),
+ &manager->priv->notification_discharging);
notify_notification_set_timeout (manager->priv->notification_discharging,
GSD_POWER_MANAGER_NOTIFY_TIMEOUT_LONG);
notify_notification_set_urgency (manager->priv->notification_discharging,
@@ -1253,8 +1275,6 @@ engine_ups_discharging (GsdPowerManager *manager, UpDevice *device)
notify_notification_set_app_name (manager->priv->notification_discharging, _("Power"));
notify_notification_set_hint (manager->priv->notification_discharging,
"transient", g_variant_new_boolean (TRUE));
- g_object_add_weak_pointer (G_OBJECT (manager->priv->notification_discharging),
- (gpointer) &manager->priv->notification_discharging);
/* try to show */
ret = notify_notification_show (manager->priv->notification_discharging,
@@ -1421,9 +1441,9 @@ engine_charge_low (GsdPowerManager *manager, UpDevice *device)
notify_close_if_showing (manager->priv->notification_low);
/* create a new notification */
- manager->priv->notification_low = notify_notification_new (title,
- message,
- get_first_themed_icon_name (icon));
+ create_notification (title, message,
+ get_first_themed_icon_name (icon),
+ &manager->priv->notification_low);
notify_notification_set_timeout (manager->priv->notification_low,
GSD_POWER_MANAGER_NOTIFY_TIMEOUT_LONG);
notify_notification_set_urgency (manager->priv->notification_low,
@@ -1431,8 +1451,6 @@ engine_charge_low (GsdPowerManager *manager, UpDevice *device)
notify_notification_set_app_name (manager->priv->notification_low, _("Power"));
notify_notification_set_hint (manager->priv->notification_low,
"transient", g_variant_new_boolean (TRUE));
- g_object_add_weak_pointer (G_OBJECT (manager->priv->notification_low),
- (gpointer) &manager->priv->notification_low);
/* try to show */
ret = notify_notification_show (manager->priv->notification_low,
@@ -1602,16 +1620,14 @@ engine_charge_critical (GsdPowerManager *manager, UpDevice *device)
notify_close_if_showing (manager->priv->notification_low);
/* create a new notification */
- manager->priv->notification_low = notify_notification_new (title,
- message,
- get_first_themed_icon_name (icon));
+ create_notification (title, message,
+ get_first_themed_icon_name (icon),
+ &manager->priv->notification_low);
notify_notification_set_timeout (manager->priv->notification_low,
GSD_POWER_MANAGER_NOTIFY_TIMEOUT_NEVER);
notify_notification_set_urgency (manager->priv->notification_low,
NOTIFY_URGENCY_CRITICAL);
notify_notification_set_app_name (manager->priv->notification_low, _("Power"));
- g_object_add_weak_pointer (G_OBJECT (manager->priv->notification_low),
- (gpointer) &manager->priv->notification_low);
/* try to show */
ret = notify_notification_show (manager->priv->notification_low,
@@ -1751,16 +1767,14 @@ engine_charge_action (GsdPowerManager *manager, UpDevice *device)
notify_close_if_showing (manager->priv->notification_low);
/* create a new notification */
- manager->priv->notification_low = notify_notification_new (title,
- message,
- get_first_themed_icon_name (icon));
+ create_notification (title, message,
+ get_first_themed_icon_name (icon),
+ &manager->priv->notification_low);
notify_notification_set_timeout (manager->priv->notification_low,
GSD_POWER_MANAGER_NOTIFY_TIMEOUT_NEVER);
notify_notification_set_urgency (manager->priv->notification_low,
NOTIFY_URGENCY_CRITICAL);
notify_notification_set_app_name (manager->priv->notification_low, _("Power"));
- g_object_add_weak_pointer (G_OBJECT (manager->priv->notification_low),
- (gpointer) &manager->priv->notification_low);
/* try to show */
ret = notify_notification_show (manager->priv->notification_low,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]