[gtk+] widget: Queue resize on parent on show/hide
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] widget: Queue resize on parent on show/hide
- Date: Thu, 29 Oct 2015 00:08:01 +0000 (UTC)
commit 4483636016ec9e30ee1247b62851a66690967637
Author: Benjamin Otte <otte redhat com>
Date: Thu Oct 29 01:03:09 2015 +0100
widget: Queue resize on parent on show/hide
When gtk_widget_show() or gtk_widget_hide() is called, don't queue a
resize on the widget itself but on the parent.
The widget itself may already be marked as in need of a resize and
the call would be optimized out and never reach the parent.
The parent size will change though because a child widget just changed
its visibility.
Fixes a bunch of issues with menus appearing black, toolbas not hiding
in widget-factory and also various reftests.
gtk/gtkwidget.c | 31 ++++++++++++++++++-------------
1 files changed, 18 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 764df90..2c03f72 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4707,21 +4707,23 @@ gtk_widget_show (GtkWidget *widget)
if (!_gtk_widget_get_visible (widget))
{
+ GtkWidget *parent;
+
g_object_ref (widget);
gtk_widget_push_verify_invariants (widget);
- if (!_gtk_widget_is_toplevel (widget))
- gtk_widget_queue_resize (widget);
-
- /* see comment in set_parent() for why this should and can be
- * conditional
- */
- if (widget->priv->need_compute_expand ||
- widget->priv->computed_hexpand ||
- widget->priv->computed_vexpand)
+ parent = _gtk_widget_get_parent (widget);
+ if (parent)
{
- if (widget->priv->parent != NULL)
- gtk_widget_queue_compute_expand (widget->priv->parent);
+ gtk_widget_queue_resize (parent);
+
+ /* see comment in set_parent() for why this should and can be
+ * conditional
+ */
+ if (widget->priv->need_compute_expand ||
+ widget->priv->computed_hexpand ||
+ widget->priv->computed_vexpand)
+ gtk_widget_queue_compute_expand (parent);
}
gtk_css_node_set_visible (widget->priv->cssnode, TRUE);
@@ -4809,6 +4811,7 @@ gtk_widget_hide (GtkWidget *widget)
if (_gtk_widget_get_visible (widget))
{
GtkWidget *toplevel = _gtk_widget_get_toplevel (widget);
+ GtkWidget *parent;
g_object_ref (widget);
gtk_widget_push_verify_invariants (widget);
@@ -4827,10 +4830,12 @@ gtk_widget_hide (GtkWidget *widget)
gtk_css_node_set_visible (widget->priv->cssnode, FALSE);
g_signal_emit (widget, widget_signals[HIDE], 0);
- if (!_gtk_widget_is_toplevel (widget))
- gtk_widget_queue_resize (widget);
g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_VISIBLE]);
+ parent = gtk_widget_get_parent (widget);
+ if (parent)
+ gtk_widget_queue_resize (parent);
+
gtk_widget_pop_verify_invariants (widget);
g_object_unref (widget);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]