summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hergert <chergert@redhat.com>2023-02-21 14:22:23 -0800
committerChristian Hergert <chergert@redhat.com>2023-02-21 14:22:23 -0800
commit84050250899c0c971eedfbd5249ba0a9c4471a39 (patch)
tree0732b6fa5daa674398299674fa0cf6cb2fd4c560
parentfae0529bcd40f29d33e13d2762d77785ded9cc5c (diff)
downloadgtksourceview-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.css3
-rw-r--r--gtksourceview/gtksourcecompletionlistbox.c17
-rw-r--r--gtksourceview/gtksourcecompletionlistboxrow.c6
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 *