static void gtk_offscreen_box_add (GtkContainer *container, GtkWidget *widget) { GtkOffscreenBox *offscreen_box = GTK_OFFSCREEN_BOX (container); if (!offscreen_box->child1) gtk_offscreen_box_add1 (offscreen_box, widget); else if (!offscreen_box->child2) gtk_offscreen_box_add2 (offscreen_box, widget); else g_warning ("GtkOffscreenBox cannot have more than 2 children\n"); }
int main (int argc, char *argv[]) { GtkWidget *window, *widget, *vbox, *button; GtkWidget *offscreen = NULL; gboolean use_offscreen; gtk_init (&argc, &argv); use_offscreen = argc == 1; window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 300,300); g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (window), vbox); scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, 0, G_PI * 2, 0.01); gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Remove child 2"); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); if (use_offscreen) { offscreen = gtk_offscreen_box_new (); g_signal_connect (scale, "value_changed", G_CALLBACK (scale_changed), offscreen); } else { offscreen = gtk_paned_new (GTK_ORIENTATION_VERTICAL); } gtk_box_pack_start (GTK_BOX (vbox), offscreen, TRUE, TRUE, 0); widget = create_widgets (); if (use_offscreen) gtk_offscreen_box_add1 (GTK_OFFSCREEN_BOX (offscreen), widget); else gtk_paned_add1 (GTK_PANED (offscreen), widget); widget = create_widgets (); if (1) { GtkWidget *widget2, *box2, *offscreen2; offscreen2 = gtk_offscreen_box_new (); gtk_box_pack_start (GTK_BOX (widget), offscreen2, FALSE, FALSE, 0); g_signal_connect (scale, "value_changed", G_CALLBACK (scale_changed), offscreen2); box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_offscreen_box_add2 (GTK_OFFSCREEN_BOX (offscreen2), box2); widget2 = gtk_button_new_with_label ("Offscreen in offscreen"); gtk_box_pack_start (GTK_BOX (box2), widget2, FALSE, FALSE, 0); widget2 = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (widget2), "Offscreen in offscreen"); gtk_box_pack_start (GTK_BOX (box2), widget2, FALSE, FALSE, 0); } if (use_offscreen) gtk_offscreen_box_add2 (GTK_OFFSCREEN_BOX (offscreen), widget); else gtk_paned_add2 (GTK_PANED (offscreen), widget); gtk_widget_show_all (window); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (remove_clicked), widget); gtk_main (); return 0; }