[gtk/inspector-navigation: 4/6] stack: Fix handling of GtkStackPage:visible
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/inspector-navigation: 4/6] stack: Fix handling of GtkStackPage:visible
- Date: Tue, 7 Jul 2020 04:49:36 +0000 (UTC)
commit 54a3293cada6e96ba711540f93951e573d1f7845
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jul 6 23:05:37 2020 -0400
stack: Fix handling of GtkStackPage:visible
The stack wasn't updating its visible-child when
the stack pages visible property changes. This
showed up in the inspector, when showing the details
for a list model item.
gtk/gtkstack.c | 38 +++++++++++++++++++++++++-------------
1 file changed, 25 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c
index 423676fc1e..8194f67302 100644
--- a/gtk/gtkstack.c
+++ b/gtk/gtkstack.c
@@ -361,7 +361,7 @@ gtk_stack_page_class_init (GtkStackPageClass *class)
/**
* GtkStackPage:needs-attention:
*
- * Sets a flag specifying whether the oage requires the user attention.
+ * Sets a flag specifying whether the page requires the user attention.
* This is used by the #GtkStackSwitcher to change the appearance of the
* corresponding button when a page needs attention and it is not the
* current one.
@@ -1240,23 +1240,17 @@ set_visible_child (GtkStack *stack,
}
static void
-stack_child_visibility_notify_cb (GObject *obj,
- GParamSpec *pspec,
- gpointer user_data)
+update_child_visible (GtkStack *stack,
+ GtkStackPage *child_info)
{
- GtkStack *stack = GTK_STACK (user_data);
GtkStackPrivate *priv = gtk_stack_get_instance_private (stack);
- GtkWidget *child = GTK_WIDGET (obj);
- GtkStackPage *child_info;
+ gboolean visible;
- child_info = find_child_info_for_widget (stack, child);
- g_return_if_fail (child_info != NULL);
+ visible = child_info->visible && gtk_widget_get_visible (child_info->widget);
- if (priv->visible_child == NULL &&
- gtk_widget_get_visible (child))
+ if (priv->visible_child == NULL && visible)
set_visible_child (stack, child_info, priv->transition_type, priv->transition_duration);
- else if (priv->visible_child == child_info &&
- !gtk_widget_get_visible (child))
+ else if (priv->visible_child == child_info && !visible)
set_visible_child (stack, NULL, priv->transition_type, priv->transition_duration);
if (child_info == priv->last_visible_child)
@@ -1266,6 +1260,20 @@ stack_child_visibility_notify_cb (GObject *obj,
}
}
+static void
+stack_child_visibility_notify_cb (GObject *obj,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GtkStack *stack = GTK_STACK (user_data);
+ GtkStackPage *child_info;
+
+ child_info = find_child_info_for_widget (stack, GTK_WIDGET (obj));
+ g_return_if_fail (child_info != NULL);
+
+ update_child_visible (stack, child_info);
+}
+
/**
* gtk_stack_add_titled:
* @stack: a #GtkStack
@@ -2492,6 +2500,10 @@ gtk_stack_page_set_visible (GtkStackPage *self,
return;
self->visible = visible;
+
+ if (self->widget && gtk_widget_get_parent (self->widget))
+ update_child_visible (GTK_STACK (gtk_widget_get_parent (self->widget)), self);
+
g_object_notify_by_pspec (G_OBJECT (self), stack_page_props[CHILD_PROP_VISIBLE]);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]