[gtk/wip/baedert/for-master: 402/403] inspector: Fix child widget life cycle
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/for-master: 402/403] inspector: Fix child widget life cycle
- Date: Sun, 22 Mar 2020 14:45:40 +0000 (UTC)
commit ca29d0a6f647314d77b96eb5b9a939b4a2967682
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]