[tepl] LanguageChooserWidget: select first row by taking filter into account
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] LanguageChooserWidget: select first row by taking filter into account
- Date: Tue, 3 Nov 2020 01:07:53 +0000 (UTC)
commit 476ce1ff2691b80a6213131746435d00595040cc
Author: Sébastien Wilmet <swilmet gnome org>
Date: Tue Nov 3 01:57:52 2020 +0100
LanguageChooserWidget: select first row by taking filter into account
tepl/tepl-language-chooser-widget.c | 51 +++++++++++++++++++++++++++++--------
1 file changed, 41 insertions(+), 10 deletions(-)
---
diff --git a/tepl/tepl-language-chooser-widget.c b/tepl/tepl-language-chooser-widget.c
index 5a28a61..9b4fe15 100644
--- a/tepl/tepl-language-chooser-widget.c
+++ b/tepl/tepl-language-chooser-widget.c
@@ -31,6 +31,45 @@ G_DEFINE_TYPE_WITH_CODE (TeplLanguageChooserWidget,
G_IMPLEMENT_INTERFACE (TEPL_TYPE_LANGUAGE_CHOOSER,
tepl_language_chooser_interface_init))
+static gboolean filter_cb (GtkListBoxRow *list_box_row,
+ gpointer user_data);
+
+/* Could be moved to tepl-utils, but it would require to make it more general,
+ * for all GtkListBox scenarios ideally (with headers etc). Or document the
+ * limitations.
+ */
+static void
+list_box_select_first_row (GtkListBox *list_box,
+ GtkListBoxFilterFunc filter_func,
+ gpointer user_data)
+{
+ GList *all_rows;
+ GList *l;
+
+ all_rows = gtk_container_get_children (GTK_CONTAINER (list_box));
+
+ for (l = all_rows; l != NULL; l = l->next)
+ {
+ GtkListBoxRow *cur_row = GTK_LIST_BOX_ROW (l->data);
+
+ if (filter_func (cur_row, user_data))
+ {
+ gtk_list_box_select_row (list_box, cur_row);
+ break;
+ }
+ }
+
+ g_list_free (all_rows);
+}
+
+static void
+select_first_row (TeplLanguageChooserWidget *chooser_widget)
+{
+ list_box_select_first_row (chooser_widget->priv->list_box,
+ filter_cb,
+ chooser_widget);
+}
+
static const gchar *
get_language_name (GtkSourceLanguage *language)
{
@@ -162,15 +201,6 @@ populate_list_box (TeplLanguageChooserWidget *chooser_widget)
}
}
-static void
-select_first_item (TeplLanguageChooserWidget *chooser_widget)
-{
- GtkListBoxRow *row;
-
- row = gtk_list_box_get_row_at_index (chooser_widget->priv->list_box, 0);
- gtk_list_box_select_row (chooser_widget->priv->list_box, row);
-}
-
static gboolean
filter_cb (GtkListBoxRow *list_box_row,
gpointer user_data)
@@ -276,7 +306,6 @@ tepl_language_chooser_widget_init (TeplLanguageChooserWidget *chooser_widget)
gtk_widget_set_hexpand (GTK_WIDGET (chooser_widget->priv->list_box), TRUE);
gtk_widget_set_vexpand (GTK_WIDGET (chooser_widget->priv->list_box), TRUE);
populate_list_box (chooser_widget);
- select_first_item (chooser_widget);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
@@ -298,6 +327,8 @@ tepl_language_chooser_widget_init (TeplLanguageChooserWidget *chooser_widget)
"row-activated",
G_CALLBACK (list_box_row_activated_cb),
chooser_widget);
+
+ select_first_row (chooser_widget);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]