gtk-demo: Use GtkBuilderScope more
authorMatthias Clasen <mclasen@redhat.com>
Wed, 2 Aug 2023 19:32:45 +0000 (19:32 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 2 Aug 2023 19:49:03 +0000 (19:49 +0000)
Under circumstances I haven't fully tracked down,
these demos refuse to run, failing to locate their
callbacks. So use the machinery we have, and set up
a GtkBuilderCScope for each of the problematic cases.

demos/gtk-demo/fishbowl.c
demos/gtk-demo/iconscroll.c
demos/gtk-demo/spinbutton.c

index bf0eef7b570c18ea9954b1fcb28d3c43b94d13ef..85ced9752e90a3b09510ea6f0586c51637bc3f34 100644 (file)
@@ -310,11 +310,20 @@ do_fishbowl (GtkWidget *do_widget)
   if (!window)
     {
       GtkBuilder *builder;
+      GtkBuilderScope *scope;
       GtkWidget *bowl;
 
       g_type_ensure (GTK_TYPE_FISHBOWL);
 
-      builder = gtk_builder_new_from_resource ("/fishbowl/fishbowl.ui");
+      scope = gtk_builder_cscope_new ();
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_prev_button_clicked_cb);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_next_button_clicked_cb);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), fishbowl_changes_toggled_cb);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), format_header_cb);
+
+      builder = gtk_builder_new ();
+      gtk_builder_set_scope (builder, scope);
+      gtk_builder_add_from_resource (builder, "/fishbowl/fishbowl.ui", NULL);
       window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
       g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
 
@@ -326,6 +335,7 @@ do_fishbowl (GtkWidget *do_widget)
 
       gtk_widget_realize (window);
       g_object_unref (builder);
+      g_object_unref (scope);
     }
 
   if (!gtk_widget_get_visible (window))
index 87a0c3eb1f256b08a22021521f589f85d60dbb8c..9e7b5b3add4f0619530d600ae8d8d760c3ecd0b3 100644 (file)
@@ -354,10 +354,18 @@ do_iconscroll (GtkWidget *do_widget)
   if (!window)
     {
       GtkBuilder *builder;
+      GtkBuilderScope *scope;
       GtkWidget *label;
       guint id;
 
-      builder = gtk_builder_new_from_resource ("/iconscroll/iconscroll.ui");
+      scope = gtk_builder_cscope_new ();
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), iconscroll_prev_clicked_cb);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), iconscroll_next_clicked_cb);
+
+      builder = gtk_builder_new ();
+      gtk_builder_set_scope (builder, scope);
+
+      gtk_builder_add_from_resource (builder, "/iconscroll/iconscroll.ui", NULL);
       window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
       g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
       gtk_window_set_display (GTK_WINDOW (window),
@@ -375,6 +383,7 @@ do_iconscroll (GtkWidget *do_widget)
                               GUINT_TO_POINTER (id), remove_timeout);
 
       g_object_unref (builder);
+      g_object_unref (scope);
     }
 
   if (!gtk_widget_get_visible (window))
index 85d8c9c8ac685a97a1a77dd5abde0f1f6adc75ae..f2dd5e448ec7924b7a8280d3d44121d5fe0d5d59 100644 (file)
@@ -188,10 +188,20 @@ do_spinbutton (GtkWidget *do_widget)
   if (!window)
     {
       GtkBuilder *builder;
+      GtkBuilderScope *scope;
       GtkAdjustment *adj;
       GtkWidget *label;
 
-      builder = gtk_builder_new_from_resource ("/spinbutton/spinbutton.ui");
+      scope = gtk_builder_cscope_new ();
+      builder = gtk_builder_new ();
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_hex_spin_input);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_hex_spin_output);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_time_spin_input);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_time_spin_output);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_month_spin_input);
+      gtk_builder_cscope_add_callback (GTK_BUILDER_CSCOPE (scope), spinbutton_month_spin_output);
+      gtk_builder_set_scope (builder, scope);
+      gtk_builder_add_from_resource (builder, "/spinbutton/spinbutton.ui", NULL);
       window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
       gtk_window_set_display (GTK_WINDOW (window),
                               gtk_widget_get_display (do_widget));
@@ -233,6 +243,7 @@ do_spinbutton (GtkWidget *do_widget)
                                    NULL, NULL);
 
       g_object_unref (builder);
+      g_object_unref (scope);
     }
 
   if (!gtk_widget_get_visible (window))