diff options
author | Michael Albinus <michael.albinus@gmx.de> | 2012-03-04 12:21:31 +0100 |
---|---|---|
committer | Michael Albinus <michael.albinus@gmx.de> | 2012-03-04 12:21:31 +0100 |
commit | ebeabff47e793ca13a0c54b1442d87060f709227 (patch) | |
tree | e7ef67e8bd64634242b35733ae1011d1c7c03af3 /lisp/notifications.el | |
parent | e24b21b447b84731acf38d90e3f1e8a5094a0cc7 (diff) | |
download | emacs-ebeabff47e793ca13a0c54b1442d87060f709227.tar.gz |
* 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.
Diffstat (limited to 'lisp/notifications.el')
-rw-r--r-- | lisp/notifications.el | 21 |
1 files changed, 17 insertions, 4 deletions
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))) |