diff options
author | Michael Albinus <michael.albinus@gmx.de> | 2012-03-07 08:48:16 +0100 |
---|---|---|
committer | Michael Albinus <michael.albinus@gmx.de> | 2012-03-07 08:48:16 +0100 |
commit | 6612a28444546783cacdd2a6a15bc7ed826d1eb3 (patch) | |
tree | dc6490247de606f7de431e4f5459cc972be36581 /lisp/notifications.el | |
parent | a9685db74e15f9c6336850ffda8932ed208c76cd (diff) | |
download | emacs-6612a28444546783cacdd2a6a15bc7ed826d1eb3.tar.gz |
Avoid superfluous registering of signals. (Bug#10807)
* notifications.el (notifications-on-action-object)
(notifications-on-close-object): New defvars.
(notifications-on-action-signal, notifications-on-closed-signal):
Unregister the signal if not needed any longer.
(notifications-notify): Register `notifications-action-signal' or
`notifications-closed-signal', if :on-action or :on-close has been
passed as argument.
Diffstat (limited to 'lisp/notifications.el')
-rw-r--r-- | lisp/notifications.el | 59 |
1 files changed, 37 insertions, 22 deletions
diff --git a/lisp/notifications.el b/lisp/notifications.el index 1b75c2c5702..908cbcaabab 100644 --- a/lisp/notifications.el +++ b/lisp/notifications.el @@ -88,25 +88,26 @@ (defvar notifications-on-action-map nil "Mapping between notification and action callback functions.") +(defvar notifications-on-action-object nil + "Object for registered on-action signal.") + (defvar notifications-on-close-map nil "Mapping between notification and close callback functions.") +(defvar notifications-on-close-object nil + "Object for registered on-close signal.") + (defun notifications-on-action-signal (id action) "Dispatch signals to callback functions from `notifications-on-action-map'." (let* ((unique-name (dbus-event-service-name last-input-event)) (entry (assoc (cons unique-name id) notifications-on-action-map))) (when entry (funcall (cadr entry) id action) - (remove entry notifications-on-action-map)))) - -(when (fboundp 'dbus-register-signal) - (dbus-register-signal - :session - nil - notifications-path - notifications-interface - notifications-action-signal - 'notifications-on-action-signal)) + (when (and (not (setq notifications-on-action-map + (remove entry notifications-on-action-map))) + notifications-on-action-object) + (dbus-unregister-object notifications-on-action-object) + (setq notifications-on-action-object nil))))) (defun notifications-on-closed-signal (id &optional reason) "Dispatch signals to callback functions from `notifications-on-closed-map'." @@ -118,16 +119,11 @@ (when entry (funcall (cadr entry) id (cadr (assoc reason notifications-closed-reason))) - (remove entry notifications-on-close-map)))) - -(when (fboundp 'dbus-register-signal) - (dbus-register-signal - :session - nil - notifications-path - notifications-interface - notifications-closed-signal - 'notifications-on-closed-signal)) + (when (and (not (setq notifications-on-close-map + (remove entry notifications-on-close-map))) + notifications-on-close-object) + (dbus-unregister-object notifications-on-close-object) + (setq notifications-on-close-object nil))))) (defun notifications-notify (&rest params) "Send notification via D-Bus using the Freedesktop notification protocol. @@ -287,10 +283,29 @@ used to manipulate the notification item with (unique-name (dbus-get-name-owner :session notifications-service))) (when on-action (add-to-list 'notifications-on-action-map - (list (cons unique-name id) on-action))) + (list (cons unique-name id) on-action)) + (unless notifications-on-action-object + (setq notifications-on-action-object + (dbus-register-signal + :session + nil + notifications-path + notifications-interface + notifications-action-signal + 'notifications-on-action-signal)))) + (when on-close (add-to-list 'notifications-on-close-map - (list (cons unique-name id) on-close)))) + (list (cons unique-name id) on-close)) + (unless notifications-on-close-object + (setq notifications-on-close-object + (dbus-register-signal + :session + nil + notifications-path + notifications-interface + notifications-closed-signal + 'notifications-on-closed-signal))))) ;; Return notification id id)) |