[clutter-gtk] GtkClutterEmbed: Make use-layout-size property work properly
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter-gtk] GtkClutterEmbed: Make use-layout-size property work properly
- Date: Wed, 17 Oct 2012 22:07:52 +0000 (UTC)
commit 01430d351a4094a843afeed66076fc630349dfe8
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Mon Sep 17 13:24:18 2012 +0900
GtkClutterEmbed: Make use-layout-size property work properly
This patch makes the GtkClutterEmbed connect to the stage
'queue-relayout' signal and calls gtk_widget_queue_resize()
if the 'use-layout-size' property is set.
This is needed to ensure the GtkClutterEmbed constantly requests
enough size for the stage whenever the stage's geometry is
renegotiated.
https://bugzilla.gnome.org/show_bug.cgi?id=684171
clutter-gtk/gtk-clutter-embed.c | 33 ++++++++++++++++++++++++++++-----
1 files changed, 28 insertions(+), 5 deletions(-)
---
diff --git a/clutter-gtk/gtk-clutter-embed.c b/clutter-gtk/gtk-clutter-embed.c
index c301e4f..065f20f 100644
--- a/clutter-gtk/gtk-clutter-embed.c
+++ b/clutter-gtk/gtk-clutter-embed.c
@@ -86,6 +86,7 @@ struct _GtkClutterEmbedPrivate
int n_active_children;
guint queue_redraw_id;
+ guint queue_relayout_id;
guint geometry_changed : 1;
guint use_layout_size : 1;
@@ -134,20 +135,33 @@ on_stage_queue_redraw (ClutterStage *stage,
}
static void
+on_stage_queue_relayout (ClutterStage *stage,
+ gpointer user_data)
+{
+ GtkWidget *embed = user_data;
+ GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (embed)->priv;
+
+ if (priv->use_layout_size)
+ gtk_widget_queue_resize (embed);
+}
+
+static void
gtk_clutter_embed_dispose (GObject *gobject)
{
GtkClutterEmbedPrivate *priv = GTK_CLUTTER_EMBED (gobject)->priv;
- if (priv->queue_redraw_id)
+
+ if (priv->stage)
{
- if (priv->stage != NULL)
+ if (priv->queue_redraw_id)
g_signal_handler_disconnect (priv->stage, priv->queue_redraw_id);
+ if (priv->queue_relayout_id)
+ g_signal_handler_disconnect (priv->stage, priv->queue_relayout_id);
+
priv->queue_redraw_id = 0;
- }
+ priv->queue_relayout_id = 0;
- if (priv->stage)
- {
clutter_actor_destroy (priv->stage);
priv->stage = NULL;
}
@@ -960,6 +974,15 @@ gtk_clutter_embed_init (GtkClutterEmbed *embed)
g_signal_connect (priv->stage,
"queue-redraw", G_CALLBACK (on_stage_queue_redraw),
embed);
+
+ /* intercept the queue-relayout signal of the stage to know when
+ * Clutter-side needs to renegotiate it's size; this way we can
+ * also request a resize GTK-side
+ */
+ priv->queue_relayout_id =
+ g_signal_connect (priv->stage,
+ "queue-relayout", G_CALLBACK (on_stage_queue_relayout),
+ embed);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]