summaryrefslogtreecommitdiff
path: root/gtk/gtkcolumnviewrowwidget.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2023-03-23 03:35:04 +0100
committerBenjamin Otte <otte@redhat.com>2023-03-23 04:51:20 +0100
commit78e72ad1deacd152885c60205d620557138e5eaf (patch)
tree63fefa77a6337355ce25f9a9b5725ac4fa363620 /gtk/gtkcolumnviewrowwidget.c
parent8e17abb8fefe063147d6d55a361a38390da8a9b9 (diff)
downloadgtk+-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.c32
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;