summaryrefslogtreecommitdiff
path: root/gio/tests/testapp.c
blob: 8ed30918526acff2216d660365f4680e49c1df11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdlib.h>
#include <gio.h>
#include <gstdio.h>
#include <string.h>

static gboolean action3_added = FALSE;

static void
on_app_action (GApplication *application,
               const gchar  *action_name,
               guint         action_timestamp)
{
  if (strcmp (action_name, "action1") == 0)
    exit (1);
  else  if (strcmp (action_name, "action2") == 0)
    {
      if (action3_added)
        g_application_remove_action (application, "action3");
      else
        g_application_add_action (application, "action3", "An extra action");
      action3_added = !action3_added;
    }
}

static gboolean
invoke_action1 (gpointer data)
{
  GApplication *app = data;

  g_application_invoke_action (app, "action1", 0);

  return FALSE;
}

static void
on_app_activated (GApplication  *application,
		  GVariant      *args,
		  GVariant      *platform_data)
{
  char *str;

  g_print ("got args: ");
  str = g_variant_print (args, TRUE);
  g_print ("%s ", str);
  g_free (str);
  str = g_variant_print (platform_data, TRUE);
  g_print ("%s\n", str);
  g_free (str);
}

int
main (int argc, char *argv[])
{
  GApplication *app;
  GMainLoop *loop;

  app = g_application_new ("org.gtk.test.app");
  if (!(argc > 1 && strcmp (argv[1], "--non-unique") == 0))
    g_application_register_with_data (app, argc, argv, NULL);

  if (g_application_is_remote (app))
    {
      g_timeout_add (1000, invoke_action1, app);
      loop = g_main_loop_new (NULL, FALSE);
      g_main_loop_run (loop);
    }
  else
    {
      g_application_add_action (app, "action1", "Action1");
      g_application_add_action (app, "action2", "Action2");
      g_signal_connect (app, "action",
                        G_CALLBACK (on_app_action), NULL);
      g_signal_connect (app, "prepare-activation",
                        G_CALLBACK (on_app_activated), NULL);
      g_application_run (app);
    }

  return 0;
}