static void show_input_sources_for_locale (GtkWidget *chooser, LocaleInfo *info) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); set_fixed_size (chooser); remove_all_children (GTK_CONTAINER (priv->list)); if (!info->back_row) { info->back_row = g_object_ref_sink (back_row_new (info->name)); g_object_set_data (G_OBJECT (info->back_row), "back", GINT_TO_POINTER (TRUE)); g_object_set_data (G_OBJECT (info->back_row), "locale-info", info); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (info->back_row)); add_input_source_rows_for_locale (chooser, info); gtk_widget_show_all (priv->list); gtk_adjustment_set_value (priv->adjustment, gtk_adjustment_get_lower (priv->adjustment)); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->list), cc_list_box_update_header_func, NULL, NULL); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->list), GTK_SELECTION_SINGLE); gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (priv->list), FALSE); gtk_list_box_unselect_all (GTK_LIST_BOX (priv->list)); if (gtk_widget_is_visible (priv->filter_entry) && !gtk_widget_is_focus (priv->filter_entry)) gtk_widget_grab_focus (priv->filter_entry); }
static void set_locale_id (GtkDialog *chooser, const gchar *locale_id) { CcLanguageChooserPrivate *priv = GET_PRIVATE (chooser); GList *children, *l; children = gtk_container_get_children (GTK_CONTAINER (priv->language_list)); for (l = children; l; l = l->next) { GtkWidget *row = l->data; GtkWidget *check = g_object_get_data (G_OBJECT (row), "check"); const gchar *language = g_object_get_data (G_OBJECT (row), "locale-id"); if (check == NULL || language == NULL) continue; if (g_strcmp0 (locale_id, language) == 0) { gboolean is_extra; gtk_widget_set_opacity (check, 1.0); /* make sure the selected language is shown */ is_extra = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (row), "is-extra")); if (!priv->showing_extra && is_extra) { g_object_set_data (G_OBJECT (row), "is-extra", GINT_TO_POINTER (FALSE)); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); } } else { gtk_widget_set_opacity (check, 0.0); } } g_list_free (children); g_free (priv->language); priv->language = g_strdup (locale_id); }
GtkWidget * cc_language_chooser_new (GtkWidget *parent) { GtkBuilder *builder; GtkWidget *chooser; CcLanguageChooserPrivate *priv; GError *error = NULL; g_resources_register (cc_common_get_resource ()); builder = gtk_builder_new (); if (gtk_builder_add_from_resource (builder, "/org/gnome/control-center/common/language-chooser.ui", &error) == 0) { g_object_unref (builder); g_warning ("failed to load language chooser: %s", error->message); g_error_free (error); return NULL; } chooser = WID ("language-dialog"); priv = g_new0 (CcLanguageChooserPrivate, 1); g_object_set_data_full (G_OBJECT (chooser), "private", priv, cc_language_chooser_private_free); g_object_set_data_full (G_OBJECT (chooser), "builder", builder, g_object_unref); priv->done_button = WID ("ok-button"); priv->filter_entry = WID ("language-filter-entry"); priv->language_list = WID ("language-list"); priv->scrolledwindow = WID ("language-scrolledwindow"); priv->more_item = more_widget_new (); /* We ref-sink here so we can reuse this widget multiple times */ priv->no_results = g_object_ref_sink (no_results_widget_new ()); gtk_widget_show_all (priv->no_results); gtk_list_box_set_sort_func (GTK_LIST_BOX (priv->language_list), sort_languages, chooser, NULL); gtk_list_box_set_filter_func (GTK_LIST_BOX (priv->language_list), language_visible, chooser, NULL); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->language_list), GTK_SELECTION_NONE); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->language_list), cc_list_box_update_header_func, NULL, NULL); add_all_languages (GTK_DIALOG (chooser)); g_signal_connect_swapped (priv->filter_entry, "search-changed", G_CALLBACK (filter_changed), chooser); g_signal_connect (priv->language_list, "row-activated", G_CALLBACK (row_activated), chooser); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (parent)); g_signal_connect (chooser, "activate-default", G_CALLBACK (activate_default), chooser); return chooser; }
static gboolean search_timeout_cb (EmpathyRosterView *self) { gtk_list_box_invalidate_filter (GTK_LIST_BOX (self)); select_first_contact (self); self->priv->search_id = 0; return G_SOURCE_REMOVE; }
static void filter_changed (GtkDialog *chooser) { CcLanguageChooserPrivate *priv = GET_PRIVATE (chooser); gchar *filter_contents = NULL; g_clear_pointer (&priv->filter_words, g_strfreev); filter_contents = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (priv->filter_entry))); if (!filter_contents) { gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); gtk_list_box_set_placeholder (GTK_LIST_BOX (priv->language_list), NULL); return; } priv->filter_words = g_strsplit_set (g_strstrip (filter_contents), " ", 0); g_free (filter_contents); gtk_list_box_set_placeholder (GTK_LIST_BOX (priv->language_list), priv->no_results); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); }
void empathy_roster_view_show_offline (EmpathyRosterView *self, gboolean show) { if (self->priv->show_offline == show) return; self->priv->show_offline = show; gtk_list_box_invalidate_filter (GTK_LIST_BOX (self)); g_object_notify (G_OBJECT (self), "show-offline"); }
static void show_more (CcLanguageChooser *chooser) { CcLanguageChooserPrivate *priv = chooser->priv; gtk_widget_show (priv->filter_entry); gtk_widget_grab_focus (priv->filter_entry); priv->showing_extra = TRUE; gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); g_object_notify_by_pspec (G_OBJECT (chooser), obj_props[PROP_SHOWING_EXTRA]); }
static void show_locale_rows (GtkWidget *chooser) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); GHashTable *initial = NULL; LocaleInfo *info; GHashTableIter iter; remove_all_children (GTK_CONTAINER (priv->list)); if (!priv->showing_extra) initial = cc_common_language_get_initial_languages (); g_hash_table_iter_init (&iter, priv->locales); while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &info)) { if (!info->default_input_source_row && !g_hash_table_size (info->layout_rows_by_id) && !g_hash_table_size (info->engine_rows_by_id)) continue; if (!info->locale_row) { info->locale_row = g_object_ref_sink (locale_row_new (info->name)); g_object_set_data (G_OBJECT (info->locale_row), "locale-info", info); if (!priv->showing_extra && !g_hash_table_contains (initial, info->id) && !is_current_locale (info->id)) g_object_set_data (G_OBJECT (info->locale_row), "is-extra", GINT_TO_POINTER (TRUE)); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (info->locale_row)); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (priv->more_row)); gtk_widget_show_all (priv->list); gtk_adjustment_set_value (priv->adjustment, gtk_adjustment_get_lower (priv->adjustment)); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->list), cc_list_box_update_header_func, NULL, NULL); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->list), GTK_SELECTION_NONE); gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (priv->list), TRUE); if (gtk_widget_is_visible (priv->filter_entry) && !gtk_widget_is_focus (priv->filter_entry)) gtk_widget_grab_focus (priv->filter_entry); if (!priv->showing_extra) g_hash_table_destroy (initial); }
static gboolean do_filter (GtkWidget *chooser) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); gchar **previous_words; gchar *filter_contents = NULL; priv->filter_timeout_id = 0; previous_words = priv->filter_words; filter_contents = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (priv->filter_entry))); if (filter_contents) { priv->filter_words = g_strsplit_set (g_strstrip (filter_contents), " ", 0); g_free (filter_contents); } if (!priv->filter_words || !priv->filter_words[0]) { g_clear_pointer (&priv->filter_words, g_strfreev); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_placeholder (GTK_LIST_BOX (priv->list), NULL); } else { if (!previous_words || strvs_differ (priv->filter_words, previous_words)) { gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_placeholder (GTK_LIST_BOX (priv->list), priv->no_results); } } g_strfreev (previous_words); return G_SOURCE_REMOVE; }
static void show_more (GtkWidget *chooser) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); set_fixed_size (chooser); gtk_widget_show (priv->filter_entry); gtk_widget_grab_focus (priv->filter_entry); priv->showing_extra = TRUE; gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); }
static void filter_changed (GtkEntry *entry, CcLanguageChooser *chooser) { CcLanguageChooserPrivate *priv = chooser->priv; gchar *filter_contents = NULL; g_clear_pointer (&priv->filter_words, g_strfreev); filter_contents = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (priv->filter_entry))); if (!filter_contents) return; priv->filter_words = g_strsplit_set (g_strstrip (filter_contents), " ", 0); g_free (filter_contents); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); }
static void category_combobox_changed_cb (GtkComboBox *combo_box, gpointer user_data) { BrowserData *data = user_data; GtkTreeIter iter; if (! gtk_combo_box_get_active_iter (combo_box, &iter)) return; reset_original_extension_status (data); update_enabled_disabled_cardinality (data); g_free (data->current_category); gtk_tree_model_get (GTK_TREE_MODEL (GET_WIDGET ("category_liststore")), &iter, CATEGORY_ID_COLUMN, &data->current_category, -1); gtk_list_box_invalidate_filter (GTK_LIST_BOX (data->extensions_list)); }
static void show_more (GtkDialog *chooser) { CcLanguageChooserPrivate *priv = GET_PRIVATE (chooser); GtkWidget *widget; gint width, height; gtk_window_get_size (GTK_WINDOW (chooser), &width, &height); gtk_widget_set_size_request (GTK_WIDGET (chooser), width, height); gtk_window_set_resizable (GTK_WINDOW (chooser), TRUE); widget = priv->scrolledwindow; gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_widget_show (priv->filter_entry); gtk_widget_grab_focus (priv->filter_entry); priv->showing_extra = TRUE; gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->language_list)); }
static void filter_changed (GtkWidget *chooser) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); gboolean was_filtering; gchar **previous_words; gchar *filter_contents = NULL; previous_words = priv->filter_words; was_filtering = previous_words != NULL; filter_contents = cc_util_normalize_casefold_and_unaccent (gtk_entry_get_text (GTK_ENTRY (priv->filter_entry))); if (filter_contents) { priv->filter_words = g_strsplit_set (g_strstrip (filter_contents), " ", 0); g_free (filter_contents); } if (!priv->filter_words || !priv->filter_words[0]) { g_clear_pointer (&priv->filter_words, g_strfreev); if (was_filtering) show_locale_widgets (chooser); } else { if (!was_filtering) show_filter_widgets (chooser); else if (strvs_differ (priv->filter_words, previous_words)) gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); } g_strfreev (previous_words); }
GtkWidget * cc_format_chooser_new (GtkWidget *parent) { GtkBuilder *builder; GtkWidget *chooser; CcFormatChooserPrivate *priv; GError *error = NULL; builder = gtk_builder_new (); if (gtk_builder_add_from_resource (builder, "/org/gnome/control-center/region/format-chooser.ui", &error) == 0) { g_object_unref (builder); g_warning ("failed to load format chooser: %s", error->message); g_error_free (error); return NULL; } chooser = WID ("dialog"); priv = g_new0 (CcFormatChooserPrivate, 1); g_object_set_data_full (G_OBJECT (chooser), "private", priv, cc_format_chooser_private_free); g_object_set_data_full (G_OBJECT (chooser), "builder", builder, g_object_unref); priv->done_button = WID ("ok-button"); priv->filter_entry = WID ("region-filter-entry"); priv->list = WID ("region-list"); priv->scrolledwindow = WID ("region-scrolledwindow"); priv->more_item = more_widget_new (); /* We ref-sink here so we can reuse this widget multiple times */ priv->no_results = g_object_ref_sink (no_results_widget_new ()); gtk_widget_show_all (priv->no_results); priv->full_date = WID ("full-date-format"); priv->medium_date = WID ("medium-date-format"); priv->short_date = WID ("short-date-format"); priv->time = WID ("time-format"); priv->number = WID ("number-format"); priv->measurement = WID ("measurement-format"); priv->paper = WID ("paper-format"); gtk_list_box_set_adjustment (GTK_LIST_BOX (priv->list), gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->scrolledwindow))); gtk_list_box_set_sort_func (GTK_LIST_BOX (priv->list), (GtkListBoxSortFunc)sort_regions, chooser, NULL); gtk_list_box_set_filter_func (GTK_LIST_BOX (priv->list), region_visible, chooser, NULL); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->list), GTK_SELECTION_NONE); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->list), cc_list_box_update_header_func, NULL, NULL); add_all_regions (GTK_DIALOG (chooser)); g_signal_connect_swapped (priv->filter_entry, "search-changed", G_CALLBACK (filter_changed), chooser); g_signal_connect (priv->list, "row-activated", G_CALLBACK (row_activated), chooser); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (parent)); g_signal_connect (chooser, "activate-default", G_CALLBACK (activate_default), chooser); return chooser; }