diff options
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r-- | gtk/gtkwidget.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 80f8dcc099..0839228d5d 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -602,6 +602,8 @@ static void gtk_widget_dispatch_child_properties_changed (GtkWidget *obje GParamSpec **pspecs); static gboolean gtk_widget_real_focus (GtkWidget *widget, GtkDirectionType direction); +static void gtk_widget_real_set_focus_child (GtkWidget *widget, + GtkWidget *focus_child); static void gtk_widget_real_move_focus (GtkWidget *widget, GtkDirectionType direction); static gboolean gtk_widget_real_keynav_failed (GtkWidget *widget, @@ -932,6 +934,7 @@ gtk_widget_class_init (GtkWidgetClass *klass) klass->mnemonic_activate = gtk_widget_real_mnemonic_activate; klass->grab_focus = gtk_widget_real_grab_focus; klass->focus = gtk_widget_real_focus; + klass->set_focus_child = gtk_widget_real_set_focus_child; klass->move_focus = gtk_widget_real_move_focus; klass->keynav_failed = gtk_widget_real_keynav_failed; klass->drag_begin = NULL; @@ -13442,16 +13445,23 @@ void gtk_widget_set_focus_child (GtkWidget *widget, GtkWidget *child) { - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - g_return_if_fail (GTK_IS_WIDGET (widget)); - if (child != NULL) { g_return_if_fail (GTK_IS_WIDGET (child)); g_return_if_fail (gtk_widget_get_parent (child) == widget); } + + GTK_WIDGET_GET_CLASS (widget)->set_focus_child (widget, child); +} + +static void +gtk_widget_real_set_focus_child (GtkWidget *widget, + GtkWidget *child) +{ + GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); + if (priv->focus_child) gtk_widget_unset_state_flags (priv->focus_child, GTK_STATE_FLAG_FOCUSED|GTK_STATE_FLAG_FOCUS_VISIBLE); @@ -13469,9 +13479,6 @@ gtk_widget_set_focus_child (GtkWidget *widget, } g_set_object (&priv->focus_child, child); - - if (GTK_IS_CONTAINER (widget)) - gtk_container_set_focus_child (GTK_CONTAINER (widget), child); } /** |