From 7c75524e72f5cc43f6dcb9a46b08108c3c6f4f71 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 16 Mar 2010 00:27:31 +0100 Subject: [PATCH] * net/secrets.el (top): Register the D-Bus signals only when the service "org.freedesktop.secrets" can be pinged. Provide subfeature 'enabled. --- lisp/ChangeLog | 6 +++++ lisp/net/secrets.el | 57 ++++++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 21 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d80d987972a..54e427eeda5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2010-03-15 Michael Albinus + + * net/secrets.el (top): Register the D-Bus signals only when the + service "org.freedesktop.secrets" can be pinged. Provide + subfeature 'enabled. + 2010-03-14 Juri Linkov Add finder unknown keywords. diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el index dbf3d03be0b..07062810b80 100644 --- a/lisp/net/secrets.el +++ b/lisp/net/secrets.el @@ -32,9 +32,14 @@ ;; In order to activate this package, you must add the following code ;; into your .emacs: - +;; ;; (require 'secrets) +;; It can be checked afterwards, whether there is a daemon providing +;; this interface: +;; +;; (featurep 'secrets 'enabled) + ;; The atomic objects to be managed by the Secret Service API are ;; secret items, which are something an application wishes to store ;; securely. A good example is a password that an application needs @@ -383,14 +388,6 @@ returned, and it will be stored in `secrets-session-path'." (setq secrets-collection-paths (delete (car args) secrets-collection-paths))))) -(dbus-register-signal - :session secrets-service secrets-path - secrets-interface-service "CollectionCreated" 'secrets-collection-handler) - -(dbus-register-signal - :session secrets-service secrets-path - secrets-interface-service "CollectionDeleted" 'secrets-collection-handler) - (defun secrets-get-collections () "Return the object paths of all available collections." (setq secrets-collection-paths @@ -667,20 +664,38 @@ If there is no such item, or the item doesn't own this attribute, return nil." :session secrets-service item-path secrets-interface-item "Delete"))))) -;; We must reset all variables, when there is a new instance of the -;; "org.freedesktop.secrets" service. +(if (dbus-ping :session secrets-service 100) + + (progn + ;; We must reset all variables, when there is a new instance of + ;; the "org.freedesktop.secrets" service. + (dbus-register-signal + :session dbus-service-dbus dbus-path-dbus + dbus-interface-dbus "NameOwnerChanged" + (lambda (&rest args) + (when secrets-debug (message "Secret Service has changed: %S" args)) + (setq secrets-session-path secrets-empty-path + secrets-prompt-signal nil + secrets-collection-paths nil)) + secrets-service) + + ;; We want to refresh our cache, when there is a change in + ;; collections. + (dbus-register-signal + :session secrets-service secrets-path + secrets-interface-service "CollectionCreated" + 'secrets-collection-handler) + + (dbus-register-signal + :session secrets-service secrets-path + secrets-interface-service "CollectionDeleted" + 'secrets-collection-handler) -(dbus-register-signal - :session dbus-service-dbus dbus-path-dbus - dbus-interface-dbus "NameOwnerChanged" - (lambda (&rest args) - (when secrets-debug (message "Secret Service has changed: %S" args)) - (setq secrets-session-path secrets-empty-path - secrets-prompt-signal nil - secrets-collection-paths nil)) - secrets-service) + ;; We shall inform, whether the secret service is enabled on + ;; this machine. + (provide 'secrets '(enabled))) -(provide 'secrets) + (provide 'secrets)) ;;; TODO: -- 2.39.2