annotate src/dbusbind.c @ 110627:6a7fb61524be

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