From cf2f667318eaf80f51258d087d894e2f910f9c2d Mon Sep 17 00:00:00 2001 From: Christian Hammond Date: Fri, 26 Sep 2008 01:46:40 +0000 Subject: [PATCH] Prevent a backwards-compatibility breakage introduced where the "reason" code was added to the "closed" signal. This meant that existing signal handlers that passed extra data would break. We now require that you call notify_notification_get_closed_reason() to get this data. --- ChangeLog | 10 ++++++++++ libnotify/notification.c | 42 ++++++++++++++++++++++++++++++++++++++-- libnotify/notification.h | 5 ++++- 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5e0e015..95f4838 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Thu Sep 25 18:45:41 PDT 2008 Christian Hammond + + * libnotify/notification.c: + * libnotify/notification.h: + - Prevent a backwards-compatibility breakage introduced where the + "reason" code was added to the "closed" signal. This meant that + existing signal handlers that passed extra data would break. We now + require that you call notify_notification_get_closed_reason() to get + this data. + Thu Sep 25 18:05:38 PDT 2008 Christian Hammond * libnotify/notification.h: diff --git a/libnotify/notification.c b/libnotify/notification.c index 2de4768..5280ee6 100644 --- a/libnotify/notification.c +++ b/libnotify/notification.c @@ -90,6 +90,8 @@ struct _NotifyNotificationPrivate gboolean has_nondefault_actions; gboolean updates_pending; gboolean signals_registered; + + gint closed_reason; }; enum @@ -106,7 +108,8 @@ enum PROP_BODY, PROP_ICON_NAME, PROP_ATTACH_WIDGET, - PROP_STATUS_ICON + PROP_STATUS_ICON, + PROP_CLOSED_REASON }; static void notify_notification_set_property(GObject *object, guint prop_id, @@ -224,6 +227,17 @@ notify_notification_class_init(NotifyNotificationClass *klass) G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB)); #endif /* HAVE_STATUS_ICON */ + + g_object_class_install_property(object_class, PROP_CLOSED_REASON, + g_param_spec_int("closed-reason", "Closed Reason", + "The reason code for why the notification was closed", + -1, + G_MAXINT32, + -1, + G_PARAM_READABLE | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_NICK | + G_PARAM_STATIC_BLURB)); } static void @@ -312,6 +326,10 @@ notify_notification_get_property(GObject *object, break; #endif + case PROP_CLOSED_REASON: + g_value_set_int(value, priv->closed_reason); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -339,6 +357,7 @@ notify_notification_init(NotifyNotification *obj) { obj->priv = g_new0(NotifyNotificationPrivate, 1); obj->priv->timeout = NOTIFY_EXPIRES_DEFAULT; + obj->priv->closed_reason = -1; obj->priv->hints = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GFreeFunc)_g_value_free); @@ -717,7 +736,8 @@ _close_signal_handler(DBusGProxy *proxy, guint32 id, guint32 reason, if (id == notification->priv->id) { g_object_ref(G_OBJECT(notification)); - g_signal_emit(notification, signals[SIGNAL_CLOSED], 0, reason); + notification->priv->closed_reason = reason; + g_signal_emit(notification, signals[SIGNAL_CLOSED], 0); notification->priv->id = 0; g_object_unref(G_OBJECT(notification)); } @@ -1299,3 +1319,21 @@ notify_notification_close(NotifyNotification *notification, return TRUE; } + +/** + * notify_notification_get_closed_reason: + * @notification: The notification. + * + * Returns the closed reason code for the notification. This is valid only + * after the "closed" signal is emitted. + * + * Returns: The closed reason code. + */ +gint +notify_notification_get_closed_reason(const NotifyNotification *notification) +{ + g_return_val_if_fail(notification != NULL, -1); + g_return_val_if_fail(NOTIFY_IS_NOTIFICATION(notification), -1); + + return notification->priv->closed_reason; +} diff --git a/libnotify/notification.h b/libnotify/notification.h index bd21010..1a6670c 100644 --- a/libnotify/notification.h +++ b/libnotify/notification.h @@ -62,7 +62,7 @@ struct _NotifyNotificationClass GObjectClass parent_class; /* Signals */ - void (*closed)(NotifyNotification *notification, gint reason); + void (*closed)(NotifyNotification *notification); }; /* @@ -155,6 +155,9 @@ void notify_notification_clear_actions(NotifyNotification *notification); gboolean notify_notification_close(NotifyNotification *notification, GError **error); +gint notify_notification_get_closed_reason( + const NotifyNotification *notification); + G_END_DECLS #endif /* NOTIFY_NOTIFICATION_H */