[libnotify] Support for image_data hint



commit 6c1231835d5e330271ee1a03e0c10deb704b9c39
Author: Aurélien Gâteau <aurelien gateau canonical com>
Date:   Fri Jan 29 05:50:49 2010 -0500

    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 deletions(-)
---
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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]