diff options
author | Timm Bäder <mail@baedert.org> | 2017-04-23 08:39:15 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2017-04-24 21:52:13 +0200 |
commit | 21c6aa5a15304a7cc79ea88556528b49ca4e9673 (patch) | |
tree | 80a530572a0fb7a24f3198f67f68aec3d2e6bf5a | |
parent | bc7b93ca31b71cfad46e18d6f39ea670d83fb1e1 (diff) | |
download | gtk+-21c6aa5a15304a7cc79ea88556528b49ca4e9673.tar.gz |
overlay: Ensure proper child widget order
Make sure the main widget stays below all the overlay children.
-rw-r--r-- | gtk/gtkoverlay.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gtk/gtkoverlay.c b/gtk/gtkoverlay.c index 5752a3ca56..175672e1b9 100644 --- a/gtk/gtkoverlay.c +++ b/gtk/gtkoverlay.c @@ -587,9 +587,10 @@ gtk_overlay_reorder_overlay (GtkOverlay *overlay, gtk_widget_child_notify (info->widget, "index"); } - if (gtk_widget_get_visible (child) && - gtk_widget_get_visible (GTK_WIDGET (overlay))) - gtk_widget_queue_resize (GTK_WIDGET (overlay)); + if (new_link) + gtk_widget_insert_before (child, GTK_WIDGET (overlay), ((GtkOverlayChild *)new_link->data)->widget); + else + gtk_widget_insert_before (child, GTK_WIDGET (overlay), NULL); } @@ -832,7 +833,11 @@ gtk_overlay_buildable_add_child (GtkBuildable *buildable, if (type && strcmp (type, "overlay") == 0) gtk_overlay_add_overlay (GTK_OVERLAY (buildable), GTK_WIDGET (child)); else if (!type) - gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child)); + { + /* Make sure the main-child node is the first one */ + gtk_widget_insert_after (GTK_WIDGET (child), GTK_WIDGET (buildable), NULL); + _gtk_bin_set_child (GTK_BIN (buildable), GTK_WIDGET (child)); + } else GTK_BUILDER_WARN_INVALID_CHILD_TYPE (buildable, type); } @@ -890,12 +895,9 @@ gtk_overlay_add_overlay (GtkOverlay *overlay, priv->children = g_slist_append (priv->children, child); if (gtk_widget_get_realized (GTK_WIDGET (overlay))) - { - child->window = gtk_overlay_create_child_window (overlay, child); - gtk_widget_set_parent (widget, GTK_WIDGET (overlay)); - } - else - gtk_widget_set_parent (widget, GTK_WIDGET (overlay)); + child->window = gtk_overlay_create_child_window (overlay, child); + + gtk_widget_insert_before (widget, GTK_WIDGET (overlay), NULL); gtk_widget_child_notify (widget, "index"); } |