annotate src/dbusbind.c @ 98902:eec595ae4d70

* frames.texi: Use @key throughout for mouse clicks. (Creating Frames): Add xref to Init File. (Frame Commands): Add xref to Exiting. (Scroll Bars): Document GTK vs toolkit behavior.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 19 Oct 2008 19:52:05 +0000
parents f98d4eaeba07
children 35372c2ca5c9
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.
87533
d24ee3180427 * dbusbind.c (xd_append_arg): Use unsigned char instead of
Magnus Henoch <mange@freemail.hu>
parents: 87501
diff changeset
2 Copyright (C) 2007, 2008 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. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
32 Lisp_Object Qdbus_get_unique_name;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
33 Lisp_Object Qdbus_call_method;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
34 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
35 Lisp_Object Qdbus_method_return_internal;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
36 Lisp_Object Qdbus_method_error_internal;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
37 Lisp_Object Qdbus_send_signal;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
38 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
39 Lisp_Object Qdbus_register_method;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
40
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
41 /* D-Bus error symbol. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
42 Lisp_Object Qdbus_error;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
43
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
44 /* 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
45 Lisp_Object QCdbus_system_bus, QCdbus_session_bus;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
46
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
47 /* 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
48 Lisp_Object QCdbus_timeout;
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
49
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
50 /* 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
51 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
52 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
53 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
54 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
55 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
56 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
57 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
58 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
59
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
60 /* 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
61 Lisp_Object Vdbus_registered_functions_table;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
62
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
63 /* Whether to debug D-Bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
64 Lisp_Object Vdbus_debug;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
65
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
66
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
67 /* 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
68 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
69
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
70 /* 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
71 #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
72 do { \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
73 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
74 strncpy (s, error.message, 1023); \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
75 dbus_error_free (&error); \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
76 /* Remove the trailing newline. */ \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
77 if (strchr (s, '\n') != NULL) \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
78 s[strlen (s) - 1] = '\0'; \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
79 xsignal1 (Qdbus_error, build_string (s)); \
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
80 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
81
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
82 /* 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
83 "make MYCPPFLAGS='-DDBUS_DEBUG -Wall'". */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
84 #ifdef DBUS_DEBUG
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
85 #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
86 do { \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
87 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
88 snprintf (s, 1023, __VA_ARGS__); \
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
89 printf ("%s: %s\n", __func__, s); \
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
90 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
91 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
92 #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
93 do { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
94 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
95 { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
96 XD_DEBUG_MESSAGE ("%d Assertion failure", __LINE__); \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
97 xsignal1 (Qdbus_error, build_string ("Assertion failure")); \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
98 } \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
99 } while (0)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
100
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
101 #else /* !DBUS_DEBUG */
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
102 #define XD_DEBUG_MESSAGE(...) \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
103 do { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
104 if (!NILP (Vdbus_debug)) \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
105 { \
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
106 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
107 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
108 message ("%s: %s", __func__, s); \
87493
42bd83957313 *** empty log message ***
Michael Albinus <michael.albinus@gmx.de>
parents: 87490
diff changeset
109 } \
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 #define XD_DEBUG_VALID_LISP_OBJECT_P(object)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
112 #endif
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
113
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
114 /* 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
115 #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
116 ((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
117 || (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
118 || (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
119 || (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
120 || (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
121 || (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
122 || (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
123 || (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
124 || (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
125 || (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
126 || (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
127 || (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
128
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
129 /* 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
130 of the predefined D-Bus type symbols. */
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
131 #define XD_SYMBOL_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
132 ((EQ (object, QCdbus_type_byte)) ? 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
133 : (EQ (object, QCdbus_type_boolean)) ? 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
134 : (EQ (object, QCdbus_type_int16)) ? 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
135 : (EQ (object, QCdbus_type_uint16)) ? 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
136 : (EQ (object, QCdbus_type_int32)) ? 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
137 : (EQ (object, QCdbus_type_uint32)) ? 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
138 : (EQ (object, QCdbus_type_int64)) ? 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
139 : (EQ (object, QCdbus_type_uint64)) ? 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
140 : (EQ (object, QCdbus_type_double)) ? 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
141 : (EQ (object, QCdbus_type_string)) ? 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
142 : (EQ (object, QCdbus_type_object_path)) ? 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
143 : (EQ (object, QCdbus_type_signature)) ? 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
144 : (EQ (object, QCdbus_type_array)) ? 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
145 : (EQ (object, QCdbus_type_variant)) ? DBUS_TYPE_VARIANT \
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 : (EQ (object, QCdbus_type_struct)) ? DBUS_TYPE_STRUCT \
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 : (EQ (object, QCdbus_type_dict_entry)) ? DBUS_TYPE_DICT_ENTRY \
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 : 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
149
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 /* 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
151 #define XD_DBUS_TYPE_P(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
152 (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
153
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
154 /* 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
155 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
156 `dbus-send-signal', into corresponding C values appended as
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
157 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
158 #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
159 ((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
160 : (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
161 : (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
162 : (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
163 : (STRINGP (object)) ? 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
164 : (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
165 : (CONSP (object)) \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
166 ? ((XD_DBUS_TYPE_P (CAR_SAFE (object))) \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
167 ? ((XD_BASIC_DBUS_TYPE (XD_SYMBOL_TO_DBUS_TYPE (CAR_SAFE (object)))) \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
168 ? DBUS_TYPE_ARRAY \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
169 : XD_SYMBOL_TO_DBUS_TYPE (CAR_SAFE (object))) \
f98d4eaeba07 * dbusbind.c (XD_OBJECT_TO_DBUS_TYPE): Handle simple type symbols
Michael Albinus <michael.albinus@gmx.de>
parents: 98783
diff changeset
170 : 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
171 : 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
172
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
173 /* 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
174 #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
175 ((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
176
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
177 /* 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
178 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
179 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
180 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
181 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
182 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
183 check that DBUS_TYPE_DICT_ENTRY occurs only as array 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
184 void
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
185 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
186 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
187 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
188 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
189 {
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
190 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
191 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
192 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
193
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
194 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
195
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 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
197 {
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 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
199 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
200 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
201 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
202 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
203 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
204 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
205
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
206 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
207 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
208 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
209 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
210 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
211
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
212 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
213 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
214 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
215 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
216 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
217 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
218
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 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
220 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
221 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
222 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
223
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 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
225 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
226 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
227 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
228 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
229 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
230
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 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
232 /* 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
233 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
234 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
235 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
236
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
237 /* 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
238 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
239 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
240
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
241 /* 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
242 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
243 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
244 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
245 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
246 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
247 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
248 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
249 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
250 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
251 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
252 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
253
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
254 /* 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
255 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
256 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
257 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
258 && 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
259 && 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
260 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
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 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
263 {
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
264 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
265 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
266 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
267 }
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 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
270 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
271
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 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
273 /* 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
274 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
275
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
276 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
277 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
278 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
279
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
280 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
281 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
282 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
283
87497
1d88fa50b198 * dbusbind.c (xd_signature): Signature of variant is just "v".
Magnus Henoch <mange@freemail.hu>
parents: 87493
diff changeset
284 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
285 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
286
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
287 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
288 /* 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
289 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
290 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
291
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
292 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
293
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
294 /* 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
295 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
296 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
297 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
298 {
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
299 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
300 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
301 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
302 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
303 }
98434
e5f33aa05b97 * dbusbind.c (xd_signature): Use strcat instead of sprintf.
Michael Albinus <michael.albinus@gmx.de>
parents: 97797
diff changeset
304 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
305 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
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 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
308 /* 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
309 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
310 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
311 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
312
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
313 /* 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
314 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
315 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
316
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 /* 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
318 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
319 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
320
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 /* 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
322 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
323 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
324 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
325 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
326
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
327 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
328 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
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 /* 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
331 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
332 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
333 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
334 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
335
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
336 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
337 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
338 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
339
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
340 /* Closing signature. */
98434
e5f33aa05b97 * dbusbind.c (xd_signature): Use strcat instead of sprintf.
Michael Albinus <michael.albinus@gmx.de>
parents: 97797
diff changeset
341 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
342 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
343
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 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
345 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
346 }
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
347
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
348 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
349 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
350
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
351 /* 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
352 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
353 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
354 `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
355 arguments to a D-Bus message. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
356 void
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
357 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
358 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
359 Lisp_Object object;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
360 DBusMessageIter *iter;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
361 {
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
362 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
363 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
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 (dtype))
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
366 switch (dtype)
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
367 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
368 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
369 {
87533
d24ee3180427 * dbusbind.c (xd_append_arg): Use unsigned char instead of
Magnus Henoch <mange@freemail.hu>
parents: 87501
diff changeset
370 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
371 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
372 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
373 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
374 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
375 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
376 }
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
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
378 case DBUS_TYPE_BOOLEAN:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
379 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
380 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
381 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
382 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
383 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
384 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
385 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
386 }
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
387
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
388 case DBUS_TYPE_INT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
389 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
390 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
391 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
392 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
393 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
394 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
395 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
396 }
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
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
398 case DBUS_TYPE_UINT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
399 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
400 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
401 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
402 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
403 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
404 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
405 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
406 }
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
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
408 case DBUS_TYPE_INT32:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
409 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
410 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
411 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
412 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
413 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
414 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
415 return;
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
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
418 case DBUS_TYPE_UINT32:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
419 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
420 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
421 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
422 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
423 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
424 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
425 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
426 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
427
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
428 case DBUS_TYPE_INT64:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
429 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
430 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
431 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
432 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
433 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
434 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
435 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
436 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
437
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
438 case DBUS_TYPE_UINT64:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
439 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
440 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
441 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
442 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
443 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
444 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
445 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
446 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
447
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
448 case DBUS_TYPE_DOUBLE:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
449 XD_DEBUG_MESSAGE ("%c %f", dtype, XFLOAT_DATA (object));
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
450 if (!dbus_message_iter_append_basic (iter, dtype,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
451 &XFLOAT_DATA (object)))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
452 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
453 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
454 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
455
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
456 case DBUS_TYPE_STRING:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
457 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
458 case DBUS_TYPE_SIGNATURE:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
459 {
97797
14fccbb34a16 * dbusbind.c (XD_ERROR, XD_DEBUG_MESSAGE): Use strncpy and
Michael Albinus <michael.albinus@gmx.de>
parents: 97211
diff changeset
460 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
461 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
462 if (!dbus_message_iter_append_basic (iter, dtype, &val))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
463 xsignal2 (Qdbus_error,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
464 build_string ("Unable to append argument"), object);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
465 return;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
466 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
467 }
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
468
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
469 else /* Compound types. */
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
470 {
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
471
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
472 /* 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
473 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
474 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
475 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
476
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
477 /* Open new subiteration. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
478 switch (dtype)
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
479 {
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
480 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
481 /* 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
482 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
483 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
484
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
485 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
486 /* 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
487 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
488 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
489
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
490 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
491 /* 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
492 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
493 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
494 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
495 == 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
496 && 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
497 && 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
498 {
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
499 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
500 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
501 }
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
502
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
503 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
504 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
505 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
506 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
507
6a710fa21688 * dbusbind.c (all): Replace XCAR by CAR_SAFE and XCDR by CDR_SAFE.
Michael Albinus <michael.albinus@gmx.de>
parents: 87535
diff changeset
508 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
509 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
510 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
511 signature, &subiter))
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 xsignal3 (Qdbus_error,
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 build_string ("Cannot open container"),
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 make_number (dtype), build_string (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
515 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
516
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
517 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
518 /* 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
519 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
520 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
521
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
522 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
523 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
524 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
525 signature, &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
526 xsignal3 (Qdbus_error,
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
527 build_string ("Cannot open container"),
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
528 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
529 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
530
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
531 case DBUS_TYPE_STRUCT:
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
532 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
533 /* 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
534 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
535 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
536 if (!dbus_message_iter_open_container (iter, dtype, NULL, &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
537 xsignal2 (Qdbus_error,
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
538 build_string ("Cannot open container"),
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
539 make_number (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
540 break;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
541 }
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
542
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
543 /* Loop over list elements. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
544 while (!NILP (object))
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
545 {
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
546 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
547 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
548
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
549 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
550
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
551 object = CDR_SAFE (object);
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
552 }
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
553
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
554 /* 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
555 if (!dbus_message_iter_close_container (iter, &subiter))
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
556 xsignal2 (Qdbus_error,
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
557 build_string ("Cannot close container"),
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 make_number (dtype));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
559 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
560 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
561
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
562 /* 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
563 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
564 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
565 result always in a Lisp list. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
566 Lisp_Object
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
567 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
568 unsigned int dtype;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
569 DBusMessageIter *iter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
570 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
571
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
572 switch (dtype)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
573 {
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
574 case DBUS_TYPE_BYTE:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
575 {
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
576 unsigned int val;
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
577 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
578 val = val & 0xFF;
87363
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
579 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
580 return make_number (val);
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
581 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
582
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
583 case DBUS_TYPE_BOOLEAN:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
584 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
585 dbus_bool_t val;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
586 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
587 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
588 return (val == FALSE) ? Qnil : Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
589 }
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
590
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
591 case DBUS_TYPE_INT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
592 case DBUS_TYPE_UINT16:
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
593 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
594 dbus_uint16_t val;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
595 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
596 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
597 return make_number (val);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
598 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
599
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
600 case DBUS_TYPE_INT32:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
601 case DBUS_TYPE_UINT32:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
602 {
87972
f42bf2712087 * dbusbind.c (xd_retrieve_arg): Pacify GCC on x86_64 GNU/Linux.
Michael Albinus <michael.albinus@gmx.de>
parents: 87887
diff changeset
603 /* 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
604 range of data type. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
605 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
606 EMACS_INT val1;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
607 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
608 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
609 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
610 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
611 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
612
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
613 case DBUS_TYPE_INT64:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
614 case DBUS_TYPE_UINT64:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
615 {
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
616 dbus_uint64_t val;
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
617 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
618 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
619 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
620 }
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
621
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
622 case DBUS_TYPE_DOUBLE:
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
623 {
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
624 double val;
28bc3dd3635f * dbusbind.c (xd_retrieve_arg): Handle DBUS_TYPE_BYTE,
Michael Albinus <michael.albinus@gmx.de>
parents: 87361
diff changeset
625 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
626 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
627 return make_float (val);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
628 }
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
629
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
630 case DBUS_TYPE_STRING:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
631 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
632 case DBUS_TYPE_SIGNATURE:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
633 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
634 char *val;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
635 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
636 XD_DEBUG_MESSAGE ("%c %s", dtype, val);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
637 return build_string (val);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
638 }
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
639
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
640 case DBUS_TYPE_ARRAY:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
641 case DBUS_TYPE_VARIANT:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
642 case DBUS_TYPE_STRUCT:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
643 case DBUS_TYPE_DICT_ENTRY:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
644 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
645 Lisp_Object result;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
646 struct gcpro gcpro1;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
647 result = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
648 GCPRO1 (result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
649 DBusMessageIter subiter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
650 int subtype;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
651 dbus_message_iter_recurse (iter, &subiter);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
652 while ((subtype = dbus_message_iter_get_arg_type (&subiter))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
653 != DBUS_TYPE_INVALID)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
654 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
655 result = Fcons (xd_retrieve_arg (subtype, &subiter), result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
656 dbus_message_iter_next (&subiter);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
657 }
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
658 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
659 RETURN_UNGCPRO (Fnreverse (result));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
660 }
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
661
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
662 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
663 XD_DEBUG_MESSAGE ("DBusType '%c' not supported", dtype);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
664 return Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
665 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
666 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
667
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
668 /* 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
669 or :session. It tells which D-Bus to be initialized. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
670 DBusConnection *
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
671 xd_initialize (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
672 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
673 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
674 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
675 DBusError derror;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
676
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
677 /* Parameter check. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
678 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
679 if (!((EQ (bus, QCdbus_system_bus)) || (EQ (bus, QCdbus_session_bus))))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
680 xsignal2 (Qdbus_error, build_string ("Wrong bus name"), bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
681
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
682 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
683 dbus_error_init (&derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
684
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
685 if (EQ (bus, QCdbus_system_bus))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
686 connection = dbus_bus_get (DBUS_BUS_SYSTEM, &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
687 else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
688 connection = dbus_bus_get (DBUS_BUS_SESSION, &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
689
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
690 if (dbus_error_is_set (&derror))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
691 XD_ERROR (derror);
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 if (connection == NULL)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
694 xsignal2 (Qdbus_error, build_string ("No connection"), bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
695
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
696 /* Return the result. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
697 return connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
698 }
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 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
701 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
702 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
703 (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
704 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
705 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
706 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
707 const char *name;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
708
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
709 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
710 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
711
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
712 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
713 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
714
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
715 /* 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
716 name = dbus_bus_get_unique_name (connection);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
717 if (name == NULL)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
718 xsignal1 (Qdbus_error, build_string ("No unique name available"));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
719
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
720 /* Return. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
721 return build_string (name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
722 }
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 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
725 doc: /* Call METHOD on the D-Bus BUS.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
726
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
727 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
728
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
729 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
730 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
731 offered by SERVICE. It must provide METHOD.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
732
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
733 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
734 specifies the maximun number of milliseconds the method call must
94057
a5a4ff3b6cc3 * dbusbind.c (dbus-get-unique-name): Remove extra copying of name string.
Michael Albinus <michael.albinus@gmx.de>
parents: 93420
diff changeset
735 return. The default value is 25.000. If the method call doesn't
a5a4ff3b6cc3 * dbusbind.c (dbus-get-unique-name): Remove extra copying of name string.
Michael Albinus <michael.albinus@gmx.de>
parents: 93420
diff changeset
736 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
737
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
738 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
739 converted into D-Bus types via the following rules:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
740
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
741 t and nil => DBUS_TYPE_BOOLEAN
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
742 number => DBUS_TYPE_UINT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
743 integer => DBUS_TYPE_INT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
744 float => DBUS_TYPE_DOUBLE
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
745 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
746 list => DBUS_TYPE_ARRAY
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
747
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
748 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
749 type symbols, see Info node `(dbus)Type Conversion'.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
750
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
751 `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
752 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
753 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
754
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
755 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
756 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
757 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
758 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
759 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
760 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
761 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
762 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
763 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
764 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
765 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
766 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
767 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
768 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
769 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
770 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
771
0b387233ea86 * dbusbind.c (XD_BASIC_DBUS_TYPE, XD_DBUS_TYPE_P, XD_NEXT_VALUE):
Michael Albinus <michael.albinus@gmx.de>
parents: 87343
diff changeset
772 Example:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
773
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
774 \(dbus-call-method
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
775 :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
776 "org.gnome.seahorse.Keys" "GetKeyField"
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
777 "openpgp:657984B8C7A966DD" "simple-name")
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
778
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
779 => (t ("Philip R. Zimmermann"))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
780
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
781 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
782 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
783
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
784 \(dbus-call-method
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
785 :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
786 "org.freedesktop.Hal.Device" "GetPropertyString"
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
787 "system.kernel.machine")
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
788
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
789 => "i686"
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
790
98783
9ae4dbce33ae * dbusbind.c (Fdbus_call_method): Unbreak usage line.
Magnus Henoch <mange@freemail.hu>
parents: 98434
diff changeset
791 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
792 (nargs, args)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
793 int nargs;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
794 register Lisp_Object *args;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
795 {
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
796 Lisp_Object bus, service, path, interface, method;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
797 Lisp_Object result;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
798 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
799 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
800 DBusMessage *dmessage;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
801 DBusMessage *reply;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
802 DBusMessageIter iter;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
803 DBusError derror;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
804 unsigned int dtype;
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
805 int timeout = -1;
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
806 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
807 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
808
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
809 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
810 bus = args[0];
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
811 service = args[1];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
812 path = args[2];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
813 interface = args[3];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
814 method = args[4];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
815
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
816 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
817 CHECK_STRING (service);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
818 CHECK_STRING (path);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
819 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
820 CHECK_STRING (method);
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
821 GCPRO5 (bus, service, path, interface, method);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
822
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
823 XD_DEBUG_MESSAGE ("%s %s %s %s",
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
824 SDATA (service),
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
825 SDATA (path),
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
826 SDATA (interface),
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
827 SDATA (method));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
828
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
829 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
830 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
831
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
832 /* 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
833 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
834 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
835 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
836 SDATA (method));
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
837 UNGCPRO;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
838 if (dmessage == NULL)
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
839 xsignal1 (Qdbus_error, build_string ("Unable to create a new message"));
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
840
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
841 /* Check for timeout parameter. */
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
842 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
843 {
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
844 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
845 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
846 i = i+2;
86940
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
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
849 /* Initialize parameter list of message. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
850 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
851
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
852 /* 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
853 for (; i < nargs; ++i)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
854 {
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
855 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
856 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
857 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
858 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
859 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
860 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
861 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
862 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
863 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
864 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
865 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
866 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
867 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
868 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
869 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
870 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
871
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
872 /* 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
873 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
874 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
875
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
876 xd_append_arg (dtype, args[i], &iter);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
877 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
878
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
879 /* Send the message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
880 dbus_error_init (&derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
881 reply = dbus_connection_send_with_reply_and_block (connection,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
882 dmessage,
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
883 timeout,
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
884 &derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
885
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
886 if (dbus_error_is_set (&derror))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
887 XD_ERROR (derror);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
888
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
889 if (reply == NULL)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
890 xsignal1 (Qdbus_error, build_string ("No reply"));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
891
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
892 XD_DEBUG_MESSAGE ("Message sent");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
893
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
894 /* Collect the results. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
895 result = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
896 GCPRO1 (result);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
897
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
898 if (dbus_message_iter_init (reply, &iter))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
899 {
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
900 /* 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
901 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
902 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
903 != 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
904 {
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
905 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
906 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
907 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
908 }
87535
6dcf49457032 * dbusbind.c (Fdbus_call_method): Handle the case of no returned
Magnus Henoch <mange@freemail.hu>
parents: 87533
diff changeset
909 else
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
910 {
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
911 /* No arguments: just return nil. */
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
912 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
913
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
914 /* Cleanup. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
915 dbus_message_unref (dmessage);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
916 dbus_message_unref (reply);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
917
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
918 /* 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
919 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
920 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
921 RETURN_UNGCPRO (CAR_SAFE (result));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
922 else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
923 RETURN_UNGCPRO (Fnreverse (result));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
924 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
925
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
926 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
927 Sdbus_call_method_asynchronously, 6, MANY, 0,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
928 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
929
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
930 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
931
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
932 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
933 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
934 offered by SERVICE. It must provide METHOD.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
935
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
936 HANDLER is a Lisp function, which is called when the corresponding
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
937 return message has arrived.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
938
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
939 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
940 specifies the maximun number of milliseconds the method call must
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
941 return. The default value is 25.000. If the method call doesn't
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
942 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
943
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
944 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
945 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
946
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
947 t and nil => DBUS_TYPE_BOOLEAN
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
948 number => DBUS_TYPE_UINT32
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
949 integer => DBUS_TYPE_INT32
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
950 float => DBUS_TYPE_DOUBLE
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
951 string => DBUS_TYPE_STRING
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
952 list => DBUS_TYPE_ARRAY
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
953
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
954 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
955 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
956
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
957 The function returns a key into the hash table
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
958 `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
959 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
960 HANDLER is called.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
961
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
962 Example:
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
963
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
964 \(dbus-call-method-asynchronously
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
965 :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
966 "org.freedesktop.Hal.Device" "GetPropertyString" 'message
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
967 "system.kernel.machine")
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
968
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
969 => (:system 2)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
970
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
971 -| i686
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
972
98783
9ae4dbce33ae * dbusbind.c (Fdbus_call_method): Unbreak usage line.
Magnus Henoch <mange@freemail.hu>
parents: 98434
diff changeset
973 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
974 (nargs, args)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
975 int nargs;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
976 register Lisp_Object *args;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
977 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
978 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
979 Lisp_Object result;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
980 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
981 DBusConnection *connection;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
982 DBusMessage *dmessage;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
983 DBusMessageIter iter;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
984 unsigned int dtype;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
985 int timeout = -1;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
986 int i = 6;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
987 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
988
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
989 /* Check parameters. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
990 bus = args[0];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
991 service = args[1];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
992 path = args[2];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
993 interface = args[3];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
994 method = args[4];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
995 handler = args[5];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
996
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
997 CHECK_SYMBOL (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
998 CHECK_STRING (service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
999 CHECK_STRING (path);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1000 CHECK_STRING (interface);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1001 CHECK_STRING (method);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1002 if (!FUNCTIONP (handler))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1003 wrong_type_argument (intern ("functionp"), handler);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1004 GCPRO6 (bus, service, path, interface, method, handler);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1005
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1006 XD_DEBUG_MESSAGE ("%s %s %s %s",
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1007 SDATA (service),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1008 SDATA (path),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1009 SDATA (interface),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1010 SDATA (method));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1011
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1012 /* Open a connection to the bus. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1013 connection = xd_initialize (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1014
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1015 /* Create the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1016 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
1017 SDATA (path),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1018 SDATA (interface),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1019 SDATA (method));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1020 if (dmessage == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1021 xsignal1 (Qdbus_error, build_string ("Unable to create a new message"));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1022
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1023 /* Check for timeout parameter. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1024 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
1025 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1026 CHECK_NATNUM (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1027 timeout = XUINT (args[i+1]);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1028 i = i+2;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1029 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1030
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1031 /* Initialize parameter list of message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1032 dbus_message_iter_init_append (dmessage, &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1033
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1034 /* Append parameters to the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1035 for (; i < nargs; ++i)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1036 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1037 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
1038 if (XD_DBUS_TYPE_P (args[i]))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1039 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1040 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
1041 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
1042 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
1043 SDATA (format2 ("%s", args[i], Qnil)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1044 SDATA (format2 ("%s", args[i+1], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1045 ++i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1046 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1047 else
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1048 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1049 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
1050 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
1051 SDATA (format2 ("%s", args[i], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1052 }
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 /* 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
1055 indication that there is no parent type. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1056 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
1057
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1058 xd_append_arg (dtype, args[i], &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1059 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1060
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1061 /* 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
1062 message queue. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1063 if (!dbus_connection_send_with_reply (connection, dmessage, NULL, timeout))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1064 xsignal1 (Qdbus_error, build_string ("Cannot send message"));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1065
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1066 XD_DEBUG_MESSAGE ("Message sent");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1067
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1068 /* The result is the key in Vdbus_registered_functions_table. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1069 result = (list2 (bus, make_number (dbus_message_get_serial (dmessage))));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1070
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1071 /* Create a hash table entry. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1072 Fputhash (result, handler, Vdbus_registered_functions_table);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1073
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1074 /* Cleanup. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1075 dbus_message_unref (dmessage);
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 /* Return the result. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1078 RETURN_UNGCPRO (result);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1079 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1080
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1081 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
1082 Sdbus_method_return_internal,
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1083 3, MANY, 0,
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1084 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
1085 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
1086
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1087 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
1088 (nargs, args)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1089 int nargs;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1090 register Lisp_Object *args;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1091 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1092 Lisp_Object bus, serial, service;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1093 struct gcpro gcpro1, gcpro2, gcpro3;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1094 DBusConnection *connection;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1095 DBusMessage *dmessage;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1096 DBusMessageIter iter;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1097 unsigned int dtype;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1098 int i;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1099 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1100
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1101 /* Check parameters. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1102 bus = args[0];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1103 serial = args[1];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1104 service = args[2];
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1105
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1106 CHECK_SYMBOL (bus);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1107 CHECK_NUMBER (serial);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1108 CHECK_STRING (service);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1109 GCPRO3 (bus, serial, service);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1110
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1111 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
1112
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1113 /* Open a connection to the bus. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1114 connection = xd_initialize (bus);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1115
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1116 /* Create the message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1117 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
1118 if ((dmessage == NULL)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1119 || (!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
1120 || (!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
1121 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1122 UNGCPRO;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1123 xsignal1 (Qdbus_error,
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1124 build_string ("Unable to create a return message"));
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1125 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1126
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1127 UNGCPRO;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1128
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1129 /* Initialize parameter list of message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1130 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
1131
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1132 /* Append parameters to the message. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1133 for (i = 3; i < nargs; ++i)
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1134 {
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1135 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
1136 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
1137 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1138 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
1139 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
1140 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
1141 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
1142 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
1143 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1144 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1145 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1146 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1147 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
1148 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
1149 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
1150 }
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1151
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1152 /* 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
1153 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
1154 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
1155
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1156 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
1157 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1158
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1159 /* 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
1160 message queue. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1161 if (!dbus_connection_send (connection, dmessage, NULL))
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1162 xsignal1 (Qdbus_error, build_string ("Cannot send message"));
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1163
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1164 /* 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
1165 dbus_connection_flush (connection);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1166
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1167 XD_DEBUG_MESSAGE ("Message sent");
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1168
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1169 /* Cleanup. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1170 dbus_message_unref (dmessage);
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1171
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1172 /* Return. */
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1173 return Qt;
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1174 }
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1175
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1176 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
1177 Sdbus_method_error_internal,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1178 3, MANY, 0,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1179 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
1180 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
1181
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1182 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
1183 (nargs, args)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1184 int nargs;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1185 register Lisp_Object *args;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1186 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1187 Lisp_Object bus, serial, service;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1188 struct gcpro gcpro1, gcpro2, gcpro3;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1189 DBusConnection *connection;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1190 DBusMessage *dmessage;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1191 DBusMessageIter iter;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1192 unsigned int dtype;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1193 int i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1194 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1195
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1196 /* Check parameters. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1197 bus = args[0];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1198 serial = args[1];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1199 service = args[2];
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1200
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1201 CHECK_SYMBOL (bus);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1202 CHECK_NUMBER (serial);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1203 CHECK_STRING (service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1204 GCPRO3 (bus, serial, service);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1205
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1206 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
1207
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1208 /* Open a connection to the bus. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1209 connection = xd_initialize (bus);
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 /* Create the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1212 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
1213 if ((dmessage == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1214 || (!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
1215 || (!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
1216 || (!dbus_message_set_destination (dmessage, SDATA (service))))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1217 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1218 UNGCPRO;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1219 xsignal1 (Qdbus_error,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1220 build_string ("Unable to create a error message"));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1221 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1222
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1223 UNGCPRO;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1224
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1225 /* Initialize parameter list of message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1226 dbus_message_iter_init_append (dmessage, &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1227
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1228 /* Append parameters to the message. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1229 for (i = 3; i < nargs; ++i)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1230 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1231 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
1232 if (XD_DBUS_TYPE_P (args[i]))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1233 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1234 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
1235 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
1236 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
1237 SDATA (format2 ("%s", args[i], Qnil)),
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1238 SDATA (format2 ("%s", args[i+1], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1239 ++i;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1240 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1241 else
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1242 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1243 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
1244 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
1245 SDATA (format2 ("%s", args[i], Qnil)));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1246 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1247
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1248 /* 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
1249 indication that there is no parent type. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1250 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
1251
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1252 xd_append_arg (dtype, args[i], &iter);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1253 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1254
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1255 /* 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
1256 message queue. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1257 if (!dbus_connection_send (connection, dmessage, NULL))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1258 xsignal1 (Qdbus_error, build_string ("Cannot send message"));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1259
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1260 /* 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
1261 dbus_connection_flush (connection);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1262
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1263 XD_DEBUG_MESSAGE ("Message sent");
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1264
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1265 /* Cleanup. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1266 dbus_message_unref (dmessage);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1267
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1268 /* Return. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1269 return Qt;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1270 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1271
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1272 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
1273 doc: /* Send signal SIGNAL on the D-Bus BUS.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1274
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1275 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
1276
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1277 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
1278 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
1279 offered by SERVICE. It must provide signal SIGNAL.
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1280
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1281 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
1282 converted into D-Bus types via the following rules:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1283
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1284 t and nil => DBUS_TYPE_BOOLEAN
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1285 number => DBUS_TYPE_UINT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1286 integer => DBUS_TYPE_INT32
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1287 float => DBUS_TYPE_DOUBLE
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1288 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
1289 list => DBUS_TYPE_ARRAY
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1290
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
1291 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
1292 type symbols, see Info node `(dbus)Type Conversion'.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1293
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1294 Example:
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1295
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1296 \(dbus-send-signal
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1297 :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
1298 "org.gnu.Emacs.FileManager" "FileModified" "/home/albinus/.emacs")
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1299
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1300 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
1301 (nargs, args)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1302 int nargs;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1303 register Lisp_Object *args;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1304 {
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1305 Lisp_Object bus, service, path, interface, signal;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1306 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1307 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1308 DBusMessage *dmessage;
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1309 DBusMessageIter iter;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1310 unsigned int dtype;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1311 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
1312 char signature[DBUS_MAXIMUM_SIGNATURE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1313
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1314 /* Check parameters. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1315 bus = args[0];
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1316 service = args[1];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1317 path = args[2];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1318 interface = args[3];
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1319 signal = args[4];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1320
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1321 CHECK_SYMBOL (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1322 CHECK_STRING (service);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1323 CHECK_STRING (path);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1324 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1325 CHECK_STRING (signal);
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1326 GCPRO5 (bus, service, path, interface, signal);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1327
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1328 XD_DEBUG_MESSAGE ("%s %s %s %s",
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1329 SDATA (service),
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1330 SDATA (path),
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1331 SDATA (interface),
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1332 SDATA (signal));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1333
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1334 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1335 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1336
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1337 /* 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
1338 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
1339 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
1340 SDATA (signal));
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1341 UNGCPRO;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1342 if (dmessage == NULL)
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1343 xsignal1 (Qdbus_error, build_string ("Unable to create a new message"));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1344
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1345 /* Initialize parameter list of message. */
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1346 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
1347
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1348 /* Append parameters to the message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1349 for (i = 5; i < nargs; ++i)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1350 {
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
1351 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
1352 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
1353 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1354 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
1355 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
1356 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
1357 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
1358 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
1359 ++i;
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1360 }
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1361 else
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1362 {
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1363 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
1364 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
1365 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
1366 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1367
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1368 /* 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
1369 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
1370 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
1371
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1372 xd_append_arg (dtype, args[i], &iter);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1373 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1374
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1375 /* 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
1376 message queue. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1377 if (!dbus_connection_send (connection, dmessage, NULL))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1378 xsignal1 (Qdbus_error, build_string ("Cannot send message"));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1379
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1380 /* Flush connection to ensure the message is handled. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1381 dbus_connection_flush (connection);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1382
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1383 XD_DEBUG_MESSAGE ("Signal sent");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1384
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1385 /* Cleanup. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1386 dbus_message_unref (dmessage);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1387
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1388 /* Return. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1389 return Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1390 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1391
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1392 /* 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
1393 symbol, either :system or :session. */
87092
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1394 Lisp_Object
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1395 xd_read_message (bus)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1396 Lisp_Object bus;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1397 {
87175
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1398 Lisp_Object args, key, value;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1399 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
1400 struct input_event event;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1401 DBusConnection *connection;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1402 DBusMessage *dmessage;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1403 DBusMessageIter iter;
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1404 unsigned int dtype;
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1405 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
1406 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
1407
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1408 /* Open a connection to the bus. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1409 connection = xd_initialize (bus);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1410
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1411 /* Non blocking read of the next available message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1412 dbus_connection_read_write (connection, 0);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1413 dmessage = dbus_connection_pop_message (connection);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1414
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1415 /* Return if there is no queued message. */
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1416 if (dmessage == NULL)
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1417 return Qnil;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1418
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1419 /* 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
1420 args = Qnil;
30175fd3b679 * dbusbind.c (xd_read_message): Generate an event for every
Michael Albinus <michael.albinus@gmx.de>
parents: 87156
diff changeset
1421 GCPRO1 (args);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1422
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1423 /* 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
1424 if (dbus_message_iter_init (dmessage, &iter))
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1425 {
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1426 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
1427 != DBUS_TYPE_INVALID)
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1428 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1429 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
1430 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
1431 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1432 /* 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
1433 args = Fnreverse (args);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1434 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1435
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1436 /* 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
1437 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
1438 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
1439 serial =
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1440 ((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
1441 || (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
1442 ? 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
1443 : 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
1444 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
1445 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
1446 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
1447 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
1448
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1449 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
1450 (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
1451 ? "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
1452 : (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
1453 ? "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
1454 : (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
1455 ? "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
1456 : (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
1457 ? "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
1458 : "DBUS_MESSAGE_TYPE_SIGNAL",
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1459 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
1460 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
1461
97211
194ecdbbd8a3 * dbusbind.c (xd_read_message): Handle D-Bus error messages.
Michael Albinus <michael.albinus@gmx.de>
parents: 97165
diff changeset
1462 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
1463 || (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
1464 {
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1465 /* 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
1466 key = list2 (bus, make_number (serial));
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1467 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
1468
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1469 /* 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
1470 if (NILP (value))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1471 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1472
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1473 /* Remove the entry. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1474 Fremhash (key, Vdbus_registered_functions_table);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1475
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1476 /* Construct an event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1477 EVENT_INIT (event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1478 event.kind = DBUS_EVENT;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1479 event.frame_or_window = Qnil;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1480 event.arg = Fcons (value, args);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1481 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1482
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1483 else /* (mtype != DBUS_MESSAGE_TYPE_METHOD_RETURN) */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1484 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1485 /* 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
1486 and member. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1487 if ((interface == NULL) || (member == NULL))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1488 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1489
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1490 /* 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
1491 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
1492 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
1493
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1494 /* 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
1495 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
1496 {
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1497 key = CAR_SAFE (value);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1498 /* 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
1499 if (((uname == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1500 || (NILP (CAR_SAFE (key)))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1501 || (strcmp (uname, SDATA (CAR_SAFE (key))) == 0))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1502 && ((path == NULL)
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1503 || (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
1504 || (strcmp (path,
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1505 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
1506 == 0))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1507 && (!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
1508 {
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1509 EVENT_INIT (event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1510 event.kind = DBUS_EVENT;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1511 event.frame_or_window = Qnil;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1512 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
1513 args);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1514 break;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1515 }
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1516 value = CDR_SAFE (value);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1517 }
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1518
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1519 if (NILP (value))
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1520 goto cleanup;
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1521 }
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1522
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1523 /* 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
1524 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
1525 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1526 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
1527 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1528 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
1529 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1530 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
1531 event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1532 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
1533 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
1534
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1535 /* Add the bus symbol to the event. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1536 event.arg = Fcons (bus, event.arg);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1537
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1538 /* Store it into the input event queue. */
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1539 kbd_buffer_store_event (&event);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1540
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1541 XD_DEBUG_MESSAGE ("Event stored: %s",
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1542 SDATA (format2 ("%s", event.arg, Qnil)));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1543
93156
3ef12fa772f2 * dbusbind.c (xd_read_message): Removed extra copying of message
Michael Albinus <michael.albinus@gmx.de>
parents: 87972
diff changeset
1544 cleanup:
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1545 dbus_message_unref (dmessage);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1546 RETURN_UNGCPRO (Qnil);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1547 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1548
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1549 /* 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
1550 void
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1551 xd_read_queued_messages ()
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1552 {
87092
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1553
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1554 /* 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
1555 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
1556 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
1557 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
1558 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
1559 {
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1560 internal_condition_case_1 (xd_read_message, QCdbus_system_bus,
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1561 Qerror, Fidentity);
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1562 internal_condition_case_1 (xd_read_message, QCdbus_session_bus,
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1563 Qerror, Fidentity);
1ddad0de60e5 * dbusbind.c (xd_read_message): Return value is a Lisp_Object.
Michael Albinus <michael.albinus@gmx.de>
parents: 87053
diff changeset
1564 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1565 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1566
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1567 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
1568 6, MANY, 0,
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1569 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
1570
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1571 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
1572
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1573 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
1574 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
1575 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
1576 D-Bus objects shall be accepted.
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1577
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1578 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
1579 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
1580
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1581 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
1582 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
1583 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
1584
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1585 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
1586 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
1587 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
1588 the order.
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1589
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1590 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
1591
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1592 \(defun my-signal-handler (device)
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1593 (message "Device %s added" device))
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1594
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1595 \(dbus-register-signal
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1596 :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
1597 "org.freedesktop.Hal.Manager" "DeviceAdded" 'my-signal-handler)
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1598
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1599 => ((:system "org.freedesktop.Hal.Manager" "DeviceAdded")
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1600 ("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
1601
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1602 `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
1603 `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
1604
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1605 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
1606 (nargs, args)
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1607 int nargs;
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1608 register Lisp_Object *args;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1609 {
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1610 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
1611 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
1612 Lisp_Object uname, key, key1, value;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1613 DBusConnection *connection;
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1614 int i;
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1615 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
1616 char x[DBUS_MAXIMUM_MATCH_RULE_LENGTH];
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1617 DBusError derror;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1618
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1619 /* Check parameters. */
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1620 bus = args[0];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1621 service = args[1];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1622 path = args[2];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1623 interface = args[3];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1624 signal = args[4];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1625 handler = args[5];
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1626
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1627 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
1628 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
1629 if (!NILP (path)) CHECK_STRING (path);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1630 CHECK_STRING (interface);
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1631 CHECK_STRING (signal);
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1632 if (!FUNCTIONP (handler))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1633 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
1634 GCPRO6 (bus, service, path, interface, signal, handler);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1635
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1636 /* 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
1637 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
1638 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
1639 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
1640 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
1641 && (SBYTES (service) > 0)
87280
e0d7140e5b0e * dbusbind.c (xd_retrieve_value, xd_retrieve_arg)
Michael Albinus <michael.albinus@gmx.de>
parents: 87175
diff changeset
1642 && (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
1643 && (strncmp (SDATA (service), ":", 1) != 0))
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1644 {
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1645 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
1646 /* 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
1647 string. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1648 if (NILP (uname))
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1649 uname = build_string ("");
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1650 }
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1651 else
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1652 uname = service;
87156
e0ab56e63db8 * dbusbind.c (Fdbus_get_unique_name, xd_read_message)
Michael Albinus <michael.albinus@gmx.de>
parents: 87092
diff changeset
1653
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1654 /* 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
1655 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
1656 if (NILP (uname) || (SBYTES (uname) > 0))
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1657 {
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1658 /* Open a connection to the bus. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1659 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
1660
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1661 /* Create a rule to receive related signals. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1662 sprintf (rule,
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1663 "type='signal',interface='%s',member='%s'",
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1664 SDATA (interface),
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1665 SDATA (signal));
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1666
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1667 /* 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
1668 if (!NILP (uname))
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1669 {
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1670 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
1671 strcat (rule, x);
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1672 }
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1673
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1674 if (!NILP (path))
96847
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1675 {
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1676 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
1677 strcat (rule, x);
5129bcf1c53e * dbusbind.c (Fdbus_register_signal): Use sprintf + strcat instead
Michael Albinus <michael.albinus@gmx.de>
parents: 96644
diff changeset
1678 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1679
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1680 /* 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
1681 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
1682 if (!NILP (args[i]))
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1683 {
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1684 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
1685 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
1686 strcat (rule, x);
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1687 }
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1688
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1689 /* Add the rule to the bus. */
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1690 dbus_error_init (&derror);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1691 dbus_bus_add_match (connection, rule, &derror);
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1692 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
1693 {
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1694 UNGCPRO;
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1695 XD_ERROR (derror);
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1696 }
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1697
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1698 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
1699 }
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1700
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1701 /* 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
1702 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
1703 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
1704 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
1705
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1706 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
1707 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
1708
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1709 /* Return object. */
96644
5d614d0d26de * dbusbind.c (Fdbus_register_signal): Allow also signal arguments
Michael Albinus <michael.albinus@gmx.de>
parents: 94963
diff changeset
1710 RETURN_UNGCPRO (list2 (key, list3 (service, path, handler)));
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1711 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1712
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1713 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
1714 6, 6, 0,
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1715 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
1716
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1717 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
1718
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1719 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
1720 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
1721
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1722 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
1723 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
1724 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
1725 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
1726 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
1727 (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
1728 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
1729 {
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1730 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
1731 DBusConnection *connection;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1732 int result;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1733 DBusError derror;
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1734
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1735 /* Check parameters. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1736 CHECK_SYMBOL (bus);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1737 CHECK_STRING (service);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1738 CHECK_STRING (path);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1739 CHECK_STRING (interface);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1740 CHECK_STRING (method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1741 if (!FUNCTIONP (handler))
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1742 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
1743 /* 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
1744 a segmentation fault. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1745
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1746 /* 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
1747 connection = xd_initialize (bus);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1748
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1749 /* 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
1750 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
1751 dbus_error_init (&derror);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1752 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
1753 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
1754 XD_ERROR (derror);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1755
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1756 /* 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
1757 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
1758 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
1759 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
1760
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1761 /* 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
1762 called from everybody. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1763 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
1764 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
1765
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1766 /* Return object. */
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1767 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
1768 }
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1769
86940
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 void
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1772 syms_of_dbusbind ()
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1773 {
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1774
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1775 Qdbus_get_unique_name = intern ("dbus-get-unique-name");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1776 staticpro (&Qdbus_get_unique_name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1777 defsubr (&Sdbus_get_unique_name);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1778
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1779 Qdbus_call_method = intern ("dbus-call-method");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1780 staticpro (&Qdbus_call_method);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1781 defsubr (&Sdbus_call_method);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1782
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1783 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
1784 staticpro (&Qdbus_call_method_asynchronously);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1785 defsubr (&Sdbus_call_method_asynchronously);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1786
87887
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1787 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
1788 staticpro (&Qdbus_method_return_internal);
c7d6ce47abe2 * dbusbind.el (Fdbus_method_return_internal): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 87584
diff changeset
1789 defsubr (&Sdbus_method_return_internal);
87584
af7df042c392 * dbusbind.c (Fdbus_method_return): New function.
Michael Albinus <michael.albinus@gmx.de>
parents: 87539
diff changeset
1790
97165
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1791 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
1792 staticpro (&Qdbus_method_error_internal);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1793 defsubr (&Sdbus_method_error_internal);
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1794
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1795 Qdbus_send_signal = intern ("dbus-send-signal");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1796 staticpro (&Qdbus_send_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1797 defsubr (&Sdbus_send_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1798
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1799 Qdbus_register_signal = intern ("dbus-register-signal");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1800 staticpro (&Qdbus_register_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1801 defsubr (&Sdbus_register_signal);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1802
87490
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1803 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
1804 staticpro (&Qdbus_register_method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1805 defsubr (&Sdbus_register_method);
5db1ff3b9244 * dbusbind.c: Fix several errors and compiler warnings. Reported
Michael Albinus <michael.albinus@gmx.de>
parents: 87364
diff changeset
1806
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1807 Qdbus_error = intern ("dbus-error");
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1808 staticpro (&Qdbus_error);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1809 Fput (Qdbus_error, Qerror_conditions,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1810 list2 (Qdbus_error, Qerror));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1811 Fput (Qdbus_error, Qerror_message,
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1812 build_string ("D-Bus error"));
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1813
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1814 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
1815 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
1816
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1817 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
1818 staticpro (&QCdbus_session_bus);
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1819
93420
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1820 QCdbus_timeout = intern (":timeout");
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1821 staticpro (&QCdbus_timeout);
629d4147200e * dbusbind.c (QCdbus_timeout): New D-Bus internal symbol.
Michael Albinus <michael.albinus@gmx.de>
parents: 93156
diff changeset
1822
87343
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1823 QCdbus_type_byte = intern (":byte");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1824 staticpro (&QCdbus_type_byte);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1825
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1826 QCdbus_type_boolean = intern (":boolean");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1827 staticpro (&QCdbus_type_boolean);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1828
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1829 QCdbus_type_int16 = intern (":int16");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1830 staticpro (&QCdbus_type_int16);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1831
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1832 QCdbus_type_uint16 = intern (":uint16");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1833 staticpro (&QCdbus_type_uint16);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1834
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1835 QCdbus_type_int32 = intern (":int32");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1836 staticpro (&QCdbus_type_int32);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1837
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1838 QCdbus_type_uint32 = intern (":uint32");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1839 staticpro (&QCdbus_type_uint32);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1840
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1841 QCdbus_type_int64 = intern (":int64");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1842 staticpro (&QCdbus_type_int64);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1843
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1844 QCdbus_type_uint64 = intern (":uint64");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1845 staticpro (&QCdbus_type_uint64);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1846
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1847 QCdbus_type_double = intern (":double");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1848 staticpro (&QCdbus_type_double);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1849
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1850 QCdbus_type_string = intern (":string");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1851 staticpro (&QCdbus_type_string);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1852
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1853 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
1854 staticpro (&QCdbus_type_object_path);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1855
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1856 QCdbus_type_signature = intern (":signature");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1857 staticpro (&QCdbus_type_signature);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1858
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1859 QCdbus_type_array = intern (":array");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1860 staticpro (&QCdbus_type_array);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1861
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1862 QCdbus_type_variant = intern (":variant");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1863 staticpro (&QCdbus_type_variant);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1864
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1865 QCdbus_type_struct = intern (":struct");
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1866 staticpro (&QCdbus_type_struct);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1867
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1868 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
1869 staticpro (&QCdbus_type_dict_entry);
02e327d7d839 * dbusbind.c (QCdbus_type_byte, QCdbus_type_boolean)
Michael Albinus <michael.albinus@gmx.de>
parents: 87307
diff changeset
1870
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
1871 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
1872 &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
1873 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
1874 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
1875 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
1876 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
1877
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1878 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
1879 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
1880 `: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
1881 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
1882 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
1883
87307
710ac69daf1f * dbusbind.c (top): Include <stdio.h>.
Michael Albinus <michael.albinus@gmx.de>
parents: 87280
diff changeset
1884 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
1885 \((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
1886 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
1887 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
1888 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
1889 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
1890 arrives.
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1891
b0fa771b5389 * dbusbind.c (Fdbus_call_method_asynchronously)
Michael Albinus <michael.albinus@gmx.de>
parents: 96847
diff changeset
1892 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
1893 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
1894 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
1895 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
1896 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
1897 message arrives. */);
87051
1da959e791de * dbusbind.c (QCdbus_system_bus, QCdbus_session_bus): Renamed from
Michael Albinus <michael.albinus@gmx.de>
parents: 86940
diff changeset
1898 /* 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
1899 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
1900 Vdbus_registered_functions_table = Qnil;
86940
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1901
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1902 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
1903 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
1904 #ifdef DBUS_DEBUG
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1905 Vdbus_debug = Qt;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1906 #else
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1907 Vdbus_debug = Qnil;
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1908 #endif
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1909
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1910 Fprovide (intern ("dbusbind"), Qnil);
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1911
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1912 }
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1913
2dd672d9fe75 * config.in (HAVE_DBUS): Add.
Michael Albinus <michael.albinus@gmx.de>
parents:
diff changeset
1914 #endif /* HAVE_DBUS */
87053
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
1915
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
1916 /* arch-tag: 0e828477-b571-4fe4-b559-5c9211bc14b8
f767f1ba8301 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 87051
diff changeset
1917 (do not change this comment) */