[gtk] widget: Fix transform refcounting in allocate()
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] widget: Fix transform refcounting in allocate()
- Date: Wed, 29 May 2019 14:35:33 +0000 (UTC)
commit a079fd2def5772b83e570886aa63dd33b294eae6
Author: Benjamin Otte <otte redhat com>
Date: Wed May 29 14:48:27 2019 +0200
widget: Fix transform refcounting in allocate()
Make the transform (transfer full).
1. This makes sure we actually reference the transform. Previously we
did not.
2. Most callers create a new transform to pass to us. Now they don't
have to uref it anymore.
gtk/gtkfixedlayout.c | 2 +-
gtk/gtkrevealer.c | 1 -
gtk/gtkwidget.c | 10 +++-------
tests/testwidgettransforms.c | 2 --
4 files changed, 4 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkfixedlayout.c b/gtk/gtkfixedlayout.c
index 5363d8e4e5..77e923add0 100644
--- a/gtk/gtkfixedlayout.c
+++ b/gtk/gtkfixedlayout.c
@@ -301,7 +301,7 @@ gtk_fixed_layout_allocate (GtkLayoutManager *layout_manager,
child_req.width,
child_req.height,
-1,
- child_info->position);
+ gsk_transform_ref (child_info->position));
}
}
diff --git a/gtk/gtkrevealer.c b/gtk/gtkrevealer.c
index 065d1ab1ff..68e4eba828 100644
--- a/gtk/gtkrevealer.c
+++ b/gtk/gtkrevealer.c
@@ -458,7 +458,6 @@ gtk_revealer_real_size_allocate (GtkWidget *widget,
}
gtk_widget_allocate (child, child_width, child_height, -1, transform);
- gsk_transform_unref (transform);
}
static void
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 9a393a5bb9..26dbae1197 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4233,8 +4233,6 @@ gtk_widget_size_allocate (GtkWidget *widget,
allocation->height,
baseline,
transform);
-
- gsk_transform_unref (transform);
}
/**
@@ -4243,7 +4241,7 @@ gtk_widget_size_allocate (GtkWidget *widget,
* @width: New width of @widget
* @height: New height of @widget
* @baseline: New baseline of @widget, or -1
- * @transform: (transfer none) (allow-none): Transformation to be applied to @widget
+ * @transform: (transfer full) (allow-none): Transformation to be applied to @widget
*
* This function is only used by #GtkWidget subclasses, to assign a size,
* position and (optionally) baseline to their child widgets.
@@ -4303,10 +4301,8 @@ gtk_widget_allocate (GtkWidget *widget,
priv->allocated_height != height);
transform_changed = !gsk_transform_equal (priv->allocated_transform, transform);
- /* order is important, sometimes priv->allocated_transform == transform */
- gsk_transform_ref (transform);
gsk_transform_unref (priv->allocated_transform);
- priv->allocated_transform = transform;
+ priv->allocated_transform = gsk_transform_ref (transform);
priv->allocated_width = width;
priv->allocated_height = height;
priv->allocated_size_baseline = baseline;
@@ -11435,7 +11431,7 @@ gtk_widget_ensure_allocate (GtkWidget *widget)
priv->allocated_width,
priv->allocated_height,
priv->allocated_size_baseline,
- priv->allocated_transform);
+ gsk_transform_ref (priv->allocated_transform));
}
else if (priv->alloc_needed_on_child)
{
diff --git a/tests/testwidgettransforms.c b/tests/testwidgettransforms.c
index 62c99b994a..d8cf78fc6c 100644
--- a/tests/testwidgettransforms.c
+++ b/tests/testwidgettransforms.c
@@ -128,8 +128,6 @@ gtk_transform_tester_size_allocate (GtkWidget *widget,
w, h,
-1,
global_transform);
-
- gsk_transform_unref (global_transform);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]