annotate src/dbusbind.c @ 109179:8cfee7d2955f

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