annotate lisp/net/dbus.el @ 112407:3c76e72abd5d

Update configure
author Miles Bader <miles@gnu.org>
date Sat, 22 Jan 2011 11:46:10 +0900
parents 060a9a41dd53
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1 ;;; dbus.el --- Elisp bindings for D-Bus.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
3 ;; Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5 ;; Author: Michael Albinus <michael.albinus@gmx.de>
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
6 ;; Keywords: comm, hardware
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
7
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
9
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
10 ;; GNU Emacs is free software: you can redistribute it and/or modify
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
12 ;; the Free Software Foundation, either version 3 of the License, or
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
13 ;; (at your option) any later version.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
14
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
18 ;; GNU General Public License for more details.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
19
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91728
diff changeset
21 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
22
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
23 ;;; Commentary:
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
24
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
25 ;; This package provides language bindings for the D-Bus API. D-Bus
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
26 ;; is a message bus system, a simple way for applications to talk to
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
27 ;; one another. See <http://dbus.freedesktop.org/> for details.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
28
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
29 ;; Low-level language bindings are implemented in src/dbusbind.c.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
30
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
31 ;;; Code:
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
32
91484
7ddf7059d131 * dbus.el (top): Check (featurep 'dbusbind).
Michael Albinus <michael.albinus@gmx.de>
parents: 87885
diff changeset
33 ;; D-Bus support in the Emacs core can be disabled with configuration
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
34 ;; option "--without-dbus". Declare used subroutines and variables.
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
35 (declare-function dbus-call-method "dbusbind.c")
97261
d5e87cca37af * net/dbus.el (dbus-call-method-asynchronously): Declare
Michael Albinus <michael.albinus@gmx.de>
parents: 97260
diff changeset
36 (declare-function dbus-call-method-asynchronously "dbusbind.c")
104337
709480950021 * net/dbus.el (dbus-init-bus): Declare. Apply it for the :system
Michael Albinus <michael.albinus@gmx.de>
parents: 104081
diff changeset
37 (declare-function dbus-init-bus "dbusbind.c")
97260
409001287195 * net/dbus.el (dbus-method-return-internal)
Michael Albinus <michael.albinus@gmx.de>
parents: 97213
diff changeset
38 (declare-function dbus-method-return-internal "dbusbind.c")
409001287195 * net/dbus.el (dbus-method-return-internal)
Michael Albinus <michael.albinus@gmx.de>
parents: 97213
diff changeset
39 (declare-function dbus-method-error-internal "dbusbind.c")
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
40 (declare-function dbus-register-signal "dbusbind.c")
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
41 (declare-function dbus-register-method "dbusbind.c")
109132
0f3ed79830e9 * net/dbus.el (dbus-send-signal): Declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 109127
diff changeset
42 (declare-function dbus-send-signal "dbusbind.c")
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
43 (defvar dbus-debug)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
44 (defvar dbus-registered-objects-table)
91728
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
45
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
46 ;; Pacify byte compiler.
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
47 (eval-when-compile
58bf306db72e * net/dbus.el: Remove `no-byte-compile' cookie.
Michael Albinus <michael.albinus@gmx.de>
parents: 91589
diff changeset
48 (require 'cl))
91484
7ddf7059d131 * dbus.el (top): Check (featurep 'dbusbind).
Michael Albinus <michael.albinus@gmx.de>
parents: 87885
diff changeset
49
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
50 (require 'xml)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
51
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
52 (defconst dbus-service-dbus "org.freedesktop.DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
53 "The bus name used to talk to the bus itself.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
54
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
55 (defconst dbus-path-dbus "/org/freedesktop/DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
56 "The object path used to talk to the bus itself.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
57
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
58 (defconst dbus-interface-dbus "org.freedesktop.DBus"
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
59 "The interface exported by the object with `dbus-service-dbus' and `dbus-path-dbus'.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
60
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
61 (defconst dbus-interface-peer (concat dbus-interface-dbus ".Peer")
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
62 "The interface for peer objects.")
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
63
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
64 (defconst dbus-interface-introspectable
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
65 (concat dbus-interface-dbus ".Introspectable")
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
66 "The interface supported by introspectable objects.")
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
67
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
68 (defconst dbus-interface-properties (concat dbus-interface-dbus ".Properties")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
69 "The interface for property objects.")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
70
98668
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
71 (defconst dbus-service-emacs "org.gnu.Emacs"
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
72 "The well known service name of Emacs.")
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
73
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
74 (defconst dbus-path-emacs "/org/gnu/Emacs"
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
75 "The object path head used by Emacs.")
a7acd2697027 * net/dbus.el (dbus-service-emacs, dbus-path-emacs): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 97692
diff changeset
76
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
77 (defconst dbus-message-type-invalid 0
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
78 "This value is never a valid message type.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
79
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
80 (defconst dbus-message-type-method-call 1
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
81 "Message type of a method call message.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
82
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
83 (defconst dbus-message-type-method-return 2
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
84 "Message type of a method return message.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
85
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
86 (defconst dbus-message-type-error 3
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
87 "Message type of an error reply message.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
88
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
89 (defconst dbus-message-type-signal 4
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
90 "Message type of a signal message.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
91
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
92 (defmacro dbus-ignore-errors (&rest body)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
93 "Execute BODY; signal D-Bus error when `dbus-debug' is non-nil.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
94 Otherwise, return result of last form in BODY, or all other errors."
110034
c87f89486bb7 Use `declare' in defmacros.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 109962
diff changeset
95 (declare (indent 0) (debug t))
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
96 `(condition-case err
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
97 (progn ,@body)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
98 (dbus-error (when dbus-debug (signal (car err) (cdr err))))))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
99 (font-lock-add-keywords 'emacs-lisp-mode '("\\<dbus-ignore-errors\\>"))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
100
101525
5951f5343bb5 * net/dbus.el (dbus-event-error-hooks): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 100855
diff changeset
101 (defvar dbus-event-error-hooks nil
5951f5343bb5 * net/dbus.el (dbus-event-error-hooks): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 100855
diff changeset
102 "Functions to be called when a D-Bus error happens in the event handler.
101619
df3f6041e002 * net/dbus.el (dbus-event-error-hooks): Fix docstring. Describe
Michael Albinus <michael.albinus@gmx.de>
parents: 101525
diff changeset
103 Every function must accept two arguments, the event and the error variable
101525
5951f5343bb5 * net/dbus.el (dbus-event-error-hooks): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 100855
diff changeset
104 catched in `condition-case' by `dbus-error'.")
5951f5343bb5 * net/dbus.el (dbus-event-error-hooks): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 100855
diff changeset
105
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
106
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
107 ;;; Hash table of registered functions.
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
108
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
109 (defvar dbus-return-values-table (make-hash-table :test 'equal)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
110 "Hash table for temporary storing arguments of reply messages.
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
111 A key in this hash table is a list (BUS SERIAL). BUS is either a
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
112 Lisp symbol, `:system' or `:session', or a string denoting the
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
113 bus address. SERIAL is the serial number of the reply message.
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
114 See `dbus-call-method-non-blocking-handler' and
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
115 `dbus-call-method-non-blocking'.")
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
116
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
117 (defun dbus-list-hash-table ()
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
118 "Returns all registered member registrations to D-Bus.
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
119 The return value is a list, with elements of kind (KEY . VALUE).
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
120 See `dbus-registered-objects-table' for a description of the
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
121 hash table."
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
122 (let (result)
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
123 (maphash
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
124 '(lambda (key value) (add-to-list 'result (cons key value) 'append))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
125 dbus-registered-objects-table)
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
126 result))
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
127
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
128 (defun dbus-unregister-object (object)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
129 "Unregister OBJECT from D-Bus.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
130 OBJECT must be the result of a preceding `dbus-register-method',
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
131 `dbus-register-property' or `dbus-register-signal' call. It
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
132 returns `t' if OBJECT has been unregistered, `nil' otherwise.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
133
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
134 When OBJECT identifies the last method or property, which is
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
135 registered for the respective service, Emacs releases its
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
136 association to the service from D-Bus."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
137 ;; Check parameter.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
138 (unless (and (consp object) (not (null (car object))) (consp (cdr object)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
139 (signal 'wrong-type-argument (list 'D-Bus object)))
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
140
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
141 ;; Find the corresponding entry in the hash table.
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
142 (let* ((key (car object))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
143 (value (cdr object))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
144 (entry (gethash key dbus-registered-objects-table))
105926
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
145 ret)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
146 ;; entry has the structure ((UNAME SERVICE PATH MEMBER) ...).
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
147 ;; value has the structure ((SERVICE PATH [HANDLER]) ...).
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
148 ;; MEMBER is either a string (the handler), or a cons cell (a
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
149 ;; property value). UNAME and property values are not taken into
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
150 ;; account for comparision.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
151
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
152 ;; Loop over the registered functions.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
153 (dolist (elt entry)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
154 (when (equal
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
155 (car value)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
156 (butlast (cdr elt) (- (length (cdr elt)) (length (car value)))))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
157 ;; Compute new hash value. If it is empty, remove it from the
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
158 ;; hash table.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
159 (unless (puthash key (delete elt entry) dbus-registered-objects-table)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
160 (remhash key dbus-registered-objects-table))
105926
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
161 (setq ret t)))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
162 ;; Check, whether there is still a registered function or property
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
163 ;; for the given service. If not, unregister the service from the
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
164 ;; bus.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
165 (dolist (elt entry)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
166 (let ((service (cadr elt))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
167 (bus (car key))
105926
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
168 found)
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
169 (maphash
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
170 (lambda (k v)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
171 (dolist (e v)
105926
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
172 (ignore-errors
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
173 (when (and (equal bus (car k)) (string-equal service (cadr e)))
105928
d91d3722b71f *** empty log message ***
Michael Albinus <michael.albinus@gmx.de>
parents: 105926
diff changeset
174 (setq found t)))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
175 dbus-registered-objects-table)
105926
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
176 (unless found
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
177 (dbus-call-method
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
178 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
179 "ReleaseName" service))))
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
180 ;; Return.
2b4cc3e45a7b * net/dbus.el (dbus-unregister-object): Release service, if no
Michael Albinus <michael.albinus@gmx.de>
parents: 104602
diff changeset
181 ret))
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
182
106050
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
183 (defun dbus-unregister-service (bus service)
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
184 "Unregister all objects related to SERVICE from D-Bus BUS.
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
185 BUS is either a Lisp symbol, `:system' or `:session', or a string
112184
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
186 denoting the bus address. SERVICE must be a known service name.
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
187
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
188 The function returns a keyword, indicating the result of the
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
189 operation. One of the following keywords is returned:
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
190
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
191 `:released': Service has become the primary owner of the name.
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
192
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
193 `:non-existent': Service name does not exist on this bus.
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
194
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
195 `:not-owner': We are neither the primary owner nor waiting in the
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
196 queue of this service."
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
197
106050
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
198 (maphash
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
199 (lambda (key value)
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
200 (dolist (elt value)
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
201 (ignore-errors
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
202 (when (and (equal bus (car key)) (string-equal service (cadr elt)))
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
203 (unless
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
204 (puthash key (delete elt value) dbus-registered-objects-table)
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
205 (remhash key dbus-registered-objects-table))))))
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
206 dbus-registered-objects-table)
112181
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
207 (let ((reply (dbus-call-method
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
208 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
209 "ReleaseName" service)))
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
210 (case reply
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
211 (1 :released)
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
212 (2 :non-existent)
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
213 (3 :not-owner)
112184
060a9a41dd53 * net/dbus.el (dbus-unregister-service): Complete doc. Fix
Michael Albinus <michael.albinus@gmx.de>
parents: 112183
diff changeset
214 (t (signal 'dbus-error (list "Could not unregister service" service))))))
106050
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
215
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
216 (defun dbus-call-method-non-blocking-handler (&rest args)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
217 "Handler for reply messages of asynchronous D-Bus message calls.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
218 It calls the function stored in `dbus-registered-objects-table'.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
219 The result will be made available in `dbus-return-values-table'."
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
220 (puthash (list (dbus-event-bus-name last-input-event)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
221 (dbus-event-serial-number last-input-event))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
222 (if (= (length args) 1) (car args) args)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
223 dbus-return-values-table))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
224
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
225 (defun dbus-call-method-non-blocking
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
226 (bus service path interface method &rest args)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
227 "Call METHOD on the D-Bus BUS, but don't block the event queue.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
228 This is necessary for communicating to registered D-Bus methods,
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
229 which are running in the same Emacs process.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
230
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
231 The arguments are the same as in `dbus-call-method'.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
232
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
233 usage: (dbus-call-method-non-blocking
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
234 BUS SERVICE PATH INTERFACE METHOD
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
235 &optional :timeout TIMEOUT &rest ARGS)"
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
236
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
237 (let ((key
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
238 (apply
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
239 'dbus-call-method-asynchronously
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
240 bus service path interface method
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
241 'dbus-call-method-non-blocking-handler args)))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
242 ;; Wait until `dbus-call-method-non-blocking-handler' has put the
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
243 ;; result into `dbus-return-values-table'.
104081
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
244 (while (eq (gethash key dbus-return-values-table :ignore) :ignore)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
245 (read-event nil nil 0.1))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
246
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
247 ;; Cleanup `dbus-return-values-table'. Return the result.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
248 (prog1
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
249 (gethash key dbus-return-values-table nil)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
250 (remhash key dbus-return-values-table))))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
251
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
252 (defun dbus-name-owner-changed-handler (&rest args)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
253 "Reapplies all member registrations to D-Bus.
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
254 This handler is applied when a \"NameOwnerChanged\" signal has
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
255 arrived. SERVICE is the object name for which the name owner has
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
256 been changed. OLD-OWNER is the previous owner of SERVICE, or the
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
257 empty string if SERVICE was not owned yet. NEW-OWNER is the new
111333
de02b794c330 Don't be so lax with spelling.
Glenn Morris <rgm@gnu.org>
parents: 110034
diff changeset
258 owner of SERVICE, or the empty string if SERVICE loses any name owner.
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
259
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
260 usage: (dbus-name-owner-changed-handler service old-owner new-owner)"
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
261 (save-match-data
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
262 ;; Check the arguments. We should silently ignore it when they
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
263 ;; are wrong.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
264 (if (and (= (length args) 3)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
265 (stringp (car args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
266 (stringp (cadr args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
267 (stringp (caddr args)))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
268 (let ((service (car args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
269 (old-owner (cadr args))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
270 (new-owner (caddr args)))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
271 ;; Check whether SERVICE is a known name.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
272 (when (not (string-match "^:" service))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
273 (maphash
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
274 '(lambda (key value)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
275 (dolist (elt value)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
276 ;; key has the structure (BUS INTERFACE MEMBER).
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
277 ;; elt has the structure (UNAME SERVICE PATH HANDLER).
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
278 (when (string-equal old-owner (car elt))
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
279 ;; Remove old key, and add new entry with changed name.
87537
84ece2f8e012 * net/dbus.el (dbus-name-owner-changed-handler): Use
Magnus Henoch <mange@freemail.hu>
parents: 87492
diff changeset
280 (dbus-unregister-object (list key (cdr elt)))
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
281 ;; Maybe we could arrange the lists a little bit better
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
282 ;; that we don't need to extract every single element?
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
283 (dbus-register-signal
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
284 ;; BUS SERVICE PATH
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
285 (nth 0 key) (nth 1 elt) (nth 2 elt)
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
286 ;; INTERFACE MEMBER HANDLER
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
287 (nth 1 key) (nth 2 key) (nth 3 elt)))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
288 (copy-hash-table dbus-registered-objects-table))))
87492
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
289 ;; The error is reported only in debug mode.
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
290 (when dbus-debug
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
291 (signal
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
292 'dbus-error
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
293 (cons
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
294 (format "Wrong arguments of %s.NameOwnerChanged" dbus-interface-dbus)
bb538e56f976 * net/dbus.el (dbus-name-owner-changed-handler): Make the function
Michael Albinus <michael.albinus@gmx.de>
parents: 87308
diff changeset
295 args))))))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
296
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
297 ;; Register the handler.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
298 (when nil ;ignore-errors
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
299 (dbus-register-signal
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
300 :system dbus-service-dbus dbus-path-dbus dbus-interface-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
301 "NameOwnerChanged" 'dbus-name-owner-changed-handler)
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
302 (dbus-register-signal
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
303 :session dbus-service-dbus dbus-path-dbus dbus-interface-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
304 "NameOwnerChanged" 'dbus-name-owner-changed-handler))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
305
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
306
99951
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
307 ;;; D-Bus type conversion.
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
308
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
309 (defun dbus-string-to-byte-array (string)
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
310 "Transforms STRING to list (:array :byte c1 :byte c2 ...).
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
311 STRING shall be UTF8 coded."
100855
4502d2277f2c * net/dbus.el (dbus-string-to-byte-array): Handle empty array.
Michael Albinus <michael.albinus@gmx.de>
parents: 99968
diff changeset
312 (if (zerop (length string))
4502d2277f2c * net/dbus.el (dbus-string-to-byte-array): Handle empty array.
Michael Albinus <michael.albinus@gmx.de>
parents: 99968
diff changeset
313 '(:array :signature "y")
4502d2277f2c * net/dbus.el (dbus-string-to-byte-array): Handle empty array.
Michael Albinus <michael.albinus@gmx.de>
parents: 99968
diff changeset
314 (let (result)
4502d2277f2c * net/dbus.el (dbus-string-to-byte-array): Handle empty array.
Michael Albinus <michael.albinus@gmx.de>
parents: 99968
diff changeset
315 (dolist (elt (string-to-list string) (append '(:array) result))
4502d2277f2c * net/dbus.el (dbus-string-to-byte-array): Handle empty array.
Michael Albinus <michael.albinus@gmx.de>
parents: 99968
diff changeset
316 (setq result (append result (list :byte elt)))))))
99951
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
317
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
318 (defun dbus-byte-array-to-string (byte-array)
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
319 "Transforms BYTE-ARRAY into UTF8 coded string.
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
320 BYTE-ARRAY must be a list of structure (c1 c2 ...)."
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
321 (apply 'string byte-array))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
322
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
323 (defun dbus-escape-as-identifier (string)
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
324 "Escape an arbitrary STRING so it follows the rules for a C identifier.
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
325 The escaped string can be used as object path component, interface element
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
326 component, bus name component or member name in D-Bus.
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
327
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
328 The escaping consists of replacing all non-alphanumerics, and the
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
329 first character if it's a digit, with an underscore and two
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
330 lower-case hex digits:
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
331
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
332 \"0123abc_xyz\\x01\\xff\" -> \"_30123abc_5fxyz_01_ff\"
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
333
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
334 i.e. similar to URI encoding, but with \"_\" taking the role of \"%\",
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
335 and a smaller allowed set. As a special case, \"\" is escaped to
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
336 \"_\".
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
337
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
338 Returns the escaped string. Algorithm taken from
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
339 telepathy-glib's `tp-escape-as-identifier'."
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
340 (if (zerop (length string))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
341 "_"
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
342 (replace-regexp-in-string
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
343 "^[0-9]\\|[^A-Za-z0-9]"
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
344 (lambda (x) (format "_%2x" (aref x 0)))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
345 string)))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
346
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
347 (defun dbus-unescape-from-identifier (string)
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
348 "Retrieve the original string from the encoded STRING.
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
349 STRING must have been coded with `dbus-escape-as-identifier'"
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
350 (if (string-equal string "_")
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
351 ""
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
352 (replace-regexp-in-string
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
353 "_.."
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
354 (lambda (x) (format "%c" (string-to-number (substring x 1) 16)))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
355 string)))
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
356
b265d0564f99 * net/dbus.el (dbus-string-to-byte-array)
Michael Albinus <michael.albinus@gmx.de>
parents: 98668
diff changeset
357
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
358 ;;; D-Bus events.
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
359
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
360 (defun dbus-check-event (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
361 "Checks whether EVENT is a well formed D-Bus event.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
362 EVENT is a list which starts with symbol `dbus-event':
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
363
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
364 (dbus-event BUS TYPE SERIAL SERVICE PATH INTERFACE MEMBER HANDLER &rest ARGS)
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
365
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
366 BUS identifies the D-Bus the message is coming from. It is
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
367 either a Lisp symbol, `:system' or `:session', or a string
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
368 denoting the bus address. TYPE is the D-Bus message type which
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
369 has caused the event, SERIAL is the serial number of the received
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
370 D-Bus message. SERVICE and PATH are the unique name and the
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
371 object path of the D-Bus object emitting the message. INTERFACE
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
372 and MEMBER denote the message which has been sent. HANDLER is
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
373 the function which has been registered for this message. ARGS
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
374 are the arguments passed to HANDLER, when it is called during
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
375 event handling in `dbus-handle-event'.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
376
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
377 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
378 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
379 (when dbus-debug (message "DBus-Event %s" event))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
380 (unless (and (listp event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
381 (eq (car event) 'dbus-event)
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
382 ;; Bus symbol.
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
383 (or (symbolp (nth 1 event))
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
384 (stringp (nth 1 event)))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
385 ;; Type.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
386 (and (natnump (nth 2 event))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
387 (< dbus-message-type-invalid (nth 2 event)))
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
388 ;; Serial.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
389 (natnump (nth 3 event))
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
390 ;; Service.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
391 (or (= dbus-message-type-method-return (nth 2 event))
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
392 (= dbus-message-type-error (nth 2 event))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
393 (stringp (nth 4 event)))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
394 ;; Object path.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
395 (or (= dbus-message-type-method-return (nth 2 event))
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
396 (= dbus-message-type-error (nth 2 event))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
397 (stringp (nth 5 event)))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
398 ;; Interface.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
399 (or (= dbus-message-type-method-return (nth 2 event))
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
400 (= dbus-message-type-error (nth 2 event))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
401 (stringp (nth 6 event)))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
402 ;; Member.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
403 (or (= dbus-message-type-method-return (nth 2 event))
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
404 (= dbus-message-type-error (nth 2 event))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
405 (stringp (nth 7 event)))
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
406 ;; Handler.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
407 (functionp (nth 8 event)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
408 (signal 'dbus-error (list "Not a valid D-Bus event" event))))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
409
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
410 ;;;###autoload
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
411 (defun dbus-handle-event (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
412 "Handle events from the D-Bus.
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
413 EVENT is a D-Bus event, see `dbus-check-event'. HANDLER, being
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
414 part of the event, is called with arguments ARGS.
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
415 If the HANDLER returns a `dbus-error', it is propagated as return message."
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
416 (interactive "e")
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
417 (condition-case err
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
418 (let (result)
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
419 ;; We ignore not well-formed events.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
420 (dbus-check-event event)
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
421 ;; Error messages must be propagated.
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
422 (when (= dbus-message-type-error (nth 2 event))
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
423 (signal 'dbus-error (nthcdr 9 event)))
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
424 ;; Apply the handler.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
425 (setq result (apply (nth 8 event) (nthcdr 9 event)))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
426 ;; Return a message when it is a message call.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
427 (when (= dbus-message-type-method-call (nth 2 event))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
428 (dbus-ignore-errors
104081
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
429 (if (eq result :ignore)
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
430 (dbus-method-return-internal
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
431 (nth 1 event) (nth 3 event) (nth 4 event))
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
432 (apply 'dbus-method-return-internal
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
433 (nth 1 event) (nth 3 event) (nth 4 event)
4c431a52ce37 * net/dbus.el (dbus-call-method-non-blocking): Handle the case the
Michael Albinus <michael.albinus@gmx.de>
parents: 101619
diff changeset
434 (if (consp result) result (list result)))))))
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
435 ;; Error handling.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
436 (dbus-error
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
437 ;; Return an error message when it is a message call.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
438 (when (= dbus-message-type-method-call (nth 2 event))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
439 (dbus-ignore-errors
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
440 (dbus-method-error-internal
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
441 (nth 1 event) (nth 3 event) (nth 4 event) (cadr err))))
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
442 ;; Propagate D-Bus error messages.
101619
df3f6041e002 * net/dbus.el (dbus-event-error-hooks): Fix docstring. Describe
Michael Albinus <michael.albinus@gmx.de>
parents: 101525
diff changeset
443 (run-hook-with-args 'dbus-event-error-hooks event err)
97213
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
444 (when (or dbus-debug (= dbus-message-type-error (nth 2 event)))
f7035abd999b * net/dbus.el (dbus-check-event, dbus-handle-event): Handle D-Bus
Michael Albinus <michael.albinus@gmx.de>
parents: 97167
diff changeset
445 (signal (car err) (cdr err))))))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
446
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
447 (defun dbus-event-bus-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
448 "Return the bus name the event is coming from.
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
449 The result is either a Lisp symbol, `:system' or `:session', or a
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
450 string denoting the bus address. EVENT is a D-Bus event, see
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
451 `dbus-check-event'. This function raises a `dbus-error' signal
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
452 in case the event is not well formed."
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
453 (dbus-check-event event)
87159
bcf59f3d73d7 * net/dbus.el (dbus-hash-table=): Fix for new hash table key
Michael Albinus <michael.albinus@gmx.de>
parents: 87093
diff changeset
454 (nth 1 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
455
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
456 (defun dbus-event-message-type (event)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
457 "Return the message type of the corresponding D-Bus message.
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
458 The result is a number. EVENT is a D-Bus event, see
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
459 `dbus-check-event'. This function raises a `dbus-error' signal
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
460 in case the event is not well formed."
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
461 (dbus-check-event event)
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
462 (nth 2 event))
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
463
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
464 (defun dbus-event-serial-number (event)
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
465 "Return the serial number of the corresponding D-Bus message.
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
466 The result is a number. The serial number is needed for
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
467 generating a reply message. EVENT is a D-Bus event, see
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
468 `dbus-check-event'. This function raises a `dbus-error' signal
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
469 in case the event is not well formed."
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
470 (dbus-check-event event)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
471 (nth 3 event))
87586
9554989ee375 * net/dbus.el (dbus-list-hash-table)
Michael Albinus <michael.albinus@gmx.de>
parents: 87537
diff changeset
472
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
473 (defun dbus-event-service-name (event)
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
474 "Return the name of the D-Bus object the event is coming from.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
475 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
476 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
477 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
478 (dbus-check-event event)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
479 (nth 4 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
480
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
481 (defun dbus-event-path-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
482 "Return the object path of the D-Bus object the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
483 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
484 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
485 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
486 (dbus-check-event event)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
487 (nth 5 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
488
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
489 (defun dbus-event-interface-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
490 "Return the interface name of the D-Bus object the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
491 The result is a string. EVENT is a D-Bus event, see `dbus-check-event'.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
492 This function raises a `dbus-error' signal in case the event is
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
493 not well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
494 (dbus-check-event event)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
495 (nth 6 event))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
496
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
497 (defun dbus-event-member-name (event)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
498 "Return the member name the event is coming from.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
499 It is either a signal name or a method name. The result is is a
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
500 string. EVENT is a D-Bus event, see `dbus-check-event'. This
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
501 function raises a `dbus-error' signal in case the event is not
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
502 well formed."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
503 (dbus-check-event event)
97167
125ed717ddbb * net/dbus.el (top): Don't register for "NameOwnerChanged".
Michael Albinus <michael.albinus@gmx.de>
parents: 96801
diff changeset
504 (nth 7 event))
87050
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
505
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
506
7d80e0f3d8f8 * net/dbus.el (dbus-hash-table=): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 86941
diff changeset
507 ;;; D-Bus registered names.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
508
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
509 (defun dbus-list-activatable-names ()
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
510 "Return the D-Bus service names which can be activated as list.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
511 The result is a list of strings, which is `nil' when there are no
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
512 activatable service names at all."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
513 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
514 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
515 :system dbus-service-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
516 dbus-path-dbus dbus-interface-dbus "ListActivatableNames")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
517
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
518 (defun dbus-list-names (bus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
519 "Return the service names registered at D-Bus BUS.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
520 The result is a list of strings, which is `nil' when there are no
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
521 registered service names at all. Well known names are strings
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
522 like \"org.freedesktop.DBus\". Names starting with \":\" are
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
523 unique names for services."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
524 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
525 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
526 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus "ListNames")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
527
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
528 (defun dbus-list-known-names (bus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
529 "Retrieve all services which correspond to a known name in BUS.
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
530 A service has a known name if it doesn't start with \":\"."
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
531 (let (result)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
532 (dolist (name (dbus-list-names bus) result)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
533 (unless (string-equal ":" (substring name 0 1))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
534 (add-to-list 'result name 'append)))))
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
535
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
536 (defun dbus-list-queued-owners (bus service)
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
537 "Return the unique names registered at D-Bus BUS and queued for SERVICE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
538 The result is a list of strings, or `nil' when there are no
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
539 queued name owners service names at all."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
540 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
541 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
542 bus dbus-service-dbus dbus-path-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
543 dbus-interface-dbus "ListQueuedOwners" service)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
544
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
545 (defun dbus-get-name-owner (bus service)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
546 "Return the name owner of SERVICE registered at D-Bus BUS.
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
547 The result is either a string, or `nil' if there is no name owner."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
548 (dbus-ignore-errors
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
549 (dbus-call-method
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
550 bus dbus-service-dbus dbus-path-dbus
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
551 dbus-interface-dbus "GetNameOwner" service)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
552
104602
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
553 (defun dbus-ping (bus service &optional timeout)
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
554 "Check whether SERVICE is registered for D-Bus BUS.
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
555 TIMEOUT, a nonnegative integer, specifies the maximum number of
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
556 milliseconds `dbus-ping' must return. The default value is 25,000.
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
557
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
558 Note, that this autoloads SERVICE if it is not running yet. If
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
559 it shall be checked whether SERVICE is already running, one shall
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
560 apply
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
561
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
562 \(member service \(dbus-list-known-names bus))"
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
563 ;; "Ping" raises a D-Bus error if SERVICE does not exist.
91589
12b2f1526656 * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91588
diff changeset
564 ;; Otherwise, it returns silently with `nil'.
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
565 (condition-case nil
91589
12b2f1526656 * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91588
diff changeset
566 (not
104602
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
567 (if (natnump timeout)
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
568 (dbus-call-method
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
569 bus service dbus-path-dbus dbus-interface-peer
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
570 "Ping" :timeout timeout)
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
571 (dbus-call-method
d74b934b16e5 * net/dbus.el (dbus-ping): Add optional parameter TIMEOUT.
Michael Albinus <michael.albinus@gmx.de>
parents: 104382
diff changeset
572 bus service dbus-path-dbus dbus-interface-peer "Ping")))
91588
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
573 (dbus-error nil)))
83afe69ce25e * net/dbus.el (dbus-interface-peer): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 91484
diff changeset
574
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
575
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
576 ;;; D-Bus introspection.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
577
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
578 (defun dbus-introspect (bus service path)
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
579 "Return all interfaces and sub-nodes of SERVICE,
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
580 registered at object path PATH at bus BUS.
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
581
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
582 BUS is either a Lisp symbol, `:system' or `:session', or a string
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
583 denoting the bus address. SERVICE must be a known service name,
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
584 and PATH must be a valid object path. The last two parameters
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
585 are strings. The result, the introspection data, is a string in
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
586 XML format."
97692
2a8cbdcbe61d * net/dbus.el (dbus-introspect): Use `dbus-call-method-non-blocking'.
Michael Albinus <michael.albinus@gmx.de>
parents: 97261
diff changeset
587 ;; We don't want to raise errors. `dbus-call-method-non-blocking'
2a8cbdcbe61d * net/dbus.el (dbus-introspect): Use `dbus-call-method-non-blocking'.
Michael Albinus <michael.albinus@gmx.de>
parents: 97261
diff changeset
588 ;; is used, because the handler can be registered in our Emacs
2a8cbdcbe61d * net/dbus.el (dbus-introspect): Use `dbus-call-method-non-blocking'.
Michael Albinus <michael.albinus@gmx.de>
parents: 97261
diff changeset
589 ;; instance; caller an callee would block each other.
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
590 (dbus-ignore-errors
107255
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
591 (funcall
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
592 (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking)
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
593 bus service path dbus-interface-introspectable "Introspect")))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
594
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
595 (defun dbus-introspect-xml (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
596 "Return the introspection data of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
597 The data are a parsed list. The root object is a \"node\",
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
598 representing the object path PATH. The root object can contain
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
599 \"interface\" and further \"node\" objects."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
600 ;; We don't want to raise errors.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
601 (xml-node-name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
602 (ignore-errors
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
603 (with-temp-buffer
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
604 (insert (dbus-introspect bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
605 (xml-parse-region (point-min) (point-max))))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
606
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
607 (defun dbus-introspect-get-attribute (object attribute)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
608 "Return the ATTRIBUTE value of D-Bus introspection OBJECT.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
609 ATTRIBUTE must be a string according to the attribute names in
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
610 the D-Bus specification."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
611 (xml-get-attribute-or-nil object (intern attribute)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
612
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
613 (defun dbus-introspect-get-node-names (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
614 "Return all node names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
615 It returns a list of strings. The node names stand for further
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
616 object paths of the D-Bus service."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
617 (let ((object (dbus-introspect-xml bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
618 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
619 (dolist (elt (xml-get-children object 'node) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
620 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
621 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
622
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
623 (defun dbus-introspect-get-all-nodes (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
624 "Return all node names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
625 It returns a list of strings, which are further object paths of SERVICE."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
626 (let ((result (list path)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
627 (dolist (elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
628 (dbus-introspect-get-node-names bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
629 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
630 (setq elt (expand-file-name elt path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
631 (setq result
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
632 (append result (dbus-introspect-get-all-nodes bus service elt))))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
633
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
634 (defun dbus-introspect-get-interface-names (bus service path)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
635 "Return all interface names of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
636 It returns a list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
637
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
638 There will be always the default interface
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
639 \"org.freedesktop.DBus.Introspectable\". Another default
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
640 interface is \"org.freedesktop.DBus.Properties\". If present,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
641 \"interface\" objects can also have \"property\" objects as
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
642 children, beside \"method\" and \"signal\" objects."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
643 (let ((object (dbus-introspect-xml bus service path))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
644 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
645 (dolist (elt (xml-get-children object 'interface) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
646 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
647 'result (dbus-introspect-get-attribute elt "name") 'append))))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
648
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
649 (defun dbus-introspect-get-interface (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
650 "Return the INTERFACE of SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
651 The return value is an XML object. INTERFACE must be a string,
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
652 element of the list returned by `dbus-introspect-get-interface-names'.
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
653 The resulting \"interface\" object can contain \"method\", \"signal\",
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
654 \"property\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
655 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
656 (dbus-introspect-xml bus service path) 'interface)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
657 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
658 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
659 interface
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
660 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
661 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
662 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
663
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
664 (defun dbus-introspect-get-method-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
665 "Return a list of strings of all method names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
666 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
667 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
668 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
669 (dolist (elt (xml-get-children object 'method) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
670 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
671 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
672
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
673 (defun dbus-introspect-get-method (bus service path interface method)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
674 "Return method METHOD of interface INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
675 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
676 METHOD must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
677 `dbus-introspect-get-method-names'. The resulting \"method\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
678 object can contain \"arg\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
679 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
680 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
681 'method)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
682 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
683 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
684 method (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
685 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
686 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
687
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
688 (defun dbus-introspect-get-signal-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
689 "Return a list of strings of all signal names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
690 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
691 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
692 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
693 (dolist (elt (xml-get-children object 'signal) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
694 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
695 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
696
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
697 (defun dbus-introspect-get-signal (bus service path interface signal)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
698 "Return signal SIGNAL of interface INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
699 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
700 SIGNAL must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
701 `dbus-introspect-get-signal-names'. The resulting \"signal\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
702 object can contain \"arg\" and \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
703 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
704 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
705 'signal)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
706 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
707 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
708 signal (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
709 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
710 (car elt)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
711
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
712 (defun dbus-introspect-get-property-names (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
713 "Return a list of strings of all property names of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
714 SERVICE is a service of D-Bus BUS at object path PATH."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
715 (let ((object (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
716 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
717 (dolist (elt (xml-get-children object 'property) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
718 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
719 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
720
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
721 (defun dbus-introspect-get-property (bus service path interface property)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
722 "This function returns PROPERTY of INTERFACE as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
723 It must be located at SERVICE in D-Bus BUS at object path PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
724 PROPERTY must be a string, element of the list returned by
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
725 `dbus-introspect-get-property-names'. The resulting PROPERTY
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
726 object can contain \"annotation\" children."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
727 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
728 (dbus-introspect-get-interface bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
729 'property)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
730 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
731 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
732 property
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
733 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
734 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
735 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
736
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
737 (defun dbus-introspect-get-annotation-names
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
738 (bus service path interface &optional name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
739 "Return all annotation names as list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
740 If NAME is `nil', the annotations are children of INTERFACE,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
741 otherwise NAME must be a \"method\", \"signal\", or \"property\"
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
742 object, where the annotations belong to."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
743 (let ((object
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
744 (if name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
745 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
746 (dbus-introspect-get-signal bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
747 (dbus-introspect-get-property bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
748 (dbus-introspect-get-interface bus service path interface)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
749 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
750 (dolist (elt (xml-get-children object 'annotation) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
751 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
752 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
753
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
754 (defun dbus-introspect-get-annotation
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
755 (bus service path interface name annotation)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
756 "Return ANNOTATION as XML object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
757 If NAME is `nil', ANNOTATION is a child of INTERFACE, otherwise
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
758 NAME must be the name of a \"method\", \"signal\", or
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
759 \"property\" object, where the ANNOTATION belongs to."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
760 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
761 (if name
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
762 (or (dbus-introspect-get-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
763 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
764 (dbus-introspect-get-signal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
765 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
766 (dbus-introspect-get-property
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
767 bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
768 (dbus-introspect-get-interface bus service path interface))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
769 'annotation)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
770 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
771 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
772 annotation
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
773 (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
774 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
775 (car elt)))
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
776
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
777 (defun dbus-introspect-get-argument-names (bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
778 "Return a list of all argument names as list of strings.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
779 NAME must be a \"method\" or \"signal\" object.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
780
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
781 Argument names are optional, the function can return `nil'
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
782 therefore, even if the method or signal has arguments."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
783 (let ((object
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
784 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
785 (dbus-introspect-get-signal bus service path interface name)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
786 result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
787 (dolist (elt (xml-get-children object 'arg) result)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
788 (add-to-list
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
789 'result (dbus-introspect-get-attribute elt "name") 'append))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
790
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
791 (defun dbus-introspect-get-argument (bus service path interface name arg)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
792 "Return argument ARG as XML object.
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
793 NAME must be a \"method\" or \"signal\" object. ARG must be a string,
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
794 element of the list returned by `dbus-introspect-get-argument-names'."
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
795 (let ((elt (xml-get-children
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
796 (or (dbus-introspect-get-method bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
797 (dbus-introspect-get-signal bus service path interface name))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
798 'arg)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
799 (while (and elt
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
800 (not (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
801 arg (dbus-introspect-get-attribute (car elt) "name"))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
802 (setq elt (cdr elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
803 (car elt)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
804
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
805 (defun dbus-introspect-get-signature
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
806 (bus service path interface name &optional direction)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
807 "Return signature of a `method' or `signal', represented by NAME, as string.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
808 If NAME is a `method', DIRECTION can be either \"in\" or \"out\".
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
809 If DIRECTION is `nil', \"in\" is assumed.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
810
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
811 If NAME is a `signal', and DIRECTION is non-`nil', DIRECTION must
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
812 be \"out\"."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
813 ;; For methods, we use "in" as default direction.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
814 (let ((object (or (dbus-introspect-get-method
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
815 bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
816 (dbus-introspect-get-signal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
817 bus service path interface name))))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
818 (when (and (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
819 "method" (dbus-introspect-get-attribute object "name"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
820 (not (stringp direction)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
821 (setq direction "in"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
822 ;; In signals, no direction is given.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
823 (when (string-equal "signal" (dbus-introspect-get-attribute object "name"))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
824 (setq direction nil))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
825 ;; Collect the signatures.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
826 (mapconcat
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
827 '(lambda (x)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
828 (let ((arg (dbus-introspect-get-argument
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
829 bus service path interface name x)))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
830 (if (or (not (stringp direction))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
831 (string-equal
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
832 direction
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
833 (dbus-introspect-get-attribute arg "direction")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
834 (dbus-introspect-get-attribute arg "type")
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
835 "")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
836 (dbus-introspect-get-argument-names bus service path interface name)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
837 "")))
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
838
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
839
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
840 ;;; D-Bus properties.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
841
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
842 (defun dbus-get-property (bus service path interface property)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
843 "Return the value of PROPERTY of INTERFACE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
844 It will be checked at BUS, SERVICE, PATH. The result can be any
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
845 valid D-Bus value, or `nil' if there is no PROPERTY."
87885
b560a1744534 * net/dbus.el (dbus-ignore-errors): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 87586
diff changeset
846 (dbus-ignore-errors
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
847 ;; "Get" returns a variant, so we must use the `car'.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
848 (car
107255
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
849 (funcall
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
850 (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
851 bus service path dbus-interface-properties
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
852 "Get" :timeout 500 interface property))))
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
853
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
854 (defun dbus-set-property (bus service path interface property value)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
855 "Set value of PROPERTY of INTERFACE to VALUE.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
856 It will be checked at BUS, SERVICE, PATH. When the value has
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
857 been set successful, the result is VALUE. Otherwise, `nil' is
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
858 returned."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
859 (dbus-ignore-errors
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
860 ;; "Set" requires a variant.
107255
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
861 (funcall
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
862 (if noninteractive 'dbus-call-method 'dbus-call-method-non-blocking)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
863 bus service path dbus-interface-properties
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
864 "Set" :timeout 500 interface property (list :variant value))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
865 ;; Return VALUE.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
866 (dbus-get-property bus service path interface property)))
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
867
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
868 (defun dbus-get-all-properties (bus service path interface)
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
869 "Return all properties of INTERFACE at BUS, SERVICE, PATH.
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
870 The result is a list of entries. Every entry is a cons of the
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
871 name of the property, and its value. If there are no properties,
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
872 `nil' is returned."
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
873 (dbus-ignore-errors
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
874 ;; "GetAll" returns "a{sv}".
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
875 (let (result)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
876 (dolist (dict
107255
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
877 (funcall
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
878 (if noninteractive
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
879 'dbus-call-method
6ea11661a516 * net/dbus.el (dbus-introspect, dbus-get-property)
Michael Albinus <albinus@detlef>
parents: 106815
diff changeset
880 'dbus-call-method-non-blocking)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
881 bus service path dbus-interface-properties
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
882 "GetAll" :timeout 500 interface)
96801
282e0881421e * net/dbus.el (dbus-interface-properties): New defconst.
Michael Albinus <michael.albinus@gmx.de>
parents: 94677
diff changeset
883 result)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
884 (add-to-list 'result (cons (car dict) (caadr dict)) 'append)))))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
885
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
886 (defun dbus-register-property
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
887 (bus service path interface property access value
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
888 &optional emits-signal dont-register-service)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
889 "Register property PROPERTY on the D-Bus BUS.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
890
109962
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
891 BUS is either a Lisp symbol, `:system' or `:session', or a string
aa3e4f636621 * net/dbus.el: Accept UNIX domain sockets as bus address.
Michael Albinus <michael.albinus@gmx.de>
parents: 109132
diff changeset
892 denoting the bus address.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
893
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
894 SERVICE is the D-Bus service name of the D-Bus. It must be a
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
895 known name (See discussion of DONT-REGISTER-SERVICE below).
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
896
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
897 PATH is the D-Bus object path SERVICE is registered (See
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
898 discussion of DONT-REGISTER-SERVICE below). INTERFACE is the
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
899 name of the interface used at PATH, PROPERTY is the name of the
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
900 property of INTERFACE. ACCESS indicates, whether the property
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
901 can be changed by other services via D-Bus. It must be either
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
902 the symbol `:read' or `:readwrite'. VALUE is the initial value
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
903 of the property, it can be of any valid type (see
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
904 `dbus-call-method' for details).
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
905
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
906 If PROPERTY already exists on PATH, it will be overwritten. For
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
907 properties with access type `:read' this is the only way to
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
908 change their values. Properties with access type `:readwrite'
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
909 can be changed by `dbus-set-property'.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
910
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
911 The interface \"org.freedesktop.DBus.Properties\" is added to
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
912 PATH, including a default handler for the \"Get\", \"GetAll\" and
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
913 \"Set\" methods of this interface. When EMITS-SIGNAL is non-nil,
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
914 the signal \"PropertiesChanged\" is sent when the property is
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
915 changed by `dbus-set-property'.
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
916
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
917 When DONT-REGISTER-SERVICE is non-nil, the known name SERVICE is
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
918 not registered. This means that other D-Bus clients have no way
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
919 of noticing the newly registered property. When interfaces are
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
920 constructed incrementally by adding single methods or properties
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
921 at a time, DONT-REGISTER-SERVICE can be used to prevent other
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
922 clients from discovering the still incomplete interface."
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
923 (unless (member access '(:read :readwrite))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
924 (signal 'dbus-error (list "Access type invalid" access)))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
925
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
926 ;; Register SERVICE.
112112
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
927 (unless (or dont-register-service
318b7249ccd0 * net/dbus.el (dbus-register-property): Added optional parameter
Michael Albinus <michael.albinus@gmx.de>
parents: 111333
diff changeset
928 (member service (dbus-list-names bus)))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
929 (dbus-call-method
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
930 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
931 "RequestName" service 0))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
932
112181
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
933 ;; Add handlers for the three property-related methods.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
934 (dbus-register-method
112181
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
935 bus service path dbus-interface-properties "Get"
112183
adafd735e9aa * net/dbus.el (dbus-register-property): Use `dont-register' keyword.
Michael Albinus <michael.albinus@gmx.de>
parents: 112181
diff changeset
936 'dbus-property-handler 'dont-register)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
937 (dbus-register-method
112183
adafd735e9aa * net/dbus.el (dbus-register-property): Use `dont-register' keyword.
Michael Albinus <michael.albinus@gmx.de>
parents: 112181
diff changeset
938 bus service path dbus-interface-properties "GetAll"
adafd735e9aa * net/dbus.el (dbus-register-property): Use `dont-register' keyword.
Michael Albinus <michael.albinus@gmx.de>
parents: 112181
diff changeset
939 'dbus-property-handler 'dont-register)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
940 (dbus-register-method
112183
adafd735e9aa * net/dbus.el (dbus-register-property): Use `dont-register' keyword.
Michael Albinus <michael.albinus@gmx.de>
parents: 112181
diff changeset
941 bus service path dbus-interface-properties "Set"
adafd735e9aa * net/dbus.el (dbus-register-property): Use `dont-register' keyword.
Michael Albinus <michael.albinus@gmx.de>
parents: 112181
diff changeset
942 'dbus-property-handler 'dont-register)
112181
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
943
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
944 ;; Register the name SERVICE with BUS.
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
945 (unless dont-register-service
af71852e09a2 * net/dbus.el (dbus-unregister-service): Translate returned
Michael Albinus <michael.albinus@gmx.de>
parents: 112112
diff changeset
946 (dbus-register-service bus service))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
947
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
948 ;; Send the PropertiesChanged signal.
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
949 (when emits-signal
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
950 (dbus-send-signal
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
951 bus service path dbus-interface-properties "PropertiesChanged"
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
952 (list (list :dict-entry property (list :variant value)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
953 '(:array)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
954
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
955 ;; Create a hash table entry. We use nil for the unique name,
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
956 ;; because the property might be accessed from anybody.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
957 (let ((key (list bus interface property))
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
958 (val
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
959 (list
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
960 (list
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
961 nil service path
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
962 (cons
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
963 (if emits-signal (list access :emits-signal) (list access))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
964 value)))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
965 (puthash key val dbus-registered-objects-table)
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
966
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
967 ;; Return the object.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
968 (list key (list service path))))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
969
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
970 (defun dbus-property-handler (&rest args)
108938
319b48a599cf * net/dbus.el: Fix typos and declare function.
Juanma Barranquero <lekktu@gmail.com>
parents: 107255
diff changeset
971 "Default handler for the \"org.freedesktop.DBus.Properties\" interface.
106050
533b0628d222 * net/dbus.el (dbus-unregister-service): New defun.
Michael Albinus <michael.albinus@gmx.de>
parents: 105987
diff changeset
972 It will be registered for all objects created by `dbus-register-object'."
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
973 (let ((bus (dbus-event-bus-name last-input-event))
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
974 (service (dbus-event-service-name last-input-event))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
975 (path (dbus-event-path-name last-input-event))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
976 (method (dbus-event-member-name last-input-event))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
977 (interface (car args))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
978 (property (cadr args)))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
979 (cond
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
980 ;; "Get" returns a variant.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
981 ((string-equal method "Get")
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
982 (let ((entry (gethash (list bus interface property)
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
983 dbus-registered-objects-table)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
984 (when (string-equal path (nth 2 (car entry)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
985 (list (list :variant (cdar (last (car entry))))))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
986
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
987 ;; "Set" expects a variant.
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
988 ((string-equal method "Set")
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
989 (let* ((value (caar (cddr args)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
990 (entry (gethash (list bus interface property)
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
991 dbus-registered-objects-table))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
992 ;; The value of the hash table is a list; in case of
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
993 ;; properties it contains just one element (UNAME SERVICE
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
994 ;; PATH OBJECT). OBJECT is a cons cell of a list, which
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
995 ;; contains a list of annotations (like :read,
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
996 ;; :read-write, :emits-signal), and the value of the
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
997 ;; property.
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
998 (object (car (last (car entry)))))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
999 (unless (consp object)
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1000 (signal 'dbus-error
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1001 (list "Property not registered at path" property path)))
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1002 (unless (member :readwrite (car object))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1003 (signal 'dbus-error
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1004 (list "Property not writable at path" property path)))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1005 (puthash (list bus interface property)
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1006 (list (append (butlast (car entry))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1007 (list (cons (car object) value))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1008 dbus-registered-objects-table)
109127
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1009 ;; Send the "PropertiesChanged" signal.
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1010 (when (member :emits-signal (car object))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1011 (dbus-send-signal
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1012 bus service path dbus-interface-properties "PropertiesChanged"
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1013 (list (list :dict-entry property (list :variant value)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1014 '(:array)))
6b757d9cacac * net/dbus.el: Implement signal "PropertiesChanged" (from D-Bus 1.3.1).
Michael Albinus <albinus@detlef>
parents: 108938
diff changeset
1015 ;; Return empty reply.
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1016 :ignore))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1017
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1018 ;; "GetAll" returns "a{sv}".
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1019 ((string-equal method "GetAll")
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1020 (let (result)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1021 (maphash
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1022 (lambda (key val)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1023 (when (and (equal (butlast key) (list bus interface))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1024 (string-equal path (nth 2 (car val)))
106555
98a65639e9cf * net/dbus.el (dbus-property-handler): Filter lambda forms out
Michael Albinus <michael.albinus@gmx.de>
parents: 106050
diff changeset
1025 (not (functionp (car (last (car val))))))
105987
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1026 (add-to-list
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1027 'result
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1028 (list :dict-entry
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1029 (car (last key))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1030 (list :variant (cdar (last (car val))))))))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1031 dbus-registered-objects-table)
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1032 (list result))))))
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1033
57d249deafab * net/dbus.el (dbus-registered-objects-table): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 105928
diff changeset
1034
104355
7d92d0b5edc6 * net/dbus.el (top): Apply `dbus-init-bus' for the :session bus
Michael Albinus <michael.albinus@gmx.de>
parents: 104337
diff changeset
1035 ;; Initialize :system and :session buses. This adds their file
7d92d0b5edc6 * net/dbus.el (top): Apply `dbus-init-bus' for the :session bus
Michael Albinus <michael.albinus@gmx.de>
parents: 104337
diff changeset
1036 ;; descriptors to input_wait_mask, in order to detect incoming
7d92d0b5edc6 * net/dbus.el (top): Apply `dbus-init-bus' for the :session bus
Michael Albinus <michael.albinus@gmx.de>
parents: 104337
diff changeset
1037 ;; messages immediately.
104382
20810cc73f89 * net/dbus.el (top): Initialize only when `dbusbind' is loaded.
Michael Albinus <michael.albinus@gmx.de>
parents: 104377
diff changeset
1038 (when (featurep 'dbusbind)
20810cc73f89 * net/dbus.el (top): Initialize only when `dbusbind' is loaded.
Michael Albinus <michael.albinus@gmx.de>
parents: 104377
diff changeset
1039 (dbus-ignore-errors
20810cc73f89 * net/dbus.el (top): Initialize only when `dbusbind' is loaded.
Michael Albinus <michael.albinus@gmx.de>
parents: 104377
diff changeset
1040 (dbus-init-bus :system)
20810cc73f89 * net/dbus.el (top): Initialize only when `dbusbind' is loaded.
Michael Albinus <michael.albinus@gmx.de>
parents: 104377
diff changeset
1041 (dbus-init-bus :session)))
104355
7d92d0b5edc6 * net/dbus.el (top): Apply `dbus-init-bus' for the :session bus
Michael Albinus <michael.albinus@gmx.de>
parents: 104337
diff changeset
1042
86941
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1043 (provide 'dbus)
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1044
cbc23e728425 * net/dbus.el: New file.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1045 ;;; dbus.el ends here