[gtk/matthiasc/for-master: 1/4] gtk-demo: Make the image demo more robust
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/matthiasc/for-master: 1/4] gtk-demo: Make the image demo more robust
- Date: Mon, 10 Aug 2020 20:36:58 +0000 (UTC)
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]