Rewrite apps test to ensure children are killed
[platform/upstream/glib.git] / gio / tests / testapp.c
1 #include <gio.h>
2 #include <gstdio.h>
3 #include <string.h>
4
5 #ifdef G_OS_UNIX
6 #include <stdlib.h>
7 #include <fcntl.h>
8 #endif
9
10 static gboolean action3_added = FALSE;
11
12 static void
13 on_app_action (GApplication *application,
14                const gchar  *action_name,
15                guint         action_timestamp)
16 {
17   if (strcmp (action_name, "action1") == 0)
18     exit (1);
19   else  if (strcmp (action_name, "action2") == 0)
20     {
21       if (action3_added)
22         g_application_remove_action (application, "action3");
23       else
24         g_application_add_action (application, "action3", "An extra action");
25       action3_added = !action3_added;
26     }
27 }
28
29 static void
30 on_app_activated (GApplication  *application,
31                   GVariant      *args,
32                   GVariant      *platform_data)
33 {
34 }
35
36 static gboolean
37 on_monitor_fd_io (GIOChannel *source,
38                   GIOCondition condition,
39                   gpointer data)
40 {
41   exit (0);
42   return FALSE;
43 }
44
45 int
46 main (int argc, char *argv[])
47 {
48   GApplication *app;
49
50 #ifdef G_OS_UNIX
51   {
52     const char *slave_fd_env = g_getenv ("_G_TEST_SLAVE_FD");
53     if (slave_fd_env)
54       {
55         int slave_fd = atoi (slave_fd_env);
56         fcntl (slave_fd, F_SETFD, FD_CLOEXEC);
57         g_io_add_watch (g_io_channel_unix_new (slave_fd), G_IO_HUP | G_IO_ERR,
58                         on_monitor_fd_io, NULL);
59       }
60   }
61 #endif
62
63   app = g_application_new ("org.gtk.test.app");
64   if (!(argc > 1 && strcmp (argv[1], "--non-unique") == 0))
65     g_application_register_with_data (app, argc, argv, NULL);
66
67   if (g_application_is_remote (app))
68     {
69       g_application_invoke_action (app, "action1", 0);
70     }
71   else
72     {
73       g_application_add_action (app, "action1", "Action1");
74       g_application_add_action (app, "action2", "Action2");
75       g_signal_connect (app, "action",
76                         G_CALLBACK (on_app_action), NULL);
77       g_signal_connect (app, "prepare-activation",
78                         G_CALLBACK (on_app_activated), NULL);
79       g_application_run (app);
80     }
81
82   return 0;
83 }