]> git.eshelyaron.com Git - emacs.git/commitdiff
* net/secrets.el (top): Register the D-Bus signals only when the
authorMichael Albinus <albinus@detlef>
Mon, 15 Mar 2010 23:27:31 +0000 (00:27 +0100)
committerMichael Albinus <albinus@detlef>
Mon, 15 Mar 2010 23:27:31 +0000 (00:27 +0100)
service "org.freedesktop.secrets" can be pinged.  Provide
subfeature 'enabled.

lisp/ChangeLog
lisp/net/secrets.el

index d80d987972a29e1f1171873568ee776ac8c948e7..54e427eeda504490032b000ca42e71db96d4ceef 100644 (file)
@@ -1,3 +1,9 @@
+2010-03-15  Michael Albinus  <michael.albinus@gmx.de>
+
+       * 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  <juri@jurta.org>
 
        Add finder unknown keywords.
index dbf3d03be0bcadeb695c3a5b7f650e2e6a4b6095..07062810b8018b27a42598c852ea612ff6073c3c 100644 (file)
 
 ;; 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: