Merge the wip/gapplication branch
[platform/upstream/glib.git] / gio / tests / testapp.c
1 #include <stdlib.h>
2 #include <gio.h>
3 #include <gstdio.h>
4 #include <string.h>
5
6 static gboolean action3_added = FALSE;
7
8 static void
9 on_app_action (GApplication *application,
10                const gchar  *action_name,
11                guint         action_timestamp)
12 {
13   if (strcmp (action_name, "action1") == 0)
14     exit (1);
15   else  if (strcmp (action_name, "action2") == 0)
16     {
17       if (action3_added)
18         g_application_remove_action (application, "action3");
19       else
20         g_application_add_action (application, "action3", "An extra action");
21       action3_added = !action3_added;
22     }
23 }
24
25 static gboolean
26 invoke_action1 (gpointer data)
27 {
28   GApplication *app = data;
29
30   g_application_invoke_action (app, "action1", 0);
31
32   return FALSE;
33 }
34
35 static void
36 on_app_activated (GApplication  *application,
37                   GVariant      *args,
38                   GVariant      *platform_data)
39 {
40   char *str;
41
42   g_print ("got args: ");
43   str = g_variant_print (args, TRUE);
44   g_print ("%s ", str);
45   g_free (str);
46   str = g_variant_print (platform_data, TRUE);
47   g_print ("%s\n", str);
48   g_free (str);
49 }
50
51 int
52 main (int argc, char *argv[])
53 {
54   GApplication *app;
55   GMainLoop *loop;
56
57   app = g_application_new ("org.gtk.test.app");
58   if (!(argc > 1 && strcmp (argv[1], "--non-unique") == 0))
59     g_application_register_with_data (app, argc, argv, NULL);
60
61   if (g_application_is_remote (app))
62     {
63       g_timeout_add (1000, invoke_action1, app);
64       loop = g_main_loop_new (NULL, FALSE);
65       g_main_loop_run (loop);
66     }
67   else
68     {
69       g_application_add_action (app, "action1", "Action1");
70       g_application_add_action (app, "action2", "Action2");
71       g_signal_connect (app, "action",
72                         G_CALLBACK (on_app_action), NULL);
73       g_signal_connect (app, "prepare-activation",
74                         G_CALLBACK (on_app_activated), NULL);
75       g_application_run (app);
76     }
77
78   return 0;
79 }