diff options
author | Christian Hergert <chergert@redhat.com> | 2023-02-21 14:22:23 -0800 |
---|---|---|
committer | Christian Hergert <chergert@redhat.com> | 2023-02-21 14:22:23 -0800 |
commit | 84050250899c0c971eedfbd5249ba0a9c4471a39 (patch) | |
tree | 0732b6fa5daa674398299674fa0cf6cb2fd4c560 | |
parent | fae0529bcd40f29d33e13d2762d77785ded9cc5c (diff) | |
download | gtksourceview-84050250899c0c971eedfbd5249ba0a9c4471a39.tar.gz |
completion: use css for row separation
Instead of using a GtkSeparator this uses CSS to style the rows
with a header line. This requires less changes in the scene graph and
also allows us to avoid size request changes, meaning the box will not
jitter as much during updates.
-rw-r--r-- | gtksourceview/GtkSourceView.css | 3 | ||||
-rw-r--r-- | gtksourceview/gtksourcecompletionlistbox.c | 17 | ||||
-rw-r--r-- | gtksourceview/gtksourcecompletionlistboxrow.c | 6 |
3 files changed, 12 insertions, 14 deletions
diff --git a/gtksourceview/GtkSourceView.css b/gtksourceview/GtkSourceView.css index f0fe96bc..d38a1580 100644 --- a/gtksourceview/GtkSourceView.css +++ b/gtksourceview/GtkSourceView.css @@ -49,6 +49,9 @@ GtkSourceAssistant.completion list row { transition: none; box-shadow: none; } +GtkSourceAssistant.completion list row.group-leader { + border-top: 1px solid @borders; +} GtkSourceAssistant.completion list row:first-child { border-top-left-radius: 11px; border-top-right-radius: 11px; diff --git a/gtksourceview/gtksourcecompletionlistbox.c b/gtksourceview/gtksourcecompletionlistbox.c index a8f7d209..9eaa763f 100644 --- a/gtksourceview/gtksourcecompletionlistbox.c +++ b/gtksourceview/gtksourcecompletionlistbox.c @@ -858,7 +858,6 @@ gtk_source_completion_list_box_do_update (GtkSourceCompletionListBox *self, { GtkSourceCompletionProposal *proposal = NULL; GtkSourceCompletionProvider *provider = NULL; - GtkWidget *header; gboolean has_alternates = FALSE; if (!GTK_SOURCE_IS_COMPLETION_LIST_BOX_ROW (iter)) @@ -866,8 +865,6 @@ gtk_source_completion_list_box_do_update (GtkSourceCompletionListBox *self, continue; } - header = gtk_list_box_row_get_header (GTK_LIST_BOX_ROW (iter)); - if (state.selected >= 0 && state.position == (guint)state.selected) { gtk_widget_set_state_flags (iter, GTK_STATE_FLAG_SELECTED, FALSE); @@ -902,13 +899,20 @@ gtk_source_completion_list_box_do_update (GtkSourceCompletionListBox *self, self->show_icons, has_alternates); + if (last_provider != NULL && provider != last_provider) + { + gtk_widget_add_css_class (GTK_WIDGET (iter), "group-leader"); + } + else + { + gtk_widget_remove_css_class (GTK_WIDGET (iter), "group-leader"); + } + gtk_widget_show (iter); - gtk_widget_set_visible (header, provider != last_provider && last_provider); } else { gtk_widget_hide (iter); - gtk_widget_hide (header); _gtk_source_completion_list_box_row_display (GTK_SOURCE_COMPLETION_LIST_BOX_ROW (iter), NULL, NULL, NULL, self->show_icons, FALSE); } @@ -1016,10 +1020,8 @@ _gtk_source_completion_list_box_set_n_rows (GtkSourceCompletionListBox *self, for (guint i = 0; i < n_rows; i++) { GtkWidget *row; - GtkWidget *header; row = _gtk_source_completion_list_box_row_new (); - header = gtk_list_box_row_get_header (GTK_LIST_BOX_ROW (row)); gtk_widget_set_can_focus (GTK_WIDGET (row), FALSE); @@ -1030,7 +1032,6 @@ _gtk_source_completion_list_box_set_n_rows (GtkSourceCompletionListBox *self, _gtk_source_completion_list_box_row_set_attrs (GTK_SOURCE_COMPLETION_LIST_BOX_ROW (row), self->font_attrs); - gtk_box_append (self->box, header); gtk_box_append (self->box, row); } diff --git a/gtksourceview/gtksourcecompletionlistboxrow.c b/gtksourceview/gtksourcecompletionlistboxrow.c index ea710a32..c64e358b 100644 --- a/gtksourceview/gtksourcecompletionlistboxrow.c +++ b/gtksourceview/gtksourcecompletionlistboxrow.c @@ -77,12 +77,6 @@ static void gtk_source_completion_list_box_row_init (GtkSourceCompletionListBoxRow *self) { gtk_widget_init_template (GTK_WIDGET (self)); - - gtk_list_box_row_set_header (GTK_LIST_BOX_ROW (self), - g_object_new (GTK_TYPE_SEPARATOR, - "orientation", GTK_ORIENTATION_HORIZONTAL, - "visible", FALSE, - NULL)); } GtkWidget * |