[gtk] inspector: Fix child widget life cycle



commit 3b2adf5d1fdaf2042fdb1deab6f6babde4d7ed7a
Author: Timm Bäder <mail baedert org>
Date:   Sun Mar 22 15:41:21 2020 +0100

    inspector: Fix child widget life cycle
    
    unparent them in dispose

 gtk/inspector/general.c   | 36 ++++++++---------------------------
 gtk/inspector/misc-info.c | 35 ++++++++--------------------------
 gtk/inspector/prop-list.c |  5 -----
 gtk/inspector/visual.c    | 48 ++++++++++++++---------------------------------
 4 files changed, 30 insertions(+), 94 deletions(-)
---
diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c
index de3d9a6670..2d3e0ef001 100644
--- a/gtk/inspector/general.c
+++ b/gtk/inspector/general.c
@@ -31,6 +31,7 @@
 #include "gtkimage.h"
 #include "gtkadjustment.h"
 #include "gtkbox.h"
+#include "gtkbinlayout.h"
 
 
 #ifdef GDK_WINDOWING_X11
@@ -881,34 +882,13 @@ gtk_inspector_general_constructed (GObject *object)
 }
 
 static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
+gtk_inspector_general_dispose (GObject *object)
 {
-  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (widget);
+  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (object);
 
-  gtk_widget_measure (gen->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
+  g_clear_pointer (&gen->priv->swin, gtk_widget_unparent);
 
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorGeneral *gen = GTK_INSPECTOR_GENERAL (widget);
-
-  gtk_widget_size_allocate (gen->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
+  G_OBJECT_CLASS (gtk_inspector_general_parent_class)->dispose (object);
 }
 
 static void
@@ -918,9 +898,7 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   object_class->constructed = gtk_inspector_general_constructed;
-
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
+  object_class->dispose = gtk_inspector_general_dispose;
 
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/general.ui");
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, swin);
@@ -951,6 +929,8 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_composited);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, display_rgba);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, device_box);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 void
diff --git a/gtk/inspector/misc-info.c b/gtk/inspector/misc-info.c
index c4eaa54ca8..659960d7b8 100644
--- a/gtk/inspector/misc-info.c
+++ b/gtk/inspector/misc-info.c
@@ -31,6 +31,7 @@
 #include "gtkbutton.h"
 #include "gtkmenubutton.h"
 #include "gtkwidgetprivate.h"
+#include "gtkbinlayout.h"
 
 
 struct _GtkInspectorMiscInfoPrivate {
@@ -570,34 +571,13 @@ set_property (GObject      *object,
 }
 
 static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
+dispose (GObject *o)
 {
-  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (widget);
+  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (o);
 
-  gtk_widget_measure (sl->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
+  g_clear_pointer (&sl->priv->swin, gtk_widget_unparent);
 
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorMiscInfo *sl = GTK_INSPECTOR_MISC_INFO (widget);
-
-  gtk_widget_size_allocate (sl->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
+  G_OBJECT_CLASS (gtk_inspector_misc_info_parent_class)->dispose (o);
 }
 
 static void
@@ -608,11 +588,10 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
 
   object_class->get_property = get_property;
   object_class->set_property = set_property;
+  object_class->dispose = dispose;
 
   widget_class->map = map;
   widget_class->unmap = unmap;
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
 
   g_object_class_install_property (object_class, PROP_OBJECT_TREE,
       g_param_spec_object ("object-tree", "Object Tree", "Object tree",
@@ -669,6 +648,8 @@ gtk_inspector_misc_info_class_init (GtkInspectorMiscInfoClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, show_surface);
   gtk_widget_class_bind_template_callback (widget_class, show_renderer);
   gtk_widget_class_bind_template_callback (widget_class, show_frame_clock);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 // vim: set et sw=2 ts=2:
diff --git a/gtk/inspector/prop-list.c b/gtk/inspector/prop-list.c
index 69282bd7ce..df1450e6ef 100644
--- a/gtk/inspector/prop-list.c
+++ b/gtk/inspector/prop-list.c
@@ -262,11 +262,6 @@ finalize (GObject *object)
 
   cleanup_object (pl);
 
-  g_object_unref (pl->priv->names);
-  g_object_unref (pl->priv->types);
-  g_object_unref (pl->priv->values);
-  g_object_unref (pl->priv->origins);
-
   G_OBJECT_CLASS (gtk_inspector_prop_list_parent_class)->finalize (object);
 }
 
diff --git a/gtk/inspector/visual.c b/gtk/inspector/visual.c
index 8136fc3396..46349bd595 100644
--- a/gtk/inspector/visual.c
+++ b/gtk/inspector/visual.c
@@ -41,6 +41,7 @@
 #include "gskdebugprivate.h"
 #include "gskrendererprivate.h"
 #include "gtknative.h"
+#include "gtkbinlayout.h"
 
 #include "fallback-c89.c"
 
@@ -1081,6 +1082,16 @@ gtk_inspector_visual_constructed (GObject *object)
    g_signal_connect (vis->priv->misc_box, "row-activated", G_CALLBACK (row_activated), vis);
 }
 
+static void
+gtk_inspector_visual_dispose (GObject *object)
+{
+  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (object);
+
+  g_clear_pointer (&vis->priv->swin, gtk_widget_unparent);
+
+  G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->dispose (object);
+}
+
 static void
 gtk_inspector_visual_finalize (GObject *object)
 {
@@ -1099,37 +1110,6 @@ gtk_inspector_visual_finalize (GObject *object)
   G_OBJECT_CLASS (gtk_inspector_visual_parent_class)->finalize (object);
 }
 
-static void
-measure (GtkWidget      *widget,
-         GtkOrientation  orientation,
-         int             for_size,
-         int            *minimum,
-         int            *natural,
-         int            *minimum_baseline,
-         int            *natural_baseline)
-{
-  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (widget);
-
-  gtk_widget_measure (vis->priv->swin,
-                      orientation,
-                      for_size,
-                      minimum, natural,
-                      minimum_baseline, natural_baseline);
-}
-
-static void
-size_allocate (GtkWidget *widget,
-               int        width,
-               int        height,
-               int        baseline)
-{
-  GtkInspectorVisual *vis = GTK_INSPECTOR_VISUAL (widget);
-
-  gtk_widget_size_allocate (vis->priv->swin,
-                            &(GtkAllocation) { 0, 0, width, height },
-                            baseline);
-}
-
 static void
 gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
 {
@@ -1137,11 +1117,9 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
   object_class->constructed = gtk_inspector_visual_constructed;
+  object_class->dispose = gtk_inspector_visual_dispose;
   object_class->finalize = gtk_inspector_visual_finalize;
 
-  widget_class->measure = measure;
-  widget_class->size_allocate = size_allocate;
-
   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/inspector/visual.ui");
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, swin);
   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorVisual, box);
@@ -1182,6 +1160,8 @@ gtk_inspector_visual_class_init (GtkInspectorVisualClass *klass)
   gtk_widget_class_bind_template_callback (widget_class, widget_resize_activate);
   gtk_widget_class_bind_template_callback (widget_class, focus_activate);
   gtk_widget_class_bind_template_callback (widget_class, software_gl_activate);
+
+  gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
 }
 
 void


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