diff options
author | Benjamin Otte <otte@redhat.com> | 2023-03-23 03:35:04 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-03-23 04:51:20 +0100 |
commit | 78e72ad1deacd152885c60205d620557138e5eaf (patch) | |
tree | 63fefa77a6337355ce25f9a9b5725ac4fa363620 /gtk/gtkcolumnviewrowwidget.c | |
parent | 8e17abb8fefe063147d6d55a361a38390da8a9b9 (diff) | |
download | gtk+-78e72ad1deacd152885c60205d620557138e5eaf.tar.gz |
columnview: add a (private) focus-column
Make setting the focus column scroll to it, too.
Diffstat (limited to 'gtk/gtkcolumnviewrowwidget.c')
-rw-r--r-- | gtk/gtkcolumnviewrowwidget.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/gtk/gtkcolumnviewrowwidget.c b/gtk/gtkcolumnviewrowwidget.c index b4f4ef9fa7..cf2c434356 100644 --- a/gtk/gtkcolumnviewrowwidget.c +++ b/gtk/gtkcolumnviewrowwidget.c @@ -53,6 +53,17 @@ gtk_column_view_row_widget_is_header (GtkColumnViewRowWidget *self) return gtk_widget_get_css_name (GTK_WIDGET (self)) == g_intern_static_string ("header"); } +static GtkColumnViewColumn * +gtk_column_view_row_child_get_column (GtkWidget *child) +{ + if (GTK_IS_COLUMN_VIEW_CELL (child)) + return gtk_column_view_cell_get_column (GTK_COLUMN_VIEW_CELL (child)); + else + return gtk_column_view_title_get_column (GTK_COLUMN_VIEW_TITLE (child)); + + g_return_val_if_reached (NULL); +} + static void gtk_column_view_row_widget_update (GtkListItemBase *base, guint position, @@ -193,6 +204,21 @@ gtk_column_view_row_widget_grab_focus (GtkWidget *widget) } static void +gtk_column_view_row_widget_set_focus_child (GtkWidget *widget, + GtkWidget *child) +{ + GtkColumnViewRowWidget *self = GTK_COLUMN_VIEW_ROW_WIDGET (widget); + + GTK_WIDGET_CLASS (gtk_column_view_row_widget_parent_class)->set_focus_child (widget, child); + + if (child) + { + gtk_column_view_set_focus_column (gtk_column_view_row_widget_get_column_view (self), + gtk_column_view_row_child_get_column (child)); + } +} + +static void gtk_column_view_row_widget_root (GtkWidget *widget) { GtkColumnViewRowWidget *self = GTK_COLUMN_VIEW_ROW_WIDGET (widget); @@ -341,10 +367,7 @@ gtk_column_view_row_widget_allocate (GtkWidget *widget, if (!gtk_widget_should_layout (child)) continue; - if (GTK_IS_COLUMN_VIEW_CELL (child)) - column = gtk_column_view_cell_get_column (GTK_COLUMN_VIEW_CELL (child)); - else - column = gtk_column_view_title_get_column (GTK_COLUMN_VIEW_TITLE (child)); + column = gtk_column_view_row_child_get_column (child); gtk_column_view_column_get_header_allocation (column, &col_x, &col_width); gtk_widget_measure (child, GTK_ORIENTATION_HORIZONTAL, -1, &min, NULL, NULL, NULL); @@ -388,6 +411,7 @@ gtk_column_view_row_widget_class_init (GtkColumnViewRowWidgetClass *klass) widget_class->focus = gtk_column_view_row_widget_focus; widget_class->grab_focus = gtk_column_view_row_widget_grab_focus; + widget_class->set_focus_child = gtk_column_view_row_widget_set_focus_child; widget_class->measure = gtk_column_view_row_widget_measure; widget_class->size_allocate = gtk_column_view_row_widget_allocate; widget_class->root = gtk_column_view_row_widget_root; |