From: Michael Albinus Date: Sun, 4 Mar 2012 11:21:31 +0000 (+0100) Subject: * notifications.el (notifications-unique-name): New defvar. X-Git-Tag: emacs-pretest-24.0.05~174 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ebeabff47e793ca13a0c54b1442d87060f709227;p=emacs.git * notifications.el (notifications-unique-name): New defvar. (notifications-on-action-signal, notifications-on-closed-signal): Check for unique service name of incoming event. (top): Register for signals with wildcard service name. (notifications-notify): Remember daemon unique service name. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c1edff57656..5392e197d9f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,11 @@ +2012-03-04 Michael Albinus + + * notifications.el (notifications-unique-name): New defvar. + (notifications-on-action-signal, notifications-on-closed-signal): + Check for unique service name of incoming event. + (top): Register for signals with wildcard service name. + (notifications-notify): Remember daemon unique service name. + 2012-03-04 Chong Yidong * cus-start.el: Make x-select-enable-clipboard-manager diff --git a/lisp/notifications.el b/lisp/notifications.el index 9f7576b3f5d..e0817631140 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -91,17 +91,24 @@ (defvar notifications-on-close-map nil "Mapping between notification and close callback functions.") +(defvar notifications-unique-name "" + "Unique service name of notification daemon. +This must be kept, because the notification daemon could be +restarted, and the registered signals cannot be identified anymore.") + (defun notifications-on-action-signal (id action) "Dispatch signals to callback functions from `notifications-on-action-map'." (let ((entry (assoc id notifications-on-action-map))) - (when entry + (when (and entry + (string-equal notifications-unique-name + (dbus-event-service-name last-input-event))) (funcall (cadr entry) id action) (remove entry 'notifications-on-action-map)))) (when (fboundp 'dbus-register-signal) (dbus-register-signal :session - notifications-service + nil notifications-path notifications-interface notifications-action-signal @@ -113,7 +120,9 @@ ;; make it optional, and assume `undefined' as default. (let ((entry (assoc id notifications-on-close-map)) (reason (or reason 4))) - (when entry + (when (and entry + (string-equal notifications-unique-name + (dbus-event-service-name last-input-event))) (funcall (cadr entry) id (cadr (assoc reason notifications-closed-reason))) (remove entry 'notifications-on-close-map)))) @@ -121,7 +130,7 @@ (when (fboundp 'dbus-register-signal) (dbus-register-signal :session - notifications-service + nil notifications-path notifications-interface notifications-closed-signal @@ -277,6 +286,10 @@ used to manipulate the notification item with (or hints '(:array :signature "{sv}")) :int32 (or timeout -1))) + ;; Remember daemon unique service name. + (setq notifications-unique-name + (dbus-get-name-owner :session notifications-service)) + ;; Register close/action callback function (let ((on-action (plist-get params :on-action)) (on-close (plist-get params :on-close)))