gtkbox: Invalidate order on changes, even if the child is not visible
When we build the sibling path for the order, we do not skip hidden children (since, quoting the comment, "we cannot reliably detect changes in widget visibility"). So we need to invalidate the order when hidden children are reordered and removed. https://bugzilla.gnome.org/show_bug.cgi?id=652769
This commit is contained in:
@@ -1612,10 +1612,12 @@ gtk_box_reorder_child (GtkBox *box,
|
|||||||
priv->children = g_list_insert_before (priv->children, new_link, child_info);
|
priv->children = g_list_insert_before (priv->children, new_link, child_info);
|
||||||
|
|
||||||
gtk_widget_child_notify (child, "position");
|
gtk_widget_child_notify (child, "position");
|
||||||
|
|
||||||
|
gtk_box_invalidate_order (box);
|
||||||
|
|
||||||
if (gtk_widget_get_visible (child)
|
if (gtk_widget_get_visible (child)
|
||||||
&& gtk_widget_get_visible (GTK_WIDGET (box)))
|
&& gtk_widget_get_visible (GTK_WIDGET (box)))
|
||||||
{
|
{
|
||||||
gtk_box_invalidate_order (box);
|
|
||||||
gtk_widget_queue_resize (child);
|
gtk_widget_queue_resize (child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1799,12 +1801,13 @@ gtk_box_remove (GtkContainer *container,
|
|||||||
g_list_free (children);
|
g_list_free (children);
|
||||||
g_free (child);
|
g_free (child);
|
||||||
|
|
||||||
|
gtk_box_invalidate_order (box);
|
||||||
|
|
||||||
/* queue resize regardless of gtk_widget_get_visible (container),
|
/* queue resize regardless of gtk_widget_get_visible (container),
|
||||||
* since that's what is needed by toplevels.
|
* since that's what is needed by toplevels.
|
||||||
*/
|
*/
|
||||||
if (was_visible)
|
if (was_visible)
|
||||||
{
|
{
|
||||||
gtk_box_invalidate_order (box);
|
|
||||||
gtk_widget_queue_resize (GTK_WIDGET (container));
|
gtk_widget_queue_resize (GTK_WIDGET (container));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user