GtkWidget * um_language_chooser_new (void) { GtkBuilder *builder; const char *filename; GError *error = NULL; GtkWidget *chooser; GtkWidget *list; GtkWidget *button; GtkTreeViewColumn *column; GtkCellRenderer *cell; GtkListStore *store; builder = gtk_builder_new (); filename = UIDIR "/language-chooser.ui"; if (!g_file_test (filename, G_FILE_TEST_EXISTS)) filename = "../data/language-chooser.ui"; if (!gtk_builder_add_from_file (builder, filename, &error)) { g_warning ("failed to load language chooser: %s", error->message); g_error_free (error); exit (1); } chooser = (GtkWidget *) gtk_builder_get_object (builder, "dialog"); list = (GtkWidget *) gtk_builder_get_object (builder, "language-list"); g_object_set_data (G_OBJECT (chooser), "list", list); g_signal_connect (list, "row-activated", G_CALLBACK (row_activated), chooser); button = (GtkWidget *) gtk_builder_get_object (builder, "cancel-button"); button = (GtkWidget *) gtk_builder_get_object (builder, "ok-button"); gtk_widget_grab_default (button); cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (NULL, cell, "text", DISPLAY_LOCALE_COL, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (list), column); store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store), sort_languages, NULL, NULL); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID, GTK_SORT_ASCENDING); gtk_tree_view_set_model (GTK_TREE_VIEW (list), GTK_TREE_MODEL (store)); add_available_languages (store); g_object_unref (builder); return chooser; }
static void gdm_language_chooser_widget_realize (GtkWidget *widget) { GdmLanguageChooserWidget *chooser; chooser = GDM_LANGUAGE_CHOOSER_WIDGET (widget); GTK_WIDGET_CLASS (gdm_language_chooser_widget_parent_class)->realize (widget); if (!chooser->priv->languages_added) { add_available_languages (chooser); chooser->priv->languages_added = TRUE; } }