* configure.in: Add test/name-test/Makefile to the generated
[platform/upstream/dbus.git] / glib / examples / example-signal-emitter.c
1 #include <dbus/dbus-glib.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 static void lose (const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
6 static void lose_gerror (const char *prefix, GError *error) G_GNUC_NORETURN;
7
8 static void
9 lose (const char *str, ...)
10 {
11   va_list args;
12
13   va_start (args, str);
14
15   vfprintf (stderr, str, args);
16   fputc ('\n', stderr);
17
18   va_end (args);
19
20   exit (1);
21 }
22
23 static void
24 lose_gerror (const char *prefix, GError *error) 
25 {
26   lose ("%s: %s", prefix, error->message);
27 }
28
29 typedef struct TestObject TestObject;
30 typedef struct TestObjectClass TestObjectClass;
31
32 GType test_object_get_type (void);
33
34 struct TestObject
35 {
36   GObject parent;
37 };
38
39 struct TestObjectClass
40 {
41   GObjectClass parent;
42 };
43
44 enum
45 {
46   HELLO_SIGNAL,
47   LAST_SIGNAL
48 };
49
50 static guint signals[LAST_SIGNAL] = { 0 };
51
52 #define TEST_TYPE_OBJECT              (test_object_get_type ())
53 #define TEST_OBJECT(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), TEST_TYPE_OBJECT, TestObject))
54 #define TEST_OBJECT_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), TEST_TYPE_OBJECT, TestObjectClass))
55 #define TEST_IS_OBJECT(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), TEST_TYPE_OBJECT))
56 #define TEST_IS_OBJECT_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), TEST_TYPE_OBJECT))
57 #define TEST_OBJECT_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_OBJECT, TestObjectClass))
58
59 G_DEFINE_TYPE(TestObject, test_object, G_TYPE_OBJECT)
60
61 gboolean test_object_emit_hello_signal (TestObject *obj, GError **error);
62
63 #include "example-signal-emitter-glue.h"
64
65 static void
66 test_object_init (TestObject *obj)
67 {
68 }
69
70 static void
71 test_object_class_init (TestObjectClass *klass)
72 {
73   signals[HELLO_SIGNAL] =
74     g_signal_new ("hello_signal",
75                   G_OBJECT_CLASS_TYPE (klass),
76                   G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
77                   0,
78                   NULL, NULL,
79                   g_cclosure_marshal_VOID__STRING,
80                   G_TYPE_NONE, 1, G_TYPE_STRING);
81 }
82
83 gboolean
84 test_object_emit_hello_signal (TestObject *obj, GError **error)
85 {
86   g_signal_emit (obj, signals[HELLO_SIGNAL], 0, "Hello");
87   return TRUE;
88 }
89
90
91 int
92 main (int argc, char **argv)
93 {
94   DBusGConnection *bus;
95   DBusGProxy *bus_proxy;
96   GError *error = NULL;
97   TestObject *obj;
98   GMainLoop *mainloop;
99   guint request_name_result;
100
101   g_type_init ();
102
103   dbus_g_object_type_install_info (TEST_TYPE_OBJECT, &dbus_glib_test_object_object_info);
104   
105   mainloop = g_main_loop_new (NULL, FALSE);
106
107   bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
108   if (!bus)
109     lose_gerror ("Couldn't connect to session bus", error);
110
111   bus_proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus",
112                                          "/org/freedesktop/DBus",
113                                          "org.freedesktop.DBus");
114
115   if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,
116                           G_TYPE_STRING, "org.designfu.TestService",
117                           G_TYPE_UINT, 0,
118                           G_TYPE_INVALID,
119                           G_TYPE_UINT, &request_name_result,
120                           G_TYPE_INVALID))
121     lose_gerror ("Failed to acquire org.designfu.TestService", error);
122
123   obj = g_object_new (TEST_TYPE_OBJECT, NULL);
124
125   dbus_g_connection_register_g_object (bus, "/org/designfu/TestService/object", G_OBJECT (obj));
126
127   printf ("test service running\n");
128
129   g_main_loop_run (mainloop);
130
131   exit (0);
132 }