annotate src/dbusbind.c @ 105026:07b598e03904

diary stuff
author Glenn Morris <rgm@gnu.org>
date Tue, 15 Sep 2009 02:38:20 +0000
parents 109ea433850d
children 474fc7c0fe88
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1 /* Elisp bindings for D-Bus.
100951
e038c1a8307c Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 99098
diff changeset
2 Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
3
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
4 This file is part of GNU Emacs.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
5
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94057
diff changeset
6 GNU Emacs is free software: you can redistribute it and/or modify
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94057
diff changeset
8 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94057
diff changeset
9 (at your option) any later version.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
10
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
14 GNU General Public License for more details.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
15
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 94057
diff changeset
17 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
18
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
19 #include "config.h"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
20
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
21 #ifdef HAVE_DBUS
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
22 #include <stdlib.h>
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
23 #include <stdio.h>
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
24 #include <dbus/dbus.h>
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
25 #include "lisp.h"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
26 #include "frame.h"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
27 #include "termhooks.h"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
28 #include "keyboard.h"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
29
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
30
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
31 /* Subroutines. */
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
32 Lisp_Object Qdbus_init_bus;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
33 Lisp_Object Qdbus_get_unique_name;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
34 Lisp_Object Qdbus_call_method;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
35 Lisp_Object Qdbus_call_method_asynchronously;
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
36 Lisp_Object Qdbus_method_return_internal;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
37 Lisp_Object Qdbus_method_error_internal;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
38 Lisp_Object Qdbus_send_signal;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
39 Lisp_Object Qdbus_register_signal;
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
40 Lisp_Object Qdbus_register_method;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
41
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
42 /* D-Bus error symbol. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
43 Lisp_Object Qdbus_error;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
44
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
45 /* Lisp symbols of the system and session buses. */
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
46 Lisp_Object QCdbus_system_bus, QCdbus_session_bus;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
47
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
48 /* Lisp symbol for method call timeout. */
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
49 Lisp_Object QCdbus_timeout;
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
50
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
51 /* Lisp symbols of D-Bus types. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
52 Lisp_Object QCdbus_type_byte, QCdbus_type_boolean;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
53 Lisp_Object QCdbus_type_int16, QCdbus_type_uint16;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
54 Lisp_Object QCdbus_type_int32, QCdbus_type_uint32;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
55 Lisp_Object QCdbus_type_int64, QCdbus_type_uint64;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
56 Lisp_Object QCdbus_type_double, QCdbus_type_string;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
57 Lisp_Object QCdbus_type_object_path, QCdbus_type_signature;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
58 Lisp_Object QCdbus_type_array, QCdbus_type_variant;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
59 Lisp_Object QCdbus_type_struct, QCdbus_type_dict_entry;
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
60
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
61 /* Hash table which keeps function definitions. */
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
62 Lisp_Object Vdbus_registered_functions_table;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
63
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
64 /* Whether to debug D-Bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
65 Lisp_Object Vdbus_debug;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
66
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
67 /* Whether we are reading a D-Bus event. */
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
68 int xd_in_read_queued_messages = 0;
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
69
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
70
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
71 /* We use "xd_" and "XD_" as prefix for all internal symbols, because
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
72 we don't want to poison other namespaces with "dbus_". */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
73
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
74 /* Raise a signal. If we are reading events, we cannot signal; we
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
75 throw to xd_read_queued_messages then. */
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
76 #define XD_SIGNAL1(arg) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
77 do { \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
78 if (xd_in_read_queued_messages) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
79 Fthrow (Qdbus_error, Qnil); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
80 else \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
81 xsignal1 (Qdbus_error, arg); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
82 } while (0)
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
83
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
84 #define XD_SIGNAL2(arg1, arg2) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
85 do { \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
86 if (xd_in_read_queued_messages) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
87 Fthrow (Qdbus_error, Qnil); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
88 else \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
89 xsignal2 (Qdbus_error, arg1, arg2); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
90 } while (0)
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
91
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
92 #define XD_SIGNAL3(arg1, arg2, arg3) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
93 do { \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
94 if (xd_in_read_queued_messages) \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
95 Fthrow (Qdbus_error, Qnil); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
96 else \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
97 xsignal3 (Qdbus_error, arg1, arg2, arg3); \
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
98 } while (0)
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
99
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
100 /* Raise a Lisp error from a D-Bus ERROR. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
101 #define XD_ERROR(error) \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
102 do { \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
103 char s[1024]; \
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
104 strncpy (s, error.message, 1023); \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
105 dbus_error_free (&error); \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
106 /* Remove the trailing newline. */ \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
107 if (strchr (s, '\n') != NULL) \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
108 s[strlen (s) - 1] = '\0'; \
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
109 XD_SIGNAL1 (build_string (s)); \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
110 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
111
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
112 /* Macros for debugging. In order to enable them, build with
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
113 "make MYCPPFLAGS='-DDBUS_DEBUG -Wall'". */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
114 #ifdef DBUS_DEBUG
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
115 #define XD_DEBUG_MESSAGE(...) \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
116 do { \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
117 char s[1024]; \
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
118 snprintf (s, 1023, __VA_ARGS__); \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
119 printf ("%s: %s\n", __func__, s); \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
120 message ("%s: %s", __func__, s); \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
121 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
122 #define XD_DEBUG_VALID_LISP_OBJECT_P(object) \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
123 do { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
124 if (!valid_lisp_object_p (object)) \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
125 { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
126 XD_DEBUG_MESSAGE ("%d Assertion failure", __LINE__); \
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
127 XD_SIGNAL1 (build_string ("Assertion failure")); \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
128 } \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
129 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
130
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
131 #else /* !DBUS_DEBUG */
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
132 #define XD_DEBUG_MESSAGE(...) \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
133 do { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
134 if (!NILP (Vdbus_debug)) \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
135 { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
136 char s[1024]; \
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
137 snprintf (s, 1023, __VA_ARGS__); \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
138 message ("%s: %s", __func__, s); \
87493
42bd83957313 *** empty log message ***
Michael Albinus <michael.albinus@gmx.de>
parents: 87490
diff changeset
139 } \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
140 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
141 #define XD_DEBUG_VALID_LISP_OBJECT_P(object)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
142 #endif
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
143
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
144 /* Check whether TYPE is a basic DBusType. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
145 #define XD_BASIC_DBUS_TYPE(type) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
146 ((type == DBUS_TYPE_BYTE) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
147 || (type == DBUS_TYPE_BOOLEAN) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
148 || (type == DBUS_TYPE_INT16) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
149 || (type == DBUS_TYPE_UINT16) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
150 || (type == DBUS_TYPE_INT32) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
151 || (type == DBUS_TYPE_UINT32) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
152 || (type == DBUS_TYPE_INT64) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
153 || (type == DBUS_TYPE_UINT64) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
154 || (type == DBUS_TYPE_DOUBLE) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
155 || (type == DBUS_TYPE_STRING) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
156 || (type == DBUS_TYPE_OBJECT_PATH) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
157 || (type == DBUS_TYPE_SIGNATURE))
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
158
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
159 /* This was a macro. On Solaris 2.11 it was said to compile for
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
160 hours, when optimzation is enabled. So we have transferred it into
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
161 a function. */
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
162 /* Determine the DBusType of a given Lisp symbol. OBJECT must be one
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
163 of the predefined D-Bus type symbols. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
164 static int
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
165 xd_symbol_to_dbus_type (object)
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
166 Lisp_Object object;
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
167 {
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
168 return
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
169 ((EQ (object, QCdbus_type_byte)) ? DBUS_TYPE_BYTE
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
170 : (EQ (object, QCdbus_type_boolean)) ? DBUS_TYPE_BOOLEAN
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
171 : (EQ (object, QCdbus_type_int16)) ? DBUS_TYPE_INT16
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
172 : (EQ (object, QCdbus_type_uint16)) ? DBUS_TYPE_UINT16
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
173 : (EQ (object, QCdbus_type_int32)) ? DBUS_TYPE_INT32
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
174 : (EQ (object, QCdbus_type_uint32)) ? DBUS_TYPE_UINT32
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
175 : (EQ (object, QCdbus_type_int64)) ? DBUS_TYPE_INT64
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
176 : (EQ (object, QCdbus_type_uint64)) ? DBUS_TYPE_UINT64
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
177 : (EQ (object, QCdbus_type_double)) ? DBUS_TYPE_DOUBLE
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
178 : (EQ (object, QCdbus_type_string)) ? DBUS_TYPE_STRING
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
179 : (EQ (object, QCdbus_type_object_path)) ? DBUS_TYPE_OBJECT_PATH
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
180 : (EQ (object, QCdbus_type_signature)) ? DBUS_TYPE_SIGNATURE
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
181 : (EQ (object, QCdbus_type_array)) ? DBUS_TYPE_ARRAY
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
182 : (EQ (object, QCdbus_type_variant)) ? DBUS_TYPE_VARIANT
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
183 : (EQ (object, QCdbus_type_struct)) ? DBUS_TYPE_STRUCT
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
184 : (EQ (object, QCdbus_type_dict_entry)) ? DBUS_TYPE_DICT_ENTRY
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
185 : DBUS_TYPE_INVALID);
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
186 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
187
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
188 /* Check whether a Lisp symbol is a predefined D-Bus type symbol. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
189 #define XD_DBUS_TYPE_P(object) \
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
190 (SYMBOLP (object) && ((xd_symbol_to_dbus_type (object) != DBUS_TYPE_INVALID)))
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
191
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
192 /* Determine the DBusType of a given Lisp OBJECT. It is used to
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
193 convert Lisp objects, being arguments of `dbus-call-method' or
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
194 `dbus-send-signal', into corresponding C values appended as
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
195 arguments to a D-Bus message. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
196 #define XD_OBJECT_TO_DBUS_TYPE(object) \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
197 ((EQ (object, Qt) || EQ (object, Qnil)) ? DBUS_TYPE_BOOLEAN \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
198 : (NATNUMP (object)) ? DBUS_TYPE_UINT32 \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
199 : (INTEGERP (object)) ? DBUS_TYPE_INT32 \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
200 : (FLOATP (object)) ? DBUS_TYPE_DOUBLE \
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
201 : (STRINGP (object)) ? DBUS_TYPE_STRING \
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
202 : (XD_DBUS_TYPE_P (object)) ? xd_symbol_to_dbus_type (object) \
98901
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
203 : (CONSP (object)) \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
204 ? ((XD_DBUS_TYPE_P (CAR_SAFE (object))) \
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
205 ? ((XD_BASIC_DBUS_TYPE (xd_symbol_to_dbus_type (CAR_SAFE (object)))) \
98901
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
206 ? DBUS_TYPE_ARRAY \
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
207 : xd_symbol_to_dbus_type (CAR_SAFE (object))) \
98901
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
208 : DBUS_TYPE_ARRAY) \
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
209 : DBUS_TYPE_INVALID)
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
210
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
211 /* Return a list pointer which does not have a Lisp symbol as car. */
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
212 #define XD_NEXT_VALUE(object) \
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
213 ((XD_DBUS_TYPE_P (CAR_SAFE (object))) ? CDR_SAFE (object) : object)
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
214
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
215 /* Compute SIGNATURE of OBJECT. It must have a form that it can be
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
216 used in dbus_message_iter_open_container. DTYPE is the DBusType
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
217 the object is related to. It is passed as argument, because it
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
218 cannot be detected in basic type objects, when they are preceded by
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
219 a type symbol. PARENT_TYPE is the DBusType of a container this
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
220 signature is embedded, or DBUS_TYPE_INVALID. It is needed for the
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
221 check that DBUS_TYPE_DICT_ENTRY occurs only as array element. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
222 static void
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
223 xd_signature (signature, dtype, parent_type, object)
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
224 char *signature;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
225 unsigned int dtype, parent_type;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
226 Lisp_Object object;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
227 {
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
228 unsigned int subtype;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
229 Lisp_Object elt;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
230 char x[DBUS_MAXIMUM_SIGNATURE_LENGTH];
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
231
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
232 elt = object;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
233
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
234 switch (dtype)
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
235 {
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
236 case DBUS_TYPE_BYTE:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
237 case DBUS_TYPE_UINT16:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
238 case DBUS_TYPE_UINT32:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
239 case DBUS_TYPE_UINT64:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
240 CHECK_NATNUM (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
241 sprintf (signature, "%c", dtype);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
242 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
243
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
244 case DBUS_TYPE_BOOLEAN:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
245 if (!EQ (object, Qt) && !EQ (object, Qnil))
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
246 wrong_type_argument (intern ("booleanp"), object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
247 sprintf (signature, "%c", dtype);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
248 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
249
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
250 case DBUS_TYPE_INT16:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
251 case DBUS_TYPE_INT32:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
252 case DBUS_TYPE_INT64:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
253 CHECK_NUMBER (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
254 sprintf (signature, "%c", dtype);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
255 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
256
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
257 case DBUS_TYPE_DOUBLE:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
258 CHECK_FLOAT (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
259 sprintf (signature, "%c", dtype);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
260 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
261
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
262 case DBUS_TYPE_STRING:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
263 case DBUS_TYPE_OBJECT_PATH:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
264 case DBUS_TYPE_SIGNATURE:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
265 CHECK_STRING (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
266 sprintf (signature, "%c", dtype);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
267 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
268
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
269 case DBUS_TYPE_ARRAY:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
270 /* Check that all list elements have the same D-Bus type. For
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
271 complex element types, we just check the container type, not
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
272 the whole element's signature. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
273 CHECK_CONS (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
274
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
275 /* Type symbol is optional. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
276 if (EQ (QCdbus_type_array, CAR_SAFE (elt)))
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
277 elt = XD_NEXT_VALUE (elt);
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
278
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
279 /* If the array is empty, DBUS_TYPE_STRING is the default
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
280 element type. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
281 if (NILP (elt))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
282 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
283 subtype = DBUS_TYPE_STRING;
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
284 strcpy (x, DBUS_TYPE_STRING_AS_STRING);
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
285 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
286 else
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
287 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
288 subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
289 xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt)));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
290 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
291
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
292 /* If the element type is DBUS_TYPE_SIGNATURE, and this is the
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
293 only element, the value of this element is used as he array's
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
294 element signature. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
295 if ((subtype == DBUS_TYPE_SIGNATURE)
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
296 && STRINGP (CAR_SAFE (XD_NEXT_VALUE (elt)))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
297 && NILP (CDR_SAFE (XD_NEXT_VALUE (elt))))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
298 strcpy (x, SDATA (CAR_SAFE (XD_NEXT_VALUE (elt))));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
299
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
300 while (!NILP (elt))
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
301 {
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
302 if (subtype != XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt)))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
303 wrong_type_argument (intern ("D-Bus"), CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
304 elt = CDR_SAFE (XD_NEXT_VALUE (elt));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
305 }
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
306
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
307 sprintf (signature, "%c%s", dtype, x);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
308 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
309
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
310 case DBUS_TYPE_VARIANT:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
311 /* Check that there is exactly one list element. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
312 CHECK_CONS (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
313
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
314 elt = XD_NEXT_VALUE (elt);
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
315 subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
316 xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt)));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
317
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
318 if (!NILP (CDR_SAFE (XD_NEXT_VALUE (elt))))
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
319 wrong_type_argument (intern ("D-Bus"),
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
320 CAR_SAFE (CDR_SAFE (XD_NEXT_VALUE (elt))));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
321
87497
1d88fa50b198 * dbusbind.c (xd_signature): Signature of variant is just "v".
Magnus Henoch <mange@freemail.hu>
parents: 87493
diff changeset
322 sprintf (signature, "%c", dtype);
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
323 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
324
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
325 case DBUS_TYPE_STRUCT:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
326 /* A struct list might contain any number of elements with
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
327 different types. No further check needed. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
328 CHECK_CONS (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
329
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
330 elt = XD_NEXT_VALUE (elt);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
331
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
332 /* Compose the signature from the elements. It is enclosed by
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
333 parentheses. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
334 sprintf (signature, "%c", DBUS_STRUCT_BEGIN_CHAR );
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
335 while (!NILP (elt))
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
336 {
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
337 subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
338 xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt)));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
339 strcat (signature, x);
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
340 elt = CDR_SAFE (XD_NEXT_VALUE (elt));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
341 }
98434
e5f33aa05b97 * dbusbind.c (xd_signature): Use strcat instead of sprintf.
Michael Albinus <michael.albinus@gmx.de>
parents: 97797
diff changeset
342 strcat (signature, DBUS_STRUCT_END_CHAR_AS_STRING);
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
343 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
344
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
345 case DBUS_TYPE_DICT_ENTRY:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
346 /* Check that there are exactly two list elements, and the first
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
347 one is of basic type. The dictionary entry itself must be an
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
348 element of an array. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
349 CHECK_CONS (object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
350
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
351 /* Check the parent object type. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
352 if (parent_type != DBUS_TYPE_ARRAY)
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
353 wrong_type_argument (intern ("D-Bus"), object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
354
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
355 /* Compose the signature from the elements. It is enclosed by
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
356 curly braces. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
357 sprintf (signature, "%c", DBUS_DICT_ENTRY_BEGIN_CHAR);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
358
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
359 /* First element. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
360 elt = XD_NEXT_VALUE (elt);
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
361 subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
362 xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt)));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
363 strcat (signature, x);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
364
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
365 if (!XD_BASIC_DBUS_TYPE (subtype))
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
366 wrong_type_argument (intern ("D-Bus"), CAR_SAFE (XD_NEXT_VALUE (elt)));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
367
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
368 /* Second element. */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
369 elt = CDR_SAFE (XD_NEXT_VALUE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
370 subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
371 xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt)));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
372 strcat (signature, x);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
373
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
374 if (!NILP (CDR_SAFE (XD_NEXT_VALUE (elt))))
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
375 wrong_type_argument (intern ("D-Bus"),
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
376 CAR_SAFE (CDR_SAFE (XD_NEXT_VALUE (elt))));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
377
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
378 /* Closing signature. */
98434
e5f33aa05b97 * dbusbind.c (xd_signature): Use strcat instead of sprintf.
Michael Albinus <michael.albinus@gmx.de>
parents: 97797
diff changeset
379 strcat (signature, DBUS_DICT_ENTRY_END_CHAR_AS_STRING);
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
380 break;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
381
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
382 default:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
383 wrong_type_argument (intern ("D-Bus"), object);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
384 }
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
385
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
386 XD_DEBUG_MESSAGE ("%s", signature);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
387 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
388
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
389 /* Append C value, extracted from Lisp OBJECT, to iteration ITER.
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
390 DTYPE must be a valid DBusType. It is used to convert Lisp
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
391 objects, being arguments of `dbus-call-method' or
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
392 `dbus-send-signal', into corresponding C values appended as
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
393 arguments to a D-Bus message. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
394 static void
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
395 xd_append_arg (dtype, object, iter)
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
396 unsigned int dtype;
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
397 Lisp_Object object;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
398 DBusMessageIter *iter;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
399 {
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
400 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
401 DBusMessageIter subiter;
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
402
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
403 if (XD_BASIC_DBUS_TYPE (dtype))
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
404 switch (dtype)
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
405 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
406 case DBUS_TYPE_BYTE:
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
407 {
87533
d24ee3180427 * dbusbind.c (xd_append_arg): Use unsigned char instead of
Magnus Henoch <mange@freemail.hu>
parents: 87501
diff changeset
408 unsigned char val = XUINT (object) & 0xFF;
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
409 XD_DEBUG_MESSAGE ("%c %d", dtype, val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
410 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
411 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
412 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
413 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
414
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
415 case DBUS_TYPE_BOOLEAN:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
416 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
417 dbus_bool_t val = (NILP (object)) ? FALSE : TRUE;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
418 XD_DEBUG_MESSAGE ("%c %s", dtype, (val == FALSE) ? "false" : "true");
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
419 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
420 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
421 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
422 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
423
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
424 case DBUS_TYPE_INT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
425 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
426 dbus_int16_t val = XINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
427 XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
428 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
429 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
430 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
431 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
432
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
433 case DBUS_TYPE_UINT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
434 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
435 dbus_uint16_t val = XUINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
436 XD_DEBUG_MESSAGE ("%c %u", dtype, (unsigned int) val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
437 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
438 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
439 return;
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
440 }
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
441
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
442 case DBUS_TYPE_INT32:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
443 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
444 dbus_int32_t val = XINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
445 XD_DEBUG_MESSAGE ("%c %d", dtype, val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
446 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
447 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
448 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
449 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
450
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
451 case DBUS_TYPE_UINT32:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
452 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
453 dbus_uint32_t val = XUINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
454 XD_DEBUG_MESSAGE ("%c %u", dtype, val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
455 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
456 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
457 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
458 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
459
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
460 case DBUS_TYPE_INT64:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
461 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
462 dbus_int64_t val = XINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
463 XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
464 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
465 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
466 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
467 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
468
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
469 case DBUS_TYPE_UINT64:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
470 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
471 dbus_uint64_t val = XUINT (object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
472 XD_DEBUG_MESSAGE ("%c %u", dtype, (unsigned int) val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
473 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
474 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
475 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
476 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
477
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
478 case DBUS_TYPE_DOUBLE:
104313
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
479 {
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
480 double val = XFLOAT_DATA (object);
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
481 XD_DEBUG_MESSAGE ("%c %f", dtype, val);
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
482 if (!dbus_message_iter_append_basic (iter, dtype, &val))
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
483 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
484 return;
73f76307d49b * lisp.h (XFLOAT_DATA): Produce an rvalue by adding 0 to the value.
Ken Raeburn <raeburn@raeburn.org>
parents: 104305
diff changeset
485 }
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
486
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
487 case DBUS_TYPE_STRING:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
488 case DBUS_TYPE_OBJECT_PATH:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
489 case DBUS_TYPE_SIGNATURE:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
490 {
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
491 char *val = SDATA (Fstring_make_unibyte (object));
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
492 XD_DEBUG_MESSAGE ("%c %s", dtype, val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
493 if (!dbus_message_iter_append_basic (iter, dtype, &val))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
494 XD_SIGNAL2 (build_string ("Unable to append argument"), object);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
495 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
496 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
497 }
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
498
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
499 else /* Compound types. */
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
500 {
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
501
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
502 /* All compound types except array have a type symbol. For
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
503 array, it is optional. Skip it. */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
504 if (!XD_BASIC_DBUS_TYPE (XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (object))))
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
505 object = XD_NEXT_VALUE (object);
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
506
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
507 /* Open new subiteration. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
508 switch (dtype)
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
509 {
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
510 case DBUS_TYPE_ARRAY:
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
511 /* An array has only elements of the same type. So it is
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
512 sufficient to check the first element's signature
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
513 only. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
514
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
515 if (NILP (object))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
516 /* If the array is empty, DBUS_TYPE_STRING is the default
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
517 element type. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
518 strcpy (signature, DBUS_TYPE_STRING_AS_STRING);
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
519
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
520 else
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
521 /* If the element type is DBUS_TYPE_SIGNATURE, and this is
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
522 the only element, the value of this element is used as
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
523 the array's element signature. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
524 if ((XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (object))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
525 == DBUS_TYPE_SIGNATURE)
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
526 && STRINGP (CAR_SAFE (XD_NEXT_VALUE (object)))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
527 && NILP (CDR_SAFE (XD_NEXT_VALUE (object))))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
528 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
529 strcpy (signature, SDATA (CAR_SAFE (XD_NEXT_VALUE (object))));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
530 object = CDR_SAFE (XD_NEXT_VALUE (object));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
531 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
532
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
533 else
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
534 xd_signature (signature,
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
535 XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (object)),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
536 dtype, CAR_SAFE (XD_NEXT_VALUE (object)));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
537
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
538 XD_DEBUG_MESSAGE ("%c %s %s", dtype, signature,
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
539 SDATA (format2 ("%s", object, Qnil)));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
540 if (!dbus_message_iter_open_container (iter, dtype,
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
541 signature, &subiter))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
542 XD_SIGNAL3 (build_string ("Cannot open container"),
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
543 make_number (dtype), build_string (signature));
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
544 break;
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
545
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
546 case DBUS_TYPE_VARIANT:
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
547 /* A variant has just one element. */
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
548 xd_signature (signature, XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (object)),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
549 dtype, CAR_SAFE (XD_NEXT_VALUE (object)));
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
550
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
551 XD_DEBUG_MESSAGE ("%c %s %s", dtype, signature,
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
552 SDATA (format2 ("%s", object, Qnil)));
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
553 if (!dbus_message_iter_open_container (iter, dtype,
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
554 signature, &subiter))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
555 XD_SIGNAL3 (build_string ("Cannot open container"),
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
556 make_number (dtype), build_string (signature));
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
557 break;
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
558
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
559 case DBUS_TYPE_STRUCT:
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
560 case DBUS_TYPE_DICT_ENTRY:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
561 /* These containers do not require a signature. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
562 XD_DEBUG_MESSAGE ("%c %s", dtype,
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
563 SDATA (format2 ("%s", object, Qnil)));
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
564 if (!dbus_message_iter_open_container (iter, dtype, NULL, &subiter))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
565 XD_SIGNAL2 (build_string ("Cannot open container"),
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
566 make_number (dtype));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
567 break;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
568 }
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
569
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
570 /* Loop over list elements. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
571 while (!NILP (object))
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
572 {
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
573 dtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (object));
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
574 object = XD_NEXT_VALUE (object);
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
575
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
576 xd_append_arg (dtype, CAR_SAFE (object), &subiter);
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
577
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
578 object = CDR_SAFE (object);
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
579 }
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
580
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
581 /* Close the subiteration. */
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
582 if (!dbus_message_iter_close_container (iter, &subiter))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
583 XD_SIGNAL2 (build_string ("Cannot close container"),
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
584 make_number (dtype));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
585 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
586 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
587
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
588 /* Retrieve C value from a DBusMessageIter structure ITER, and return
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
589 a converted Lisp object. The type DTYPE of the argument of the
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
590 D-Bus message must be a valid DBusType. Compound D-Bus types
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
591 result always in a Lisp list. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
592 static Lisp_Object
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
593 xd_retrieve_arg (dtype, iter)
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
594 unsigned int dtype;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
595 DBusMessageIter *iter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
596 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
597
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
598 switch (dtype)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
599 {
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
600 case DBUS_TYPE_BYTE:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
601 {
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
602 unsigned int val;
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
603 dbus_message_iter_get_basic (iter, &val);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
604 val = val & 0xFF;
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
605 XD_DEBUG_MESSAGE ("%c %d", dtype, val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
606 return make_number (val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
607 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
608
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
609 case DBUS_TYPE_BOOLEAN:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
610 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
611 dbus_bool_t val;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
612 dbus_message_iter_get_basic (iter, &val);
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
613 XD_DEBUG_MESSAGE ("%c %s", dtype, (val == FALSE) ? "false" : "true");
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
614 return (val == FALSE) ? Qnil : Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
615 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
616
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
617 case DBUS_TYPE_INT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
618 case DBUS_TYPE_UINT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
619 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
620 dbus_uint16_t val;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
621 dbus_message_iter_get_basic (iter, &val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
622 XD_DEBUG_MESSAGE ("%c %d", dtype, val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
623 return make_number (val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
624 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
625
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
626 case DBUS_TYPE_INT32:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
627 case DBUS_TYPE_UINT32:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
628 {
87972
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
629 /* Assignment to EMACS_INT stops GCC whining about limited
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
630 range of data type. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
631 dbus_uint32_t val;
87972
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
632 EMACS_INT val1;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
633 dbus_message_iter_get_basic (iter, &val);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
634 XD_DEBUG_MESSAGE ("%c %d", dtype, val);
87972
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
635 val1 = val;
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
636 return make_fixnum_or_float (val1);
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
637 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
638
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
639 case DBUS_TYPE_INT64:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
640 case DBUS_TYPE_UINT64:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
641 {
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
642 dbus_uint64_t val;
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
643 dbus_message_iter_get_basic (iter, &val);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
644 XD_DEBUG_MESSAGE ("%c %d", dtype, (int) val);
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
645 return make_fixnum_or_float (val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
646 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
647
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
648 case DBUS_TYPE_DOUBLE:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
649 {
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
650 double val;
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
651 dbus_message_iter_get_basic (iter, &val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
652 XD_DEBUG_MESSAGE ("%c %f", dtype, val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
653 return make_float (val);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
654 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
655
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
656 case DBUS_TYPE_STRING:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
657 case DBUS_TYPE_OBJECT_PATH:
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
658 case DBUS_TYPE_SIGNATURE:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
659 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
660 char *val;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
661 dbus_message_iter_get_basic (iter, &val);
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
662 XD_DEBUG_MESSAGE ("%c %s", dtype, val);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
663 return build_string (val);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
664 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
665
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
666 case DBUS_TYPE_ARRAY:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
667 case DBUS_TYPE_VARIANT:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
668 case DBUS_TYPE_STRUCT:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
669 case DBUS_TYPE_DICT_ENTRY:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
670 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
671 Lisp_Object result;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
672 struct gcpro gcpro1;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
673 result = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
674 GCPRO1 (result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
675 DBusMessageIter subiter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
676 int subtype;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
677 dbus_message_iter_recurse (iter, &subiter);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
678 while ((subtype = dbus_message_iter_get_arg_type (&subiter))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
679 != DBUS_TYPE_INVALID)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
680 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
681 result = Fcons (xd_retrieve_arg (subtype, &subiter), result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
682 dbus_message_iter_next (&subiter);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
683 }
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
684 XD_DEBUG_MESSAGE ("%c %s", dtype, SDATA (format2 ("%s", result, Qnil)));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
685 RETURN_UNGCPRO (Fnreverse (result));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
686 }
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
687
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
688 default:
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
689 XD_DEBUG_MESSAGE ("DBusType '%c' not supported", dtype);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
690 return Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
691 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
692 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
693
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
694 /* Initialize D-Bus connection. BUS is a Lisp symbol, either :system
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
695 or :session. It tells which D-Bus to be initialized. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
696 static DBusConnection *
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
697 xd_initialize (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
698 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
699 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
700 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
701 DBusError derror;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
702
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
703 /* Parameter check. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
704 CHECK_SYMBOL (bus);
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
705 if (!(EQ (bus, QCdbus_system_bus) || EQ (bus, QCdbus_session_bus)))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
706 XD_SIGNAL2 (build_string ("Wrong bus name"), bus);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
707
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
708 /* We do not want to have an autolaunch for the session bus. */
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
709 if (EQ (bus, QCdbus_session_bus)
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
710 && getenv ("DBUS_SESSION_BUS_ADDRESS") == NULL)
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
711 XD_SIGNAL2 (build_string ("No connection to bus"), bus);
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
712
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
713 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
714 dbus_error_init (&derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
715
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
716 if (EQ (bus, QCdbus_system_bus))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
717 connection = dbus_bus_get (DBUS_BUS_SYSTEM, &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
718 else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
719 connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
720
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
721 if (dbus_error_is_set (&derror))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
722 XD_ERROR (derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
723
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
724 if (connection == NULL)
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
725 XD_SIGNAL2 (build_string ("No connection to bus"), bus);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
726
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
727 /* Cleanup. */
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
728 dbus_error_free (&derror);
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
729
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
730 /* Return the result. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
731 return connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
732 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
733
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
734
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
735 /* Add connection file descriptor to input_wait_mask, in order to
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
736 let select() detect, whether a new message has been arrived. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
737 dbus_bool_t
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
738 xd_add_watch (watch, data)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
739 DBusWatch *watch;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
740 void *data;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
741 {
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
742 /* We check only for incoming data. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
743 if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
744 {
104533
b466eba29a01 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): Remove. It was
Michael Albinus <michael.albinus@gmx.de>
parents: 104375
diff changeset
745 #if HAVE_DBUS_WATCH_GET_UNIX_FD
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
746 /* TODO: Reverse these on Win32, which prefers the opposite. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
747 int fd = dbus_watch_get_unix_fd(watch);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
748 if (fd == -1)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
749 fd = dbus_watch_get_socket(watch);
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
750 #else
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
751 int fd = dbus_watch_get_fd(watch);
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
752 #endif
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
753 XD_DEBUG_MESSAGE ("%d", fd);
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
754
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
755 if (fd == -1)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
756 return FALSE;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
757
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
758 /* Add the file descriptor to input_wait_mask. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
759 add_keyboard_wait_descriptor (fd);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
760 }
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
761
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
762 /* Return. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
763 return TRUE;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
764 }
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
765
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
766 /* Remove connection file descriptor from input_wait_mask. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
767 void
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
768 xd_remove_watch (watch, data)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
769 DBusWatch *watch;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
770 void *data;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
771 {
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
772 /* We check only for incoming data. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
773 if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
774 {
104533
b466eba29a01 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): Remove. It was
Michael Albinus <michael.albinus@gmx.de>
parents: 104375
diff changeset
775 #if HAVE_DBUS_WATCH_GET_UNIX_FD
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
776 /* TODO: Reverse these on Win32, which prefers the opposite. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
777 int fd = dbus_watch_get_unix_fd(watch);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
778 if (fd == -1)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
779 fd = dbus_watch_get_socket(watch);
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
780 #else
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
781 int fd = dbus_watch_get_fd(watch);
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
782 #endif
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
783 XD_DEBUG_MESSAGE ("%d", fd);
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
784
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
785 if (fd == -1)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
786 return;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
787
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
788 /* Remove the file descriptor from input_wait_mask. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
789 delete_keyboard_wait_descriptor (fd);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
790 }
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
791
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
792 /* Return. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
793 return;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
794 }
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
795
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
796 DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0,
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
797 doc: /* Initialize connection to D-Bus BUS.
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
798 This is an internal function, it shall not be used outside dbus.el. */)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
799 (bus)
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
800 Lisp_Object bus;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
801 {
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
802 DBusConnection *connection;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
803
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
804 /* Check parameters. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
805 CHECK_SYMBOL (bus);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
806
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
807 /* Open a connection to the bus. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
808 connection = xd_initialize (bus);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
809
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
810 /* Add the watch functions. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
811 if (!dbus_connection_set_watch_functions (connection,
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
812 xd_add_watch,
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
813 xd_remove_watch,
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
814 NULL, NULL, NULL))
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
815 XD_SIGNAL1 (build_string ("Cannot add watch functions"));
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
816
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
817 /* Return. */
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
818 return Qnil;
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
819 }
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
820
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
821 DEFUN ("dbus-get-unique-name", Fdbus_get_unique_name, Sdbus_get_unique_name,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
822 1, 1, 0,
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
823 doc: /* Return the unique name of Emacs registered at D-Bus BUS. */)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
824 (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
825 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
826 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
827 DBusConnection *connection;
94057
a5a4ff3b6cc3 * dbusbind.c (dbus-get-unique-name): Remove extra copying of name string.
Michael Albinus <michael.albinus@gmx.de>
parents: 93420
diff changeset
828 const char *name;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
829
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
830 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
831 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
832
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
833 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
834 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
835
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
836 /* Request the name. */
94057
a5a4ff3b6cc3 * dbusbind.c (dbus-get-unique-name): Remove extra copying of name string.
Michael Albinus <michael.albinus@gmx.de>
parents: 93420
diff changeset
837 name = dbus_bus_get_unique_name (connection);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
838 if (name == NULL)
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
839 XD_SIGNAL1 (build_string ("No unique name available"));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
840
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
841 /* Return. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
842 return build_string (name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
843 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
844
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
845 DEFUN ("dbus-call-method", Fdbus_call_method, Sdbus_call_method, 5, MANY, 0,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
846 doc: /* Call METHOD on the D-Bus BUS.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
847
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
848 BUS is either the symbol `:system' or the symbol `:session'.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
849
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
850 SERVICE is the D-Bus service name to be used. PATH is the D-Bus
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
851 object path SERVICE is registered at. INTERFACE is an interface
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
852 offered by SERVICE. It must provide METHOD.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
853
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
854 If the parameter `:timeout' is given, the following integer TIMEOUT
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
855 specifies the maximun number of milliseconds the method call must
104605
109ea433850d * dbusbind.c (Fdbus_call_method)
Michael Albinus <michael.albinus@gmx.de>
parents: 104533
diff changeset
856 return. The default value is 25,000. If the method call doesn't
94057
a5a4ff3b6cc3 * dbusbind.c (dbus-get-unique-name): Remove extra copying of name string.
Michael Albinus <michael.albinus@gmx.de>
parents: 93420
diff changeset
857 return in time, a D-Bus error is raised.
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
858
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
859 All other arguments ARGS are passed to METHOD as arguments. They are
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
860 converted into D-Bus types via the following rules:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
861
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
862 t and nil => DBUS_TYPE_BOOLEAN
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
863 number => DBUS_TYPE_UINT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
864 integer => DBUS_TYPE_INT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
865 float => DBUS_TYPE_DOUBLE
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
866 string => DBUS_TYPE_STRING
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
867 list => DBUS_TYPE_ARRAY
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
868
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
869 All arguments can be preceded by a type symbol. For details about
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
870 type symbols, see Info node `(dbus)Type Conversion'.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
871
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
872 `dbus-call-method' returns the resulting values of METHOD as a list of
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
873 Lisp objects. The type conversion happens the other direction as for
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
874 input arguments. It follows the mapping rules:
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
875
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
876 DBUS_TYPE_BOOLEAN => t or nil
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
877 DBUS_TYPE_BYTE => number
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
878 DBUS_TYPE_UINT16 => number
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
879 DBUS_TYPE_INT16 => integer
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
880 DBUS_TYPE_UINT32 => number or float
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
881 DBUS_TYPE_INT32 => integer or float
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
882 DBUS_TYPE_UINT64 => number or float
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
883 DBUS_TYPE_INT64 => integer or float
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
884 DBUS_TYPE_DOUBLE => float
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
885 DBUS_TYPE_STRING => string
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
886 DBUS_TYPE_OBJECT_PATH => string
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
887 DBUS_TYPE_SIGNATURE => string
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
888 DBUS_TYPE_ARRAY => list
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
889 DBUS_TYPE_VARIANT => list
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
890 DBUS_TYPE_STRUCT => list
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
891 DBUS_TYPE_DICT_ENTRY => list
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
892
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
893 Example:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
894
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
895 \(dbus-call-method
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
896 :session "org.gnome.seahorse" "/org/gnome/seahorse/keys/openpgp"
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
897 "org.gnome.seahorse.Keys" "GetKeyField"
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
898 "openpgp:657984B8C7A966DD" "simple-name")
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
899
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
900 => (t ("Philip R. Zimmermann"))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
901
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
902 If the result of the METHOD call is just one value, the converted Lisp
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
903 object is returned instead of a list containing this single Lisp object.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
904
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
905 \(dbus-call-method
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
906 :system "org.freedesktop.Hal" "/org/freedesktop/Hal/devices/computer"
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
907 "org.freedesktop.Hal.Device" "GetPropertyString"
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
908 "system.kernel.machine")
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
909
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
910 => "i686"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
911
98783
9ae4dbce33ae * dbusbind.c (Fdbus_call_method): Unbreak usage line.
Magnus Henoch <mange@freemail.hu>
parents: 98434
diff changeset
912 usage: (dbus-call-method BUS SERVICE PATH INTERFACE METHOD &optional :timeout TIMEOUT &rest ARGS) */)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
913 (nargs, args)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
914 int nargs;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
915 register Lisp_Object *args;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
916 {
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
917 Lisp_Object bus, service, path, interface, method;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
918 Lisp_Object result;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
919 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
920 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
921 DBusMessage *dmessage;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
922 DBusMessage *reply;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
923 DBusMessageIter iter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
924 DBusError derror;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
925 unsigned int dtype;
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
926 int timeout = -1;
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
927 int i = 5;
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
928 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
929
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
930 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
931 bus = args[0];
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
932 service = args[1];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
933 path = args[2];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
934 interface = args[3];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
935 method = args[4];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
936
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
937 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
938 CHECK_STRING (service);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
939 CHECK_STRING (path);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
940 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
941 CHECK_STRING (method);
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
942 GCPRO5 (bus, service, path, interface, method);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
943
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
944 XD_DEBUG_MESSAGE ("%s %s %s %s",
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
945 SDATA (service),
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
946 SDATA (path),
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
947 SDATA (interface),
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
948 SDATA (method));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
949
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
950 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
951 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
952
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
953 /* Create the message. */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
954 dmessage = dbus_message_new_method_call (SDATA (service),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
955 SDATA (path),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
956 SDATA (interface),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
957 SDATA (method));
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
958 UNGCPRO;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
959 if (dmessage == NULL)
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
960 XD_SIGNAL1 (build_string ("Unable to create a new message"));
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
961
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
962 /* Check for timeout parameter. */
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
963 if ((i+2 <= nargs) && (EQ ((args[i]), QCdbus_timeout)))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
964 {
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
965 CHECK_NATNUM (args[i+1]);
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
966 timeout = XUINT (args[i+1]);
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
967 i = i+2;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
968 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
969
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
970 /* Initialize parameter list of message. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
971 dbus_message_iter_init_append (dmessage, &iter);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
972
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
973 /* Append parameters to the message. */
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
974 for (; i < nargs; ++i)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
975 {
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
976 dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
977 if (XD_DBUS_TYPE_P (args[i]))
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
978 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
979 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
980 XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
981 XD_DEBUG_MESSAGE ("Parameter%d %s %s", i-4,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
982 SDATA (format2 ("%s", args[i], Qnil)),
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
983 SDATA (format2 ("%s", args[i+1], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
984 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
985 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
986 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
987 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
988 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
989 XD_DEBUG_MESSAGE ("Parameter%d %s", i-4,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
990 SDATA (format2 ("%s", args[i], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
991 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
992
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
993 /* Check for valid signature. We use DBUS_TYPE_INVALID as
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
994 indication that there is no parent type. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
995 xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
996
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
997 xd_append_arg (dtype, args[i], &iter);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
998 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
999
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1000 /* Send the message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1001 dbus_error_init (&derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1002 reply = dbus_connection_send_with_reply_and_block (connection,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1003 dmessage,
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1004 timeout,
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1005 &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1006
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1007 if (dbus_error_is_set (&derror))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1008 XD_ERROR (derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1009
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1010 if (reply == NULL)
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1011 XD_SIGNAL1 (build_string ("No reply"));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1012
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1013 XD_DEBUG_MESSAGE ("Message sent");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1014
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1015 /* Collect the results. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1016 result = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1017 GCPRO1 (result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1018
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1019 if (dbus_message_iter_init (reply, &iter))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1020 {
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1021 /* Loop over the parameters of the D-Bus reply message. Construct a
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1022 Lisp list, which is returned by `dbus-call-method'. */
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1023 while ((dtype = dbus_message_iter_get_arg_type (&iter))
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1024 != DBUS_TYPE_INVALID)
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1025 {
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1026 result = Fcons (xd_retrieve_arg (dtype, &iter), result);
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1027 dbus_message_iter_next (&iter);
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1028 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1029 }
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
1030 else
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1031 {
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1032 /* No arguments: just return nil. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1033 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1034
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1035 /* Cleanup. */
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1036 dbus_error_free (&derror);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1037 dbus_message_unref (dmessage);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1038 dbus_message_unref (reply);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1039
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1040 /* Return the result. If there is only one single Lisp object,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1041 return it as-it-is, otherwise return the reversed list. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1042 if (XUINT (Flength (result)) == 1)
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1043 RETURN_UNGCPRO (CAR_SAFE (result));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1044 else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1045 RETURN_UNGCPRO (Fnreverse (result));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1046 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1047
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1048 DEFUN ("dbus-call-method-asynchronously", Fdbus_call_method_asynchronously,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1049 Sdbus_call_method_asynchronously, 6, MANY, 0,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1050 doc: /* Call METHOD on the D-Bus BUS asynchronously.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1051
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1052 BUS is either the symbol `:system' or the symbol `:session'.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1053
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1054 SERVICE is the D-Bus service name to be used. PATH is the D-Bus
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1055 object path SERVICE is registered at. INTERFACE is an interface
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1056 offered by SERVICE. It must provide METHOD.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1057
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1058 HANDLER is a Lisp function, which is called when the corresponding
104305
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1059 return message has arrived. If HANDLER is nil, no return message will
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1060 be expected.
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1061
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1062 If the parameter `:timeout' is given, the following integer TIMEOUT
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1063 specifies the maximun number of milliseconds the method call must
104605
109ea433850d * dbusbind.c (Fdbus_call_method)
Michael Albinus <michael.albinus@gmx.de>
parents: 104533
diff changeset
1064 return. The default value is 25,000. If the method call doesn't
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1065 return in time, a D-Bus error is raised.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1066
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1067 All other arguments ARGS are passed to METHOD as arguments. They are
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1068 converted into D-Bus types via the following rules:
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1069
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1070 t and nil => DBUS_TYPE_BOOLEAN
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1071 number => DBUS_TYPE_UINT32
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1072 integer => DBUS_TYPE_INT32
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1073 float => DBUS_TYPE_DOUBLE
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1074 string => DBUS_TYPE_STRING
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1075 list => DBUS_TYPE_ARRAY
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1076
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1077 All arguments can be preceded by a type symbol. For details about
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1078 type symbols, see Info node `(dbus)Type Conversion'.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1079
104305
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1080 Unless HANDLER is nil, the function returns a key into the hash table
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1081 `dbus-registered-functions-table'. The corresponding entry in the
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1082 hash table is removed, when the return message has been arrived, and
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1083 HANDLER is called.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1084
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1085 Example:
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1086
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1087 \(dbus-call-method-asynchronously
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1088 :system "org.freedesktop.Hal" "/org/freedesktop/Hal/devices/computer"
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1089 "org.freedesktop.Hal.Device" "GetPropertyString" 'message
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1090 "system.kernel.machine")
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1091
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1092 => (:system 2)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1093
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1094 -| i686
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1095
98783
9ae4dbce33ae * dbusbind.c (Fdbus_call_method): Unbreak usage line.
Magnus Henoch <mange@freemail.hu>
parents: 98434
diff changeset
1096 usage: (dbus-call-method-asynchronously BUS SERVICE PATH INTERFACE METHOD HANDLER &optional :timeout TIMEOUT &rest ARGS) */)
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1097 (nargs, args)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1098 int nargs;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1099 register Lisp_Object *args;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1100 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1101 Lisp_Object bus, service, path, interface, method, handler;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1102 Lisp_Object result;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1103 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1104 DBusConnection *connection;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1105 DBusMessage *dmessage;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1106 DBusMessageIter iter;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1107 unsigned int dtype;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1108 int timeout = -1;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1109 int i = 6;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1110 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1111
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1112 /* Check parameters. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1113 bus = args[0];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1114 service = args[1];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1115 path = args[2];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1116 interface = args[3];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1117 method = args[4];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1118 handler = args[5];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1119
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1120 CHECK_SYMBOL (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1121 CHECK_STRING (service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1122 CHECK_STRING (path);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1123 CHECK_STRING (interface);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1124 CHECK_STRING (method);
104305
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1125 if (!NILP (handler) && !FUNCTIONP (handler))
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1126 wrong_type_argument (intern ("functionp"), handler);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1127 GCPRO6 (bus, service, path, interface, method, handler);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1128
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1129 XD_DEBUG_MESSAGE ("%s %s %s %s",
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1130 SDATA (service),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1131 SDATA (path),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1132 SDATA (interface),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1133 SDATA (method));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1134
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1135 /* Open a connection to the bus. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1136 connection = xd_initialize (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1137
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1138 /* Create the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1139 dmessage = dbus_message_new_method_call (SDATA (service),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1140 SDATA (path),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1141 SDATA (interface),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1142 SDATA (method));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1143 if (dmessage == NULL)
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1144 XD_SIGNAL1 (build_string ("Unable to create a new message"));
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1145
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1146 /* Check for timeout parameter. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1147 if ((i+2 <= nargs) && (EQ ((args[i]), QCdbus_timeout)))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1148 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1149 CHECK_NATNUM (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1150 timeout = XUINT (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1151 i = i+2;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1152 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1153
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1154 /* Initialize parameter list of message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1155 dbus_message_iter_init_append (dmessage, &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1156
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1157 /* Append parameters to the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1158 for (; i < nargs; ++i)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1159 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1160 dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1161 if (XD_DBUS_TYPE_P (args[i]))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1162 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1163 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1164 XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1165 XD_DEBUG_MESSAGE ("Parameter%d %s %s", i-4,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1166 SDATA (format2 ("%s", args[i], Qnil)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1167 SDATA (format2 ("%s", args[i+1], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1168 ++i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1169 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1170 else
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1171 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1172 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1173 XD_DEBUG_MESSAGE ("Parameter%d %s", i-4,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1174 SDATA (format2 ("%s", args[i], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1175 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1176
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1177 /* Check for valid signature. We use DBUS_TYPE_INVALID as
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1178 indication that there is no parent type. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1179 xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1180
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1181 xd_append_arg (dtype, args[i], &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1182 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1183
104305
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1184 if (!NILP (handler))
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1185 {
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1186 /* Send the message. The message is just added to the outgoing
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1187 message queue. */
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1188 if (!dbus_connection_send_with_reply (connection, dmessage,
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1189 NULL, timeout))
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1190 XD_SIGNAL1 (build_string ("Cannot send message"));
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1191
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1192 /* The result is the key in Vdbus_registered_functions_table. */
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1193 result = (list2 (bus, make_number (dbus_message_get_serial (dmessage))));
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1194
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1195 /* Create a hash table entry. */
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1196 Fputhash (result, handler, Vdbus_registered_functions_table);
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1197 }
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1198 else
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1199 {
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1200 /* Send the message. The message is just added to the outgoing
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1201 message queue. */
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1202 if (!dbus_connection_send (connection, dmessage, NULL))
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1203 XD_SIGNAL1 (build_string ("Cannot send message"));
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1204
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1205 result = Qnil;
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1206 }
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1207
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1208 /* Flush connection to ensure the message is handled. */
52ea0b8b565e * dbusbind.c (Fdbus_call_method_asynchronously): Allow nil HANDLER.
Michael Albinus <michael.albinus@gmx.de>
parents: 104296
diff changeset
1209 dbus_connection_flush (connection);
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1210
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1211 XD_DEBUG_MESSAGE ("Message sent");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1212
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1213 /* Cleanup. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1214 dbus_message_unref (dmessage);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1215
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1216 /* Return the result. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1217 RETURN_UNGCPRO (result);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1218 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1219
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1220 DEFUN ("dbus-method-return-internal", Fdbus_method_return_internal,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1221 Sdbus_method_return_internal,
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1222 3, MANY, 0,
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1223 doc: /* Return for message SERIAL on the D-Bus BUS.
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1224 This is an internal function, it shall not be used outside dbus.el.
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1225
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1226 usage: (dbus-method-return-internal BUS SERIAL SERVICE &rest ARGS) */)
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1227 (nargs, args)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1228 int nargs;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1229 register Lisp_Object *args;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1230 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1231 Lisp_Object bus, serial, service;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1232 struct gcpro gcpro1, gcpro2, gcpro3;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1233 DBusConnection *connection;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1234 DBusMessage *dmessage;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1235 DBusMessageIter iter;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1236 unsigned int dtype;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1237 int i;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1238 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1239
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1240 /* Check parameters. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1241 bus = args[0];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1242 serial = args[1];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1243 service = args[2];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1244
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1245 CHECK_SYMBOL (bus);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1246 CHECK_NUMBER (serial);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1247 CHECK_STRING (service);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1248 GCPRO3 (bus, serial, service);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1249
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1250 XD_DEBUG_MESSAGE ("%d %s ", XUINT (serial), SDATA (service));
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1251
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1252 /* Open a connection to the bus. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1253 connection = xd_initialize (bus);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1254
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1255 /* Create the message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1256 dmessage = dbus_message_new (DBUS_MESSAGE_TYPE_METHOD_RETURN);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1257 if ((dmessage == NULL)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1258 || (!dbus_message_set_reply_serial (dmessage, XUINT (serial)))
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1259 || (!dbus_message_set_destination (dmessage, SDATA (service))))
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1260 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1261 UNGCPRO;
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1262 XD_SIGNAL1 (build_string ("Unable to create a return message"));
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1263 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1264
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1265 UNGCPRO;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1266
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1267 /* Initialize parameter list of message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1268 dbus_message_iter_init_append (dmessage, &iter);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1269
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1270 /* Append parameters to the message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1271 for (i = 3; i < nargs; ++i)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1272 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1273 dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1274 if (XD_DBUS_TYPE_P (args[i]))
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1275 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1276 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1277 XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1278 XD_DEBUG_MESSAGE ("Parameter%d %s %s", i-2,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1279 SDATA (format2 ("%s", args[i], Qnil)),
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1280 SDATA (format2 ("%s", args[i+1], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1281 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1282 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1283 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1284 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1285 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1286 XD_DEBUG_MESSAGE ("Parameter%d %s", i-2,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1287 SDATA (format2 ("%s", args[i], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1288 }
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1289
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1290 /* Check for valid signature. We use DBUS_TYPE_INVALID as
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1291 indication that there is no parent type. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1292 xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1293
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1294 xd_append_arg (dtype, args[i], &iter);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1295 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1296
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1297 /* Send the message. The message is just added to the outgoing
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1298 message queue. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1299 if (!dbus_connection_send (connection, dmessage, NULL))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1300 XD_SIGNAL1 (build_string ("Cannot send message"));
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1301
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1302 /* Flush connection to ensure the message is handled. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1303 dbus_connection_flush (connection);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1304
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1305 XD_DEBUG_MESSAGE ("Message sent");
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1306
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1307 /* Cleanup. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1308 dbus_message_unref (dmessage);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1309
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1310 /* Return. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1311 return Qt;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1312 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1313
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1314 DEFUN ("dbus-method-error-internal", Fdbus_method_error_internal,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1315 Sdbus_method_error_internal,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1316 3, MANY, 0,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1317 doc: /* Return error message for message SERIAL on the D-Bus BUS.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1318 This is an internal function, it shall not be used outside dbus.el.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1319
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1320 usage: (dbus-method-error-internal BUS SERIAL SERVICE &rest ARGS) */)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1321 (nargs, args)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1322 int nargs;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1323 register Lisp_Object *args;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1324 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1325 Lisp_Object bus, serial, service;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1326 struct gcpro gcpro1, gcpro2, gcpro3;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1327 DBusConnection *connection;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1328 DBusMessage *dmessage;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1329 DBusMessageIter iter;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1330 unsigned int dtype;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1331 int i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1332 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1333
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1334 /* Check parameters. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1335 bus = args[0];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1336 serial = args[1];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1337 service = args[2];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1338
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1339 CHECK_SYMBOL (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1340 CHECK_NUMBER (serial);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1341 CHECK_STRING (service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1342 GCPRO3 (bus, serial, service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1343
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1344 XD_DEBUG_MESSAGE ("%d %s ", XUINT (serial), SDATA (service));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1345
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1346 /* Open a connection to the bus. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1347 connection = xd_initialize (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1348
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1349 /* Create the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1350 dmessage = dbus_message_new (DBUS_MESSAGE_TYPE_ERROR);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1351 if ((dmessage == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1352 || (!dbus_message_set_error_name (dmessage, DBUS_ERROR_FAILED))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1353 || (!dbus_message_set_reply_serial (dmessage, XUINT (serial)))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1354 || (!dbus_message_set_destination (dmessage, SDATA (service))))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1355 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1356 UNGCPRO;
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1357 XD_SIGNAL1 (build_string ("Unable to create a error message"));
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1358 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1359
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1360 UNGCPRO;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1361
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1362 /* Initialize parameter list of message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1363 dbus_message_iter_init_append (dmessage, &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1364
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1365 /* Append parameters to the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1366 for (i = 3; i < nargs; ++i)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1367 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1368 dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1369 if (XD_DBUS_TYPE_P (args[i]))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1370 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1371 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1372 XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1373 XD_DEBUG_MESSAGE ("Parameter%d %s %s", i-2,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1374 SDATA (format2 ("%s", args[i], Qnil)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1375 SDATA (format2 ("%s", args[i+1], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1376 ++i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1377 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1378 else
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1379 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1380 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1381 XD_DEBUG_MESSAGE ("Parameter%d %s", i-2,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1382 SDATA (format2 ("%s", args[i], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1383 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1384
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1385 /* Check for valid signature. We use DBUS_TYPE_INVALID as
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1386 indication that there is no parent type. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1387 xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1388
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1389 xd_append_arg (dtype, args[i], &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1390 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1391
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1392 /* Send the message. The message is just added to the outgoing
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1393 message queue. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1394 if (!dbus_connection_send (connection, dmessage, NULL))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1395 XD_SIGNAL1 (build_string ("Cannot send message"));
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1396
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1397 /* Flush connection to ensure the message is handled. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1398 dbus_connection_flush (connection);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1399
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1400 XD_DEBUG_MESSAGE ("Message sent");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1401
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1402 /* Cleanup. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1403 dbus_message_unref (dmessage);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1404
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1405 /* Return. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1406 return Qt;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1407 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1408
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1409 DEFUN ("dbus-send-signal", Fdbus_send_signal, Sdbus_send_signal, 5, MANY, 0,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1410 doc: /* Send signal SIGNAL on the D-Bus BUS.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1411
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1412 BUS is either the symbol `:system' or the symbol `:session'.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1413
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1414 SERVICE is the D-Bus service name SIGNAL is sent from. PATH is the
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1415 D-Bus object path SERVICE is registered at. INTERFACE is an interface
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1416 offered by SERVICE. It must provide signal SIGNAL.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1417
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1418 All other arguments ARGS are passed to SIGNAL as arguments. They are
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1419 converted into D-Bus types via the following rules:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1420
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1421 t and nil => DBUS_TYPE_BOOLEAN
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1422 number => DBUS_TYPE_UINT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1423 integer => DBUS_TYPE_INT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1424 float => DBUS_TYPE_DOUBLE
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1425 string => DBUS_TYPE_STRING
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1426 list => DBUS_TYPE_ARRAY
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1427
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1428 All arguments can be preceded by a type symbol. For details about
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1429 type symbols, see Info node `(dbus)Type Conversion'.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1430
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1431 Example:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1432
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1433 \(dbus-send-signal
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1434 :session "org.gnu.Emacs" "/org/gnu/Emacs"
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1435 "org.gnu.Emacs.FileManager" "FileModified" "/home/albinus/.emacs")
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1436
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1437 usage: (dbus-send-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS) */)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1438 (nargs, args)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1439 int nargs;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1440 register Lisp_Object *args;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1441 {
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1442 Lisp_Object bus, service, path, interface, signal;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1443 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1444 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1445 DBusMessage *dmessage;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1446 DBusMessageIter iter;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1447 unsigned int dtype;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1448 int i;
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1449 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1450
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1451 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1452 bus = args[0];
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1453 service = args[1];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1454 path = args[2];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1455 interface = args[3];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1456 signal = args[4];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1457
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1458 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1459 CHECK_STRING (service);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1460 CHECK_STRING (path);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1461 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1462 CHECK_STRING (signal);
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1463 GCPRO5 (bus, service, path, interface, signal);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1464
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1465 XD_DEBUG_MESSAGE ("%s %s %s %s",
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1466 SDATA (service),
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1467 SDATA (path),
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1468 SDATA (interface),
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1469 SDATA (signal));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1470
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1471 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1472 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1473
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1474 /* Create the message. */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1475 dmessage = dbus_message_new_signal (SDATA (path),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1476 SDATA (interface),
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1477 SDATA (signal));
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1478 UNGCPRO;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1479 if (dmessage == NULL)
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1480 XD_SIGNAL1 (build_string ("Unable to create a new message"));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1481
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1482 /* Initialize parameter list of message. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1483 dbus_message_iter_init_append (dmessage, &iter);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1484
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1485 /* Append parameters to the message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1486 for (i = 5; i < nargs; ++i)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1487 {
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1488 dtype = XD_OBJECT_TO_DBUS_TYPE (args[i]);
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1489 if (XD_DBUS_TYPE_P (args[i]))
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1490 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1491 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1492 XD_DEBUG_VALID_LISP_OBJECT_P (args[i+1]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1493 XD_DEBUG_MESSAGE ("Parameter%d %s %s", i-4,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1494 SDATA (format2 ("%s", args[i], Qnil)),
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1495 SDATA (format2 ("%s", args[i+1], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1496 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1497 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1498 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1499 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1500 XD_DEBUG_VALID_LISP_OBJECT_P (args[i]);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1501 XD_DEBUG_MESSAGE ("Parameter%d %s", i-4,
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1502 SDATA (format2 ("%s", args[i], Qnil)));
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1503 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1504
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1505 /* Check for valid signature. We use DBUS_TYPE_INVALID as
87361
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1506 indication that there is no parent type. */
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
1507 xd_signature (signature, dtype, DBUS_TYPE_INVALID, args[i]);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1508
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1509 xd_append_arg (dtype, args[i], &iter);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1510 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1511
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1512 /* Send the message. The message is just added to the outgoing
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1513 message queue. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1514 if (!dbus_connection_send (connection, dmessage, NULL))
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1515 XD_SIGNAL1 (build_string ("Cannot send message"));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1516
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1517 /* Flush connection to ensure the message is handled. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1518 dbus_connection_flush (connection);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1519
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1520 XD_DEBUG_MESSAGE ("Signal sent");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1521
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1522 /* Cleanup. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1523 dbus_message_unref (dmessage);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1524
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1525 /* Return. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1526 return Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1527 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1528
104285
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1529 /* Check, whether there is pending input in the message queue of the
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1530 D-Bus BUS. BUS is a Lisp symbol, either :system or :session. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1531 int
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1532 xd_get_dispatch_status (bus)
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1533 Lisp_Object bus;
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1534 {
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1535 DBusConnection *connection;
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1536
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1537 /* Open a connection to the bus. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1538 connection = xd_initialize (bus);
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1539
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1540 /* Non blocking read of the next available message. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1541 dbus_connection_read_write (connection, 0);
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1542
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1543 /* Return. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1544 return
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1545 (dbus_connection_get_dispatch_status (connection)
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1546 == DBUS_DISPATCH_DATA_REMAINS)
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1547 ? TRUE : FALSE;
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1548 }
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1549
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1550 /* Check for queued incoming messages from the system and session buses. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1551 int
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1552 xd_pending_messages ()
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1553 {
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1554
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1555 /* Vdbus_registered_functions_table will be initialized as hash
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1556 table in dbus.el. When this package isn't loaded yet, it doesn't
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1557 make sense to handle D-Bus messages. */
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1558 return (HASH_TABLE_P (Vdbus_registered_functions_table)
104375
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
1559 ? (xd_get_dispatch_status (QCdbus_system_bus)
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
1560 || ((getenv ("DBUS_SESSION_BUS_ADDRESS") != NULL)
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
1561 ? xd_get_dispatch_status (QCdbus_session_bus)
cb9bcec90aa8 * dbusbind.c (XD_WITH_DBUS_WATCH_GET_UNIX_FD): New macro.
Michael Albinus <michael.albinus@gmx.de>
parents: 104339
diff changeset
1562 : FALSE))
104285
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1563 : FALSE);
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1564 }
4eb010135586 * dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
Michael Albinus <michael.albinus@gmx.de>
parents: 103785
diff changeset
1565
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1566 /* Read queued incoming message of the D-Bus BUS. BUS is a Lisp
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1567 symbol, either :system or :session. */
103612
25fc47c9b012 * dbusbind.c (XD_SYMBOL_TO_DBUS_TYPE): Convert macro into function
Michael Albinus <michael.albinus@gmx.de>
parents: 101276
diff changeset
1568 static Lisp_Object
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1569 xd_read_message (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1570 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1571 {
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1572 Lisp_Object args, key, value;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1573 struct gcpro gcpro1;
87501
38cad849184d * dbusbind.c (xd_read_message): Use non-static input_event struct.
Michael Albinus <michael.albinus@gmx.de>
parents: 87497
diff changeset
1574 struct input_event event;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1575 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1576 DBusMessage *dmessage;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1577 DBusMessageIter iter;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1578 unsigned int dtype;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1579 int mtype, serial;
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
1580 const char *uname, *path, *interface, *member;
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1581
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1582 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1583 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1584
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1585 /* Non blocking read of the next available message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1586 dbus_connection_read_write (connection, 0);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1587 dmessage = dbus_connection_pop_message (connection);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1588
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1589 /* Return if there is no queued message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1590 if (dmessage == NULL)
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1591 return Qnil;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1592
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1593 /* Collect the parameters. */
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1594 args = Qnil;
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1595 GCPRO1 (args);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1596
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1597 /* Loop over the resulting parameters. Construct a list. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1598 if (dbus_message_iter_init (dmessage, &iter))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1599 {
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1600 while ((dtype = dbus_message_iter_get_arg_type (&iter))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1601 != DBUS_TYPE_INVALID)
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1602 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1603 args = Fcons (xd_retrieve_arg (dtype, &iter), args);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1604 dbus_message_iter_next (&iter);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1605 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1606 /* The arguments are stored in reverse order. Reorder them. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1607 args = Fnreverse (args);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1608 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1609
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1610 /* Read message type, message serial, unique name, object path,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1611 interface and member from the message. */
97211
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1612 mtype = dbus_message_get_type (dmessage);
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1613 serial =
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1614 ((mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1615 || (mtype == DBUS_MESSAGE_TYPE_ERROR))
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1616 ? dbus_message_get_reply_serial (dmessage)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1617 : dbus_message_get_serial (dmessage);
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1618 uname = dbus_message_get_sender (dmessage);
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1619 path = dbus_message_get_path (dmessage);
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
1620 interface = dbus_message_get_interface (dmessage);
97211
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1621 member = dbus_message_get_member (dmessage);
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
1622
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1623 XD_DEBUG_MESSAGE ("Event received: %s %d %s %s %s %s %s",
97211
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1624 (mtype == DBUS_MESSAGE_TYPE_INVALID)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1625 ? "DBUS_MESSAGE_TYPE_INVALID"
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1626 : (mtype == DBUS_MESSAGE_TYPE_METHOD_CALL)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1627 ? "DBUS_MESSAGE_TYPE_METHOD_CALL"
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1628 : (mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1629 ? "DBUS_MESSAGE_TYPE_METHOD_RETURN"
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1630 : (mtype == DBUS_MESSAGE_TYPE_ERROR)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1631 ? "DBUS_MESSAGE_TYPE_ERROR"
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1632 : "DBUS_MESSAGE_TYPE_SIGNAL",
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1633 serial, uname, path, interface, member,
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1634 SDATA (format2 ("%s", args, Qnil)));
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1635
97211
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1636 if ((mtype == DBUS_MESSAGE_TYPE_METHOD_RETURN)
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1637 || (mtype == DBUS_MESSAGE_TYPE_ERROR))
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1638 {
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1639 /* Search for a registered function of the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1640 key = list2 (bus, make_number (serial));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1641 value = Fgethash (key, Vdbus_registered_functions_table, Qnil);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1642
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1643 /* There shall be exactly one entry. Construct an event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1644 if (NILP (value))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1645 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1646
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1647 /* Remove the entry. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1648 Fremhash (key, Vdbus_registered_functions_table);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1649
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1650 /* Construct an event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1651 EVENT_INIT (event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1652 event.kind = DBUS_EVENT;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1653 event.frame_or_window = Qnil;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1654 event.arg = Fcons (value, args);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1655 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1656
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1657 else /* (mtype != DBUS_MESSAGE_TYPE_METHOD_RETURN) */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1658 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1659 /* Vdbus_registered_functions_table requires non-nil interface
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1660 and member. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1661 if ((interface == NULL) || (member == NULL))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1662 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1663
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1664 /* Search for a registered function of the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1665 key = list3 (bus, build_string (interface), build_string (member));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1666 value = Fgethash (key, Vdbus_registered_functions_table, Qnil);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1667
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1668 /* Loop over the registered functions. Construct an event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1669 while (!NILP (value))
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1670 {
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1671 key = CAR_SAFE (value);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1672 /* key has the structure (UNAME SERVICE PATH HANDLER). */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1673 if (((uname == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1674 || (NILP (CAR_SAFE (key)))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1675 || (strcmp (uname, SDATA (CAR_SAFE (key))) == 0))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1676 && ((path == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1677 || (NILP (CAR_SAFE (CDR_SAFE (CDR_SAFE (key)))))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1678 || (strcmp (path,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1679 SDATA (CAR_SAFE (CDR_SAFE (CDR_SAFE (key)))))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1680 == 0))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1681 && (!NILP (CAR_SAFE (CDR_SAFE (CDR_SAFE (CDR_SAFE (key)))))))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1682 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1683 EVENT_INIT (event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1684 event.kind = DBUS_EVENT;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1685 event.frame_or_window = Qnil;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1686 event.arg = Fcons (CAR_SAFE (CDR_SAFE (CDR_SAFE (CDR_SAFE (key)))),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1687 args);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1688 break;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1689 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1690 value = CDR_SAFE (value);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1691 }
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1692
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1693 if (NILP (value))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1694 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1695 }
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1696
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1697 /* Add type, serial, uname, path, interface and member to the event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1698 event.arg = Fcons ((member == NULL ? Qnil : build_string (member)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1699 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1700 event.arg = Fcons ((interface == NULL ? Qnil : build_string (interface)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1701 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1702 event.arg = Fcons ((path == NULL ? Qnil : build_string (path)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1703 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1704 event.arg = Fcons ((uname == NULL ? Qnil : build_string (uname)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1705 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1706 event.arg = Fcons (make_number (serial), event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1707 event.arg = Fcons (make_number (mtype), event.arg);
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1708
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1709 /* Add the bus symbol to the event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1710 event.arg = Fcons (bus, event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1711
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1712 /* Store it into the input event queue. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1713 kbd_buffer_store_event (&event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1714
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1715 XD_DEBUG_MESSAGE ("Event stored: %s",
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1716 SDATA (format2 ("%s", event.arg, Qnil)));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1717
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1718 /* Cleanup. */
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
1719 cleanup:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1720 dbus_message_unref (dmessage);
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1721
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1722 RETURN_UNGCPRO (Qnil);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1723 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1724
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1725 /* Read queued incoming messages from the system and session buses. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1726 void
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1727 xd_read_queued_messages ()
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1728 {
87092
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1729
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1730 /* Vdbus_registered_functions_table will be initialized as hash
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1731 table in dbus.el. When this package isn't loaded yet, it doesn't
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1732 make sense to handle D-Bus messages. Furthermore, we ignore all
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1733 Lisp errors during the call. */
87092
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1734 if (HASH_TABLE_P (Vdbus_registered_functions_table))
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1735 {
99098
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1736 xd_in_read_queued_messages = 1;
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1737 internal_catch (Qdbus_error, xd_read_message, QCdbus_system_bus);
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1738 internal_catch (Qdbus_error, xd_read_message, QCdbus_session_bus);
35372c2ca5c9 * dbusbind.c (xd_in_read_queued_messages): New variable.
Michael Albinus <michael.albinus@gmx.de>
parents: 98901
diff changeset
1739 xd_in_read_queued_messages = 0;
87092
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1740 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1741 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1742
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1743 DEFUN ("dbus-register-signal", Fdbus_register_signal, Sdbus_register_signal,
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1744 6, MANY, 0,
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1745 doc: /* Register for signal SIGNAL on the D-Bus BUS.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1746
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1747 BUS is either the symbol `:system' or the symbol `:session'.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1748
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1749 SERVICE is the D-Bus service name used by the sending D-Bus object.
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1750 It can be either a known name or the unique name of the D-Bus object
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1751 sending the signal. When SERVICE is nil, related signals from all
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1752 D-Bus objects shall be accepted.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1753
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1754 PATH is the D-Bus object path SERVICE is registered. It can also be
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1755 nil if the path name of incoming signals shall not be checked.
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1756
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1757 INTERFACE is an interface offered by SERVICE. It must provide SIGNAL.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1758 HANDLER is a Lisp function to be called when the signal is received.
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1759 It must accept as arguments the values SIGNAL is sending.
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1760
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1761 All other arguments ARGS, if specified, must be strings. They stand
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1762 for the respective arguments of the signal in their order, and are
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1763 used for filtering as well. A nil argument might be used to preserve
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1764 the order.
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1765
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1766 INTERFACE, SIGNAL and HANDLER must not be nil. Example:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1767
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1768 \(defun my-signal-handler (device)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1769 (message "Device %s added" device))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1770
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1771 \(dbus-register-signal
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1772 :system "org.freedesktop.Hal" "/org/freedesktop/Hal/Manager"
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1773 "org.freedesktop.Hal.Manager" "DeviceAdded" 'my-signal-handler)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1774
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1775 => ((:system "org.freedesktop.Hal.Manager" "DeviceAdded")
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1776 ("org.freedesktop.Hal" "/org/freedesktop/Hal/Manager" my-signal-handler))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1777
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1778 `dbus-register-signal' returns an object, which can be used in
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1779 `dbus-unregister-object' for removing the registration.
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1780
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1781 usage: (dbus-register-signal BUS SERVICE PATH INTERFACE SIGNAL HANDLER &rest ARGS) */)
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1782 (nargs, args)
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1783 int nargs;
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1784 register Lisp_Object *args;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1785 {
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1786 Lisp_Object bus, service, path, interface, signal, handler;
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1787 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5, gcpro6;
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1788 Lisp_Object uname, key, key1, value;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1789 DBusConnection *connection;
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1790 int i;
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1791 char rule[DBUS_MAXIMUM_MATCH_RULE_LENGTH];
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1792 char x[DBUS_MAXIMUM_MATCH_RULE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1793 DBusError derror;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1794
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1795 /* Check parameters. */
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1796 bus = args[0];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1797 service = args[1];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1798 path = args[2];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1799 interface = args[3];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1800 signal = args[4];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1801 handler = args[5];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1802
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1803 CHECK_SYMBOL (bus);
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1804 if (!NILP (service)) CHECK_STRING (service);
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1805 if (!NILP (path)) CHECK_STRING (path);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1806 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1807 CHECK_STRING (signal);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1808 if (!FUNCTIONP (handler))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1809 wrong_type_argument (intern ("functionp"), handler);
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1810 GCPRO6 (bus, service, path, interface, signal, handler);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1811
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1812 /* Retrieve unique name of service. If service is a known name, we
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1813 will register for the corresponding unique name, if any. Signals
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1814 are sent always with the unique name as sender. Note: the unique
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1815 name of "org.freedesktop.DBus" is that string itself. */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1816 if ((STRINGP (service))
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1817 && (SBYTES (service) > 0)
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1818 && (strcmp (SDATA (service), DBUS_SERVICE_DBUS) != 0)
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1819 && (strncmp (SDATA (service), ":", 1) != 0))
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1820 {
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1821 uname = call2 (intern ("dbus-get-name-owner"), bus, service);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1822 /* When there is no unique name, we mark it with an empty
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1823 string. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1824 if (NILP (uname))
101276
dd95cb42c0aa * dbusbind.c (Fdbus_register_signal):
Juanma Barranquero <lekktu@gmail.com>
parents: 100951
diff changeset
1825 uname = empty_unibyte_string;
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1826 }
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1827 else
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1828 uname = service;
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1829
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1830 /* Create a matching rule if the unique name exists (when no
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1831 wildcard). */
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
1832 if (NILP (uname) || (SBYTES (uname) > 0))
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1833 {
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1834 /* Open a connection to the bus. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1835 connection = xd_initialize (bus);
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1836
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1837 /* Create a rule to receive related signals. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1838 sprintf (rule,
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1839 "type='signal',interface='%s',member='%s'",
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1840 SDATA (interface),
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1841 SDATA (signal));
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1842
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1843 /* Add unique name and path to the rule if they are non-nil. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1844 if (!NILP (uname))
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1845 {
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1846 sprintf (x, ",sender='%s'", SDATA (uname));
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1847 strcat (rule, x);
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1848 }
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1849
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1850 if (!NILP (path))
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1851 {
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1852 sprintf (x, ",path='%s'", SDATA (path));
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1853 strcat (rule, x);
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1854 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1855
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1856 /* Add arguments to the rule if they are non-nil. */
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1857 for (i = 6; i < nargs; ++i)
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1858 if (!NILP (args[i]))
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1859 {
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1860 CHECK_STRING (args[i]);
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1861 sprintf (x, ",arg%d='%s'", i-6, SDATA (args[i]));
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1862 strcat (rule, x);
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1863 }
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1864
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1865 /* Add the rule to the bus. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1866 dbus_error_init (&derror);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1867 dbus_bus_add_match (connection, rule, &derror);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1868 if (dbus_error_is_set (&derror))
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1869 {
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1870 UNGCPRO;
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1871 XD_ERROR (derror);
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1872 }
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1873
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1874 /* Cleanup. */
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1875 dbus_error_free (&derror);
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1876
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1877 XD_DEBUG_MESSAGE ("Matching rule \"%s\" created", rule);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1878 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1879
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1880 /* Create a hash table entry. */
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1881 key = list3 (bus, interface, signal);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1882 key1 = list4 (uname, service, path, handler);
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1883 value = Fgethash (key, Vdbus_registered_functions_table, Qnil);
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1884
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1885 if (NILP (Fmember (key1, value)))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1886 Fputhash (key, Fcons (key1, value), Vdbus_registered_functions_table);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1887
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1888 /* Return object. */
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1889 RETURN_UNGCPRO (list2 (key, list3 (service, path, handler)));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1890 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1891
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1892 DEFUN ("dbus-register-method", Fdbus_register_method, Sdbus_register_method,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1893 6, 6, 0,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1894 doc: /* Register for method METHOD on the D-Bus BUS.
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1895
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1896 BUS is either the symbol `:system' or the symbol `:session'.
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1897
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1898 SERVICE is the D-Bus service name of the D-Bus object METHOD is
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1899 registered for. It must be a known name.
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1900
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1901 PATH is the D-Bus object path SERVICE is registered. INTERFACE is the
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1902 interface offered by SERVICE. It must provide METHOD. HANDLER is a
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1903 Lisp function to be called when a method call is received. It must
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1904 accept the input arguments of METHOD. The return value of HANDLER is
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1905 used for composing the returning D-Bus message. */)
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1906 (bus, service, path, interface, method, handler)
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1907 Lisp_Object bus, service, path, interface, method, handler;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1908 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1909 Lisp_Object key, key1, value;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1910 DBusConnection *connection;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1911 int result;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1912 DBusError derror;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1913
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1914 /* Check parameters. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1915 CHECK_SYMBOL (bus);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1916 CHECK_STRING (service);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1917 CHECK_STRING (path);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1918 CHECK_STRING (interface);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1919 CHECK_STRING (method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1920 if (!FUNCTIONP (handler))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1921 wrong_type_argument (intern ("functionp"), handler);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1922 /* TODO: We must check for a valid service name, otherwise there is
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1923 a segmentation fault. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1924
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1925 /* Open a connection to the bus. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1926 connection = xd_initialize (bus);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1927
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1928 /* Request the known name from the bus. We can ignore the result,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1929 it is set to -1 if there is an error - kind of redundancy. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1930 dbus_error_init (&derror);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1931 result = dbus_bus_request_name (connection, SDATA (service), 0, &derror);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1932 if (dbus_error_is_set (&derror))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1933 XD_ERROR (derror);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1934
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1935 /* Create a hash table entry. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1936 key = list3 (bus, interface, method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1937 key1 = list4 (Qnil, service, path, handler);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1938 value = Fgethash (key, Vdbus_registered_functions_table, Qnil);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1939
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1940 /* We use nil for the unique name, because the method might be
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1941 called from everybody. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1942 if (NILP (Fmember (key1, value)))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1943 Fputhash (key, Fcons (key1, value), Vdbus_registered_functions_table);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1944
103785
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1945 /* Cleanup. */
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1946 dbus_error_free (&derror);
50effbe728da * dbusbind.c (xd_initialize, Fdbus_call_method, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 103612
diff changeset
1947
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1948 /* Return object. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1949 return list2 (key, list3 (service, path, handler));
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1950 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1951
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1952
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1953 void
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1954 syms_of_dbusbind ()
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1955 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1956
104339
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
1957 Qdbus_init_bus = intern ("dbus-init-bus");
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
1958 staticpro (&Qdbus_init_bus);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
1959 defsubr (&Sdbus_init_bus);
dfa6f847adcd * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New
Michael Albinus <michael.albinus@gmx.de>
parents: 104313
diff changeset
1960
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1961 Qdbus_get_unique_name = intern ("dbus-get-unique-name");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1962 staticpro (&Qdbus_get_unique_name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1963 defsubr (&Sdbus_get_unique_name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1964
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1965 Qdbus_call_method = intern ("dbus-call-method");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1966 staticpro (&Qdbus_call_method);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1967 defsubr (&Sdbus_call_method);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1968
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1969 Qdbus_call_method_asynchronously = intern ("dbus-call-method-asynchronously");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1970 staticpro (&Qdbus_call_method_asynchronously);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1971 defsubr (&Sdbus_call_method_asynchronously);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1972
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1973 Qdbus_method_return_internal = intern ("dbus-method-return-internal");
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1974 staticpro (&Qdbus_method_return_internal);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1975 defsubr (&Sdbus_method_return_internal);
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1976
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1977 Qdbus_method_error_internal = intern ("dbus-method-error-internal");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1978 staticpro (&Qdbus_method_error_internal);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1979 defsubr (&Sdbus_method_error_internal);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1980
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1981 Qdbus_send_signal = intern ("dbus-send-signal");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1982 staticpro (&Qdbus_send_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1983 defsubr (&Sdbus_send_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1984
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1985 Qdbus_register_signal = intern ("dbus-register-signal");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1986 staticpro (&Qdbus_register_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1987 defsubr (&Sdbus_register_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1988
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1989 Qdbus_register_method = intern ("dbus-register-method");
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1990 staticpro (&Qdbus_register_method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1991 defsubr (&Sdbus_register_method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1992
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1993 Qdbus_error = intern ("dbus-error");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1994 staticpro (&Qdbus_error);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1995 Fput (Qdbus_error, Qerror_conditions,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1996 list2 (Qdbus_error, Qerror));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1997 Fput (Qdbus_error, Qerror_message,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1998 build_string ("D-Bus error"));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1999
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2000 QCdbus_system_bus = intern (":system");
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2001 staticpro (&QCdbus_system_bus);
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2002
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2003 QCdbus_session_bus = intern (":session");
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2004 staticpro (&QCdbus_session_bus);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2005
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
2006 QCdbus_timeout = intern (":timeout");
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
2007 staticpro (&QCdbus_timeout);
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
2008
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2009 QCdbus_type_byte = intern (":byte");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2010 staticpro (&QCdbus_type_byte);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2011
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2012 QCdbus_type_boolean = intern (":boolean");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2013 staticpro (&QCdbus_type_boolean);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2014
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2015 QCdbus_type_int16 = intern (":int16");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2016 staticpro (&QCdbus_type_int16);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2017
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2018 QCdbus_type_uint16 = intern (":uint16");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2019 staticpro (&QCdbus_type_uint16);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2020
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2021 QCdbus_type_int32 = intern (":int32");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2022 staticpro (&QCdbus_type_int32);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2023
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2024 QCdbus_type_uint32 = intern (":uint32");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2025 staticpro (&QCdbus_type_uint32);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2026
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2027 QCdbus_type_int64 = intern (":int64");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2028 staticpro (&QCdbus_type_int64);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2029
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2030 QCdbus_type_uint64 = intern (":uint64");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2031 staticpro (&QCdbus_type_uint64);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2032
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2033 QCdbus_type_double = intern (":double");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2034 staticpro (&QCdbus_type_double);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2035
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2036 QCdbus_type_string = intern (":string");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2037 staticpro (&QCdbus_type_string);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2038
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2039 QCdbus_type_object_path = intern (":object-path");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2040 staticpro (&QCdbus_type_object_path);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2041
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2042 QCdbus_type_signature = intern (":signature");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2043 staticpro (&QCdbus_type_signature);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2044
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2045 QCdbus_type_array = intern (":array");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2046 staticpro (&QCdbus_type_array);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2047
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2048 QCdbus_type_variant = intern (":variant");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2049 staticpro (&QCdbus_type_variant);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2050
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2051 QCdbus_type_struct = intern (":struct");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2052 staticpro (&QCdbus_type_struct);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2053
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2054 QCdbus_type_dict_entry = intern (":dict-entry");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2055 staticpro (&QCdbus_type_dict_entry);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
2056
87539
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
2057 DEFVAR_LISP ("dbus-registered-functions-table",
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
2058 &Vdbus_registered_functions_table,
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2059 doc: /* Hash table of registered functions for D-Bus.
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2060 There are two different uses of the hash table: for calling registered
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2061 functions, targeted by signals or method calls, and for calling
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2062 handlers in case of non-blocking method call returns.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2063
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2064 In the first case, the key in the hash table is the list (BUS
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2065 INTERFACE MEMBER). BUS is either the symbol `:system' or the symbol
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2066 `:session'. INTERFACE is a string which denotes a D-Bus interface,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2067 and MEMBER, also a string, is either a method or a signal INTERFACE is
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2068 offering. All arguments but BUS must not be nil.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2069
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
2070 The value in the hash table is a list of quadruple lists
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
2071 \((UNAME SERVICE PATH HANDLER) (UNAME SERVICE PATH HANDLER) ...).
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
2072 SERVICE is the service name as registered, UNAME is the corresponding
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
2073 unique name. PATH is the object path of the sending object. All of
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
2074 them can be nil, which means a wildcard then. HANDLER is the function
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
2075 to be called when a D-Bus message, which matches the key criteria,
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2076 arrives.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2077
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2078 In the second case, the key in the hash table is the list (BUS SERIAL).
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2079 BUS is either the symbol `:system' or the symbol `:session'. SERIAL
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2080 is the serial number of the non-blocking method call, a reply is
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2081 expected. Both arguments must not be nil. The value in the hash
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2082 table is HANDLER, the function to be called when the D-Bus reply
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
2083 message arrives. */);
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2084 /* We initialize Vdbus_registered_functions_table in dbus.el,
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2085 because we need to define a hash table function first. */
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2086 Vdbus_registered_functions_table = Qnil;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2087
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2088 DEFVAR_LISP ("dbus-debug", &Vdbus_debug,
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
2089 doc: /* If non-nil, debug messages of D-Bus bindings are raised. */);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2090 #ifdef DBUS_DEBUG
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2091 Vdbus_debug = Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2092 #else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2093 Vdbus_debug = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2094 #endif
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2095
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2096 Fprovide (intern ("dbusbind"), Qnil);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2097
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2098 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2099
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
2100 #endif /* HAVE_DBUS */
87053
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
2101
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
2102 /* arch-tag: 0e828477-b571-4fe4-b559-5c9211bc14b8
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
2103 (do not change this comment) */