summaryrefslogtreecommitdiff
path: root/libpurple/dbus-server.c
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2009-07-05 05:41:00 +0000
committerElliott Sales de Andrade <qulogic@pidgin.im>2009-07-05 05:41:00 +0000
commit18bc4c3242338712c39732f670c09dffef019d97 (patch)
tree76a4cefa92f360e4ab70ca04e7063da5c13a24eb /libpurple/dbus-server.c
parentc0e15f5cdf15dc13afd822794ae483bd1c131b20 (diff)
downloadpidgin-18bc4c3242338712c39732f670c09dffef019d97.tar.gz
Add auto-generated D-Bus signals introspection, though parameter names
are not included at the moment. Closes #3243.
Diffstat (limited to 'libpurple/dbus-server.c')
-rw-r--r--libpurple/dbus-server.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libpurple/dbus-server.c b/libpurple/dbus-server.c
index 930a2a591a..efe59770f2 100644
--- a/libpurple/dbus-server.c
+++ b/libpurple/dbus-server.c
@@ -421,6 +421,7 @@ purple_dbus_get_connection(void)
}
#include "dbus-bindings.c"
+#include "dbus-signals.c"
static gboolean
purple_dbus_dispatch_cb(DBusConnection *connection,
@@ -489,6 +490,9 @@ static DBusMessage *purple_dbus_introspect(DBusMessage *message)
DBusMessage *reply;
GString *str;
GList *bindings_list, *node;
+ const char *signals;
+ const char *type;
+ const char *pointer_type;
str = g_string_sized_new(0x1000); /* TODO: why this size? */
@@ -529,6 +533,19 @@ static DBusMessage *purple_dbus_introspect(DBusMessage *message)
}
}
+ if (sizeof(int) == sizeof(dbus_int32_t))
+ pointer_type = "type='i'";
+ else
+ pointer_type = "type='x'";
+
+ signals = dbus_signals;
+ while ((type = strstr(signals, "type='p'")) != NULL) {
+ g_string_append_len(str, signals, type - signals);
+ g_string_append(str, pointer_type);
+ signals = type + sizeof("type='p'") - 1;
+ }
+ g_string_append(str, signals);
+
g_string_append(str, "</interface>\n</node>\n");
reply = dbus_message_new_method_return(message);