From 4b3206f0434fd2694b4db315dac5b8b05e639dd6 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Fri, 13 Mar 2009 21:51:49 +0000 Subject: [PATCH] [James Westby] Don't use actions in notifications if the server doesn't support them. Fixes #4862 --- src/notify.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/notify.py b/src/notify.py index f70e55c17..0da0c972d 100644 --- a/src/notify.py +++ b/src/notify.py @@ -372,8 +372,9 @@ def popup(event_type, jid, account, msg_type='', path_to_image=None, notification.set_data('account', account) notification.set_data('msg_type', msg_type) notification.set_property('icon-name', path_to_image) - notification.add_action('default', 'Default Action', - on_pynotify_notification_clicked) + if 'actions' in pynotify.get_server_caps(): + notification.add_action('default', 'Default Action', + on_pynotify_notification_clicked) try: notification.show() @@ -507,6 +508,7 @@ class DesktopNotification: if self.notif is None: raise dbus.DBusException('unable to get notifications interface') self.ntype = ntype + self.capabilities = self.notif.GetCapabilities() if self.kde_notifications: self.attempt_notify() @@ -522,6 +524,10 @@ class DesktopNotification: 'text': self.text, 'image': self.path_to_image} gajim_icon = os.path.abspath(os.path.join(gajim.DATA_DIR, 'pixmaps', 'gajim.png')) + actions = () + if 'actions' in self.capabilities: + actions = (dbus.String('default'), dbus.String(self.event_type), + dbus.String('ignore'), dbus.String(_('Ignore'))) self.notif.Notify( dbus.String(_('Gajim')), # app_name (string) dbus.UInt32(0), # replaces_id (uint) @@ -529,9 +535,7 @@ class DesktopNotification: dbus.String(gajim_icon), # app_icon (string) dbus.String(_('')), # summary (string) dbus.String(notification_text), # body (string) - # actions (stringlist) - (dbus.String('default'), dbus.String(self.event_type), - dbus.String('ignore'), dbus.String(_('Ignore'))), + actions, # actions (stringlist) [], # hints (not used in KDE yet) dbus.UInt32(timeout*1000), # timeout (int), in ms reply_handler=self.attach_by_id, @@ -539,6 +543,9 @@ class DesktopNotification: return version = self.version if version[:2] == [0, 2]: + actions = {} + if 'actions' in self.capabilities: + actions = {'default': 0} try: self.notif.Notify( dbus.String(_('Gajim')), @@ -549,7 +556,7 @@ class DesktopNotification: dbus.String(self.title), dbus.String(self.text), [dbus.String(self.path_to_image)], - {'default': 0}, + actions, [''], True, dbus.UInt32(timeout), @@ -576,13 +583,16 @@ class DesktopNotification: text = self.text else: text = ' ' + actions = () + if 'actions' in self.capabilities: + actions = (dbus.String('default'), dbus.String(self.event_type)), self.notif.Notify( dbus.String(_('Gajim')), dbus.UInt32(0), # this notification does not replace other dbus.String(self.path_to_image), dbus.String(self.title), dbus.String(text), - ( dbus.String('default'), dbus.String(self.event_type) ), + actions, hints, dbus.UInt32(timeout*1000), reply_handler=self.attach_by_id,