aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/empathy-status-icon.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/empathy-status-icon.c b/src/empathy-status-icon.c
index df89f0fb1..1470a19e4 100644
--- a/src/empathy-status-icon.c
+++ b/src/empathy-status-icon.c
@@ -30,6 +30,9 @@
#include <glib/gi18n.h>
#include <libnotify/notification.h>
+#include <libnotify/notify.h>
+
+#include <telepathy-glib/util.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-idle.h>
@@ -70,6 +73,7 @@ typedef struct {
GtkAction *show_window_item;
GtkAction *new_message_item;
GtkAction *status_item;
+ gboolean notify_supports_actions;
} EmpathyStatusIconPriv;
G_DEFINE_TYPE (EmpathyStatusIcon, empathy_status_icon, G_TYPE_OBJECT);
@@ -165,12 +169,15 @@ status_icon_update_notification (EmpathyStatusIcon *icon)
notify_notification_set_timeout (priv->notification,
NOTIFY_EXPIRES_DEFAULT);
- notify_notification_add_action (priv->notification,
+ if (priv->notify_supports_actions)
+ {
+ notify_notification_add_action (priv->notification,
"respond",
_("Respond"),
(NotifyActionCallback) notification_action_cb,
icon,
NULL);
+ }
g_signal_connect (priv->notification, "closed",
G_CALLBACK (status_icon_notification_closed_cb), icon);
@@ -557,6 +564,7 @@ empathy_status_icon_init (EmpathyStatusIcon *icon)
{
EmpathyStatusIconPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (icon,
EMPATHY_TYPE_STATUS_ICON, EmpathyStatusIconPriv);
+ GList *list, *l;
icon->priv = priv;
priv->icon = gtk_status_icon_new ();
@@ -595,6 +603,18 @@ empathy_status_icon_init (EmpathyStatusIcon *icon)
g_signal_connect (priv->icon, "popup-menu",
G_CALLBACK (status_icon_popup_menu_cb),
icon);
+
+ /* Query the notification daemon to check if it supports actions */
+ priv->notify_supports_actions = FALSE;
+ list = notify_get_server_caps ();
+ for (l = list; l != NULL; l = g_list_next (l))
+ {
+ gchar *caps = l->data;
+ if (!tp_strdiff (caps, "actions"))
+ priv->notify_supports_actions = TRUE;
+ g_free (caps);
+ }
+ g_list_free (list);
}
EmpathyStatusIcon *