From 6c1231835d5e330271ee1a03e0c10deb704b9c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20G=C3=A2teau?= Date: Fri, 29 Jan 2010 05:50:49 -0500 Subject: [PATCH] Support for image_data hint Add support for the image_data hint from version 1.1 of the spec. --- libnotify/internal.h | 1 + libnotify/notification.c | 10 +++++++++- libnotify/notify.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/libnotify/internal.h b/libnotify/internal.h index 5a167ac..9b46406 100644 --- a/libnotify/internal.h +++ b/libnotify/internal.h @@ -40,6 +40,7 @@ void _notify_cache_add_notification (NotifyNotification void _notify_cache_remove_notification (NotifyNotification *n); gint _notify_notification_get_timeout (const NotifyNotification *n); gboolean _notify_notification_has_nondefault_actions (const NotifyNotification *n); +gboolean _notify_check_spec_version (int major, int minor); G_END_DECLS diff --git a/libnotify/notification.c b/libnotify/notification.c index c7bca3a..3afcd54 100644 --- a/libnotify/notification.c +++ b/libnotify/notification.c @@ -987,6 +987,7 @@ notify_notification_set_icon_from_pixbuf (NotifyNotification *notification, gsize image_len; GValueArray *image_struct; GValue *value; + const char *hint_name; #endif g_return_if_fail (notification != NULL); @@ -1018,8 +1019,15 @@ notify_notification_set_icon_from_pixbuf (NotifyNotification *notification, g_value_init (value, G_TYPE_VALUE_ARRAY); g_value_take_boxed (value, image_struct); + if (_notify_check_spec_version(1, 1)) { + hint_name = "image_data"; + } else { + hint_name = "icon_data"; + } + g_hash_table_insert (notification->priv->hints, - g_strdup ("icon_data"), value); + g_strdup (hint_name), + value); #else /* D-BUS < 0.60 */ g_warning ("Raw images and pixbufs require D-BUS >= 0.60"); #endif diff --git a/libnotify/notify.c b/libnotify/notify.c index 1de188f..d20355d 100644 --- a/libnotify/notify.c +++ b/libnotify/notify.c @@ -34,6 +34,37 @@ static char *_app_name = NULL; static DBusGProxy *_proxy = NULL; static DBusGConnection *_dbus_gconn = NULL; static GList *_active_notifications = NULL; +static int _spec_version_major = 0; +static int _spec_version_minor = 0; + +gboolean +_notify_check_spec_version (int major, + int minor) +{ + if (_spec_version_major > major) + return TRUE; + if (_spec_version_major < major) + return FALSE; + return _spec_version_minor >= minor; +} + +static gboolean +_notify_update_spec_version (void) +{ + char *spec_version; + + if (!notify_get_server_info (NULL, NULL, NULL, &spec_version)) + return FALSE; + + sscanf (spec_version, + "%d.%d", + &_spec_version_major, + &_spec_version_minor); + + g_free (spec_version); + + return TRUE; +} /** * notify_init: @@ -94,6 +125,11 @@ notify_init (const char *app_name) G_TYPE_STRING, G_TYPE_INVALID); + if (!_notify_update_spec_version ()) { + g_message ("Error getting spec version"); + return FALSE; + } + _initted = TRUE; return TRUE;