Mercurial > emacs
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 |
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 |