+#include <gio/gio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static void
+activate (GApplication *application)
+{
+ g_application_hold (application);
+ g_print ("activated\n");
+ g_application_release (application);
+}
+
+static void
+show_help (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer data)
+{
+ g_print ("Want help, eh ?!\n");
+}
+
+static void
+show_about (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ g_print ("Not much to say, really.\nJust a stupid example\n");
+}
+
+static void
+quit_app (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ g_print ("Quitting...\n");
+ g_application_release (g_application_get_default ());
+}
+
+static GActionEntry entries[] = {
+ { "help", show_help, NULL, NULL, NULL },
+ { "about", show_about, NULL, NULL, NULL },
+ { "quit", quit_app, NULL, NULL, NULL }
+};
+
+static void
+add_actions (GApplication *app)
+{
+ GSimpleActionGroup *actions;
+
+ actions = g_simple_action_group_new ();
+
+ g_simple_action_group_add_entries (actions,
+ entries, G_N_ELEMENTS (entries),
+ NULL);
+
+ g_application_set_action_group (app, G_ACTION_GROUP (actions));
+
+ g_object_unref (actions);
+}
+
+static void
+add_menu (GApplication *app)
+{
+ GMenu *menu;
+
+ menu = g_menu_new ();
+
+ g_menu_append (menu, "Help", "help");
+ g_menu_append (menu, "About Example", "about");
+ g_menu_append (menu, "Quit", "quit");
+
+ g_application_set_menu (app, G_MENU_MODEL (menu));
+
+ g_object_unref (menu);
+}
+
+int
+main (int argc, char **argv)
+{
+ GApplication *app;
+ int status;
+
+ app = g_application_new ("org.gtk.TestApplication", 0);
+ g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+
+ add_actions (app);
+ add_menu (app);
+
+ g_application_hold (app);
+
+ status = g_application_run (app, argc, argv);
+
+ g_object_unref (app);
+
+ return status;
+}