mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
Fixed focus handling on embedded windows.
Now GtkWindow chains up in focus vfuncs when non-toplevel, this fixes focus in testtoplevelembed.
This commit is contained in:
parent
387d745e0e
commit
aa787c9dd1
@ -3717,8 +3717,6 @@ gtk_widget_unparent (GtkWidget *widget)
|
|||||||
toplevel = gtk_widget_get_toplevel (widget);
|
toplevel = gtk_widget_get_toplevel (widget);
|
||||||
if (gtk_widget_is_toplevel (toplevel))
|
if (gtk_widget_is_toplevel (toplevel))
|
||||||
_gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
|
_gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
|
||||||
else
|
|
||||||
toplevel = NULL;
|
|
||||||
|
|
||||||
if (gtk_container_get_focus_child (GTK_CONTAINER (priv->parent)) == widget)
|
if (gtk_container_get_focus_child (GTK_CONTAINER (priv->parent)) == widget)
|
||||||
gtk_container_set_focus_child (GTK_CONTAINER (priv->parent), NULL);
|
gtk_container_set_focus_child (GTK_CONTAINER (priv->parent), NULL);
|
||||||
@ -3777,7 +3775,7 @@ gtk_widget_unparent (GtkWidget *widget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
g_signal_emit (widget, widget_signals[PARENT_SET], 0, old_parent);
|
g_signal_emit (widget, widget_signals[PARENT_SET], 0, old_parent);
|
||||||
if (toplevel)
|
if (toplevel && gtk_widget_is_toplevel (toplevel))
|
||||||
{
|
{
|
||||||
_gtk_widget_propagate_hierarchy_changed (widget, toplevel);
|
_gtk_widget_propagate_hierarchy_changed (widget, toplevel);
|
||||||
g_object_unref (toplevel);
|
g_object_unref (toplevel);
|
||||||
|
@ -5996,6 +5996,9 @@ gtk_window_focus (GtkWidget *widget,
|
|||||||
GtkWidget *old_focus_child;
|
GtkWidget *old_focus_child;
|
||||||
GtkWidget *parent;
|
GtkWidget *parent;
|
||||||
|
|
||||||
|
if (!gtk_widget_is_toplevel (GTK_WIDGET (widget)))
|
||||||
|
return GTK_WIDGET_CLASS (gtk_window_parent_class)->focus (widget, direction);
|
||||||
|
|
||||||
container = GTK_CONTAINER (widget);
|
container = GTK_CONTAINER (widget);
|
||||||
window = GTK_WINDOW (widget);
|
window = GTK_WINDOW (widget);
|
||||||
priv = window->priv;
|
priv = window->priv;
|
||||||
@ -6049,6 +6052,12 @@ static void
|
|||||||
gtk_window_move_focus (GtkWidget *widget,
|
gtk_window_move_focus (GtkWidget *widget,
|
||||||
GtkDirectionType dir)
|
GtkDirectionType dir)
|
||||||
{
|
{
|
||||||
|
if (!gtk_widget_is_toplevel (GTK_WIDGET (widget)))
|
||||||
|
{
|
||||||
|
GTK_WIDGET_CLASS (gtk_window_parent_class)->move_focus (widget, dir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_child_focus (widget, dir);
|
gtk_widget_child_focus (widget, dir);
|
||||||
|
|
||||||
if (! gtk_container_get_focus_child (GTK_CONTAINER (widget)))
|
if (! gtk_container_get_focus_child (GTK_CONTAINER (widget)))
|
||||||
|
Loading…
Reference in New Issue
Block a user