1#include <gio/gio.h>
2#include <stdlib.h>
3#include <string.h>
4
5static void
6activate (GApplication *application)
7{
8 g_print (format: "activated\n");
9
10 /* Note: when doing a longer-lasting action here that returns
11 * to the mainloop, you should use g_application_hold() and
12 * g_application_release() to keep the application alive until
13 * the action is completed.
14 */
15}
16
17typedef GApplication TestApplication;
18typedef GApplicationClass TestApplicationClass;
19
20static GType test_application_get_type (void);
21G_DEFINE_TYPE (TestApplication, test_application, G_TYPE_APPLICATION)
22
23static gboolean
24test_application_dbus_register (GApplication *application,
25 GDBusConnection *connection,
26 const gchar *object_path,
27 GError **error)
28{
29 /* We must chain up to the parent class */
30 if (!G_APPLICATION_CLASS (test_application_parent_class)->dbus_register (application,
31 connection,
32 object_path,
33 error))
34 return FALSE;
35
36 /* Now we can do our own stuff here. For example, we could export some D-Bus objects */
37 return TRUE;
38}
39
40static void
41test_application_dbus_unregister (GApplication *application,
42 GDBusConnection *connection,
43 const gchar *object_path)
44{
45 /* Do our own stuff here, e.g. unexport any D-Bus objects we exported in the dbus_register
46 * hook above. Be sure to check that we actually did export them, since the hook
47 * above might have returned early due to the parent class' hook returning FALSE!
48 */
49
50 /* Lastly, we must chain up to the parent class */
51 G_APPLICATION_CLASS (test_application_parent_class)->dbus_unregister (application,
52 connection,
53 object_path);
54}
55
56static void
57test_application_init (TestApplication *app)
58{
59}
60
61static void
62test_application_class_init (TestApplicationClass *class)
63{
64 GApplicationClass *g_application_class = G_APPLICATION_CLASS (class);
65
66 g_application_class->dbus_register = test_application_dbus_register;
67 g_application_class->dbus_unregister = test_application_dbus_unregister;
68}
69
70static GApplication *
71test_application_new (const gchar *application_id,
72 GApplicationFlags flags)
73{
74 g_return_val_if_fail (g_application_id_is_valid (application_id), NULL);
75
76 return g_object_new (object_type: test_application_get_type (),
77 first_property_name: "application-id", application_id,
78 "flags", flags,
79 NULL);
80}
81
82int
83main (int argc, char **argv)
84{
85 GApplication *app;
86 int status;
87
88 app = test_application_new (application_id: "org.gtk.TestApplication", flags: 0);
89 g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
90 g_application_set_inactivity_timeout (application: app, inactivity_timeout: 10000);
91
92 status = g_application_run (application: app, argc, argv);
93
94 g_object_unref (object: app);
95
96 return status;
97}
98

source code of gtk/subprojects/glib/gio/tests/gapplication-example-dbushooks.c