void setup_language (GtkBuilder *builder) { GtkWidget *treeview; GHashTable *user_langs; GError *error = NULL; GtkWidget *widget; GtkStyleContext *context; GtkTreeSelection *selection; /* Setup junction between toolbar and treeview */ widget = (GtkWidget *)gtk_builder_get_object (builder, "language-swindow"); context = gtk_widget_get_style_context (widget); gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM); widget = (GtkWidget *)gtk_builder_get_object (builder, "language-toolbar"); context = gtk_widget_get_style_context (widget); gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); treeview = GTK_WIDGET (gtk_builder_get_object (builder, "display_language_treeview")); /* Connect buttons */ widget = (GtkWidget *)gtk_builder_get_object (builder, "language_add"); g_signal_connect (widget, "clicked", G_CALLBACK (add_language), treeview); /* Setup accounts service */ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, "org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts", NULL, &error); if (proxy == NULL) { g_warning ("Failed to contact accounts service: %s", error->message); g_error_free (error); } else { g_object_weak_ref (G_OBJECT (treeview), (GWeakNotify) g_object_unref, proxy); } /* Add user languages */ user_langs = cc_common_language_get_initial_languages (); cc_common_language_setup_list (treeview, user_langs); /* And select the current language */ cc_common_language_select_current_language (GTK_TREE_VIEW (treeview)); /* And now listen for changes */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (selection_changed), builder); gtk_widget_grab_focus (treeview); }
static void add_all_languages (GtkDialog *chooser) { gchar **locale_ids; GHashTable *initial; locale_ids = gnome_get_all_locales (); initial = cc_common_language_get_initial_languages (); add_languages (chooser, locale_ids, initial); g_hash_table_destroy (initial); g_strfreev (locale_ids); }
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); }