diff --git a/gtk/gtkcolumnview.c b/gtk/gtkcolumnview.c index 1e7299ed47..95fb02d8eb 100644 --- a/gtk/gtkcolumnview.c +++ b/gtk/gtkcolumnview.c @@ -659,6 +659,8 @@ gtk_column_view_class_init (GtkColumnViewClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gpointer iface; + widget_class->focus = gtk_widget_focus_child; + widget_class->grab_focus = gtk_widget_grab_focus_child; widget_class->measure = gtk_column_view_measure; widget_class->size_allocate = gtk_column_view_allocate; @@ -1314,7 +1316,6 @@ gtk_column_view_init (GtkColumnView *self) g_quark_from_static_string (I_("view"))); gtk_widget_set_overflow (GTK_WIDGET (self), GTK_OVERFLOW_HIDDEN); - gtk_widget_set_focusable (GTK_WIDGET (self), TRUE); self->reorderable = TRUE; } diff --git a/gtk/gtklistbase.c b/gtk/gtklistbase.c index 0d09c8d26c..03bcb48288 100644 --- a/gtk/gtklistbase.c +++ b/gtk/gtklistbase.c @@ -569,6 +569,20 @@ gtk_list_base_focus (GtkWidget *widget, return gtk_widget_child_focus (item->widget, direction); } +static gboolean +gtk_list_base_grab_focus (GtkWidget *widget) +{ + GtkListBase *self = GTK_LIST_BASE (widget); + GtkListBasePrivate *priv = gtk_list_base_get_instance_private (self); + guint pos; + + pos = gtk_list_item_tracker_get_position (priv->item_manager, priv->focus); + if (gtk_list_base_grab_focus_on_item (self, pos, FALSE, FALSE, FALSE)) + return TRUE; + + return GTK_WIDGET_CLASS (gtk_list_base_parent_class)->grab_focus (widget); +} + static void gtk_list_base_dispose (GObject *object) { @@ -1120,6 +1134,7 @@ gtk_list_base_class_init (GtkListBaseClass *klass) gpointer iface; widget_class->focus = gtk_list_base_focus; + widget_class->grab_focus = gtk_list_base_grab_focus; gobject_class->dispose = gtk_list_base_dispose; gobject_class->get_property = gtk_list_base_get_property;