1 #include <gtk/gtk.h>
2 
3 static void
new_window(GSimpleAction * action,GVariant * parameter,gpointer user_data)4 new_window (GSimpleAction *action,
5             GVariant      *parameter,
6             gpointer       user_data)
7 {
8   g_print ("This does nothing. It is only a demonstration.\n");
9 }
10 
11 static void
quit(GSimpleAction * action,GVariant * parameter,gpointer user_data)12 quit (GSimpleAction *action,
13       GVariant      *parameter,
14       gpointer       user_data)
15 {
16   GApplication *application = user_data;
17 
18   g_application_quit (application);
19 }
20 
21 static void
startup(GtkApplication * application,gpointer user_data)22 startup (GtkApplication *application,
23          gpointer        user_data)
24 {
25   static const GActionEntry actions[] = {
26     { "new", new_window },
27     { "quit", quit }
28   };
29 
30   GMenu *menu;
31 
32   g_action_map_add_action_entries (G_ACTION_MAP (application), actions, G_N_ELEMENTS (actions), application);
33 
34   menu = g_menu_new ();
35   g_menu_append (menu, "New", "app.new");
36   g_menu_append (menu, "Quit", "app.quit");
37   gtk_application_set_app_menu (application, G_MENU_MODEL (menu));
38   g_object_unref (menu);
39 }
40 
41 static void
activate(GtkApplication * app,gpointer user_data)42 activate (GtkApplication *app,
43           gpointer        user_data)
44 {
45   GtkWidget *window;
46 
47   window = gtk_application_window_new (app);
48 
49   gtk_window_set_application (GTK_WINDOW (window), GTK_APPLICATION (app));
50   gtk_window_set_title (GTK_WINDOW (window), "Hello GNOME");
51 
52   gtk_widget_show_all (GTK_WIDGET (window));
53 }
54 
55 int
main(int argc,char ** argv)56 main (int argc, char **argv)
57 {
58   GtkApplication *app;
59   int status;
60 
61   app = gtk_application_new ("org.gtk.example",G_APPLICATION_FLAGS_NONE);
62   g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
63   g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
64   status = g_application_run (G_APPLICATION (app), argc, argv);
65   g_object_unref (app);
66   return status;
67 }
68