[gtk/matthiasc/for-master: 1/4] gtk-demo: Make the image demo more robust




commit 63fb2126dbc79fde9d44c85c26b8bfecc876e699
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Aug 10 16:35:56 2020 -0400

    gtk-demo: Make the image demo more robust
    
    Make sure we don't crash if the demo is closed
    early.
    
    Fixes: #3058

 demos/gtk-demo/images.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)
---
diff --git a/demos/gtk-demo/images.c b/demos/gtk-demo/images.c
index c034c34920..c53bd5f688 100644
--- a/demos/gtk-demo/images.c
+++ b/demos/gtk-demo/images.c
@@ -240,11 +240,11 @@ progressive_timeout (gpointer data)
 
       pixbuf_loader = gdk_pixbuf_loader_new ();
 
-      g_signal_connect (pixbuf_loader, "area-prepared",
-                        G_CALLBACK (progressive_prepared_callback), picture);
+      g_signal_connect_object (pixbuf_loader, "area-prepared",
+                               G_CALLBACK (progressive_prepared_callback), picture, 0);
 
-      g_signal_connect (pixbuf_loader, "area-updated",
-                        G_CALLBACK (progressive_updated_callback), picture);
+      g_signal_connect_object (pixbuf_loader, "area-updated",
+                               G_CALLBACK (progressive_updated_callback), picture, 0);
     }
 
   /* leave timeout installed */
@@ -261,14 +261,16 @@ start_progressive_loading (GtkWidget *picture)
    * The timeout simply simulates a slow data source by inserting
    * pauses in the reading process.
    */
-  load_timeout = g_timeout_add (150, progressive_timeout, picture);
+  load_timeout = g_timeout_add (1500, progressive_timeout, picture);
   g_source_set_name_by_id (load_timeout, "[gtk] progressive_timeout");
 }
 
 static void
-cleanup_callback (GObject   *object,
-                  gpointer   data)
+cleanup_callback (gpointer  data,
+                  GObject  *former_object)
 {
+  *(gpointer**)data = NULL;
+
   if (load_timeout)
     {
       g_source_remove (load_timeout);
@@ -327,10 +329,7 @@ do_images (GtkWidget *do_widget)
       gtk_window_set_display (GTK_WINDOW (window),
                               gtk_widget_get_display (do_widget));
       gtk_window_set_title (GTK_WINDOW (window), "Images");
-      g_object_add_weak_pointer (G_OBJECT (window), (gpointer *)&window);
-
-      g_signal_connect (window, "destroy",
-                        G_CALLBACK (cleanup_callback), NULL);
+      g_object_weak_ref (G_OBJECT (window), cleanup_callback, &window);
 
       base_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
       gtk_widget_set_margin_start (base_vbox, 16);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]