/* Builder * * Demonstrates an interface loaded from a XML description. */ #include static void quit_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *window = user_data; gtk_window_destroy (GTK_WINDOW (window)); } static void about_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *window = user_data; GtkBuilder *builder; GtkWidget *about_dlg; builder = g_object_get_data (G_OBJECT (window), "builder"); about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1")); gtk_window_set_transient_for (GTK_WINDOW (about_dlg), GTK_WINDOW (window)); gtk_window_set_hide_on_close (GTK_WINDOW (about_dlg), TRUE); g_signal_connect (about_dlg, "response", G_CALLBACK (gtk_widget_hide), NULL); gtk_widget_show (about_dlg); } static void help_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { g_print ("Help not available\n"); } static void not_implemented (GSimpleAction *action, GVariant *parameter, gpointer user_data) { g_print ("Action ā€œ%sā€ not implemented\n", g_action_get_name (G_ACTION (action))); } static GActionEntry win_entries[] = { { "new", not_implemented, NULL, NULL, NULL }, { "open", not_implemented, NULL, NULL, NULL }, { "save", not_implemented, NULL, NULL, NULL }, { "save-as", not_implemented, NULL, NULL, NULL }, { "copy", not_implemented, NULL, NULL, NULL }, { "cut", not_implemented, NULL, NULL, NULL }, { "paste", not_implemented, NULL, NULL, NULL }, { "quit", quit_activate, NULL, NULL, NULL }, { "about", about_activate, NULL, NULL, NULL }, { "help", help_activate, NULL, NULL, NULL } }; GtkWidget * do_builder (GtkWidget *do_widget) { static GtkWidget *window = NULL; GActionGroup *actions; if (!window) { GtkBuilder *builder; builder = gtk_builder_new_from_resource ("/builder/demo.ui"); window = GTK_WIDGET (gtk_builder_get_object (builder, "window1")); gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget)); g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window); actions = (GActionGroup*)g_simple_action_group_new (); g_action_map_add_action_entries (G_ACTION_MAP (actions), win_entries, G_N_ELEMENTS (win_entries), window); gtk_widget_insert_action_group (window, "win", actions); g_object_unref (builder); } if (!gtk_widget_get_visible (window)) gtk_widget_show (window); else gtk_window_destroy (GTK_WINDOW (window)); return window; }