static void sources_view_row_activated_cb (GtkTreeView *tree_view, GtkTreePath *tree_path, GtkTreeViewColumn *tree_iter, GdictPrefDialog *dialog) { GtkWidget *edit_dialog; gchar *source_name; GtkTreeModel *model; GtkTreeIter iter; model = gtk_tree_view_get_model (tree_view); if (!model) return; if (!gtk_tree_model_get_iter (model, &iter, tree_path)) return; gtk_tree_model_get (model, &iter, SOURCES_NAME_COLUMN, &source_name, -1); if (!source_name) return; edit_dialog = gdict_source_dialog_new (GTK_WINDOW (dialog), _("Edit Dictionary Source"), GDICT_SOURCE_DIALOG_EDIT, dialog->loader, source_name); gtk_dialog_run (GTK_DIALOG (edit_dialog)); gtk_widget_destroy (edit_dialog); g_free (source_name); update_sources_view (dialog); }
static void set_source_loader (GdictPrefDialog *dialog, GdictSourceLoader *loader) { if (!dialog->sources_list) return; if (dialog->loader) g_object_unref (dialog->loader); dialog->loader = g_object_ref (loader); update_sources_view (dialog); }
static void source_add_clicked_cb (GtkWidget *widget, GdictPrefDialog *dialog) { GtkWidget *add_dialog; add_dialog = gdict_source_dialog_new (GTK_WINDOW (dialog), _("Add Dictionary Source"), GDICT_SOURCE_DIALOG_CREATE, dialog->loader, NULL); gtk_dialog_run (GTK_DIALOG (add_dialog)); gtk_widget_destroy (add_dialog); update_sources_view (dialog); }
static void source_renderer_toggled_cb (GtkCellRendererToggle *renderer, const gchar *path, GdictPrefDialog *dialog) { GtkTreePath *treepath; GtkTreeIter iter; gboolean res; gboolean is_active; gchar *name; treepath = gtk_tree_path_new_from_string (path); res = gtk_tree_model_get_iter (GTK_TREE_MODEL (dialog->sources_list), &iter, treepath); if (!res) { gtk_tree_path_free (treepath); return; } gtk_tree_model_get (GTK_TREE_MODEL (dialog->sources_list), &iter, SOURCES_NAME_COLUMN, &name, SOURCES_ACTIVE_COLUMN, &is_active, -1); if (!is_active && name != NULL) { g_free (dialog->active_source); dialog->active_source = g_strdup (name); gconf_client_set_string (dialog->gconf_client, GDICT_GCONF_SOURCE_KEY, dialog->active_source, NULL); update_sources_view (dialog); g_free (name); } gtk_tree_path_free (treepath); }
static void gdict_pref_dialog_gconf_notify_cb (GConfClient *client, guint cnxn_id, GConfEntry *entry, gpointer user_data) { GdictPrefDialog *dialog = GDICT_PREF_DIALOG (user_data); if (strcmp (entry->key, GDICT_GCONF_SOURCE_KEY) == 0) { if (entry->value && entry->value->type == GCONF_VALUE_STRING) { g_free (dialog->active_source); dialog->active_source = g_strdup (gconf_value_get_string (entry->value)); } else { g_free (dialog->active_source); dialog->active_source = g_strdup (GDICT_DEFAULT_SOURCE_NAME); } update_sources_view (dialog); } else if (strcmp (entry->key, GDICT_GCONF_PRINT_FONT_KEY) == 0) { if (entry->value && entry->value->type == GCONF_VALUE_STRING) { g_free (dialog->print_font); dialog->print_font = g_strdup (gconf_value_get_string (entry->value)); } else { g_free (dialog->print_font); dialog->print_font = g_strdup (GDICT_DEFAULT_PRINT_FONT); } gtk_font_button_set_font_name (GTK_FONT_BUTTON (dialog->font_button), dialog->print_font); } }
static void source_edit_clicked_cb (GtkButton *button, GdictPrefDialog *dialog) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; gboolean is_selected; gchar *name, *description; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->sources_view)); if (!selection) return; is_selected = gtk_tree_selection_get_selected (selection, &model, &iter); if (!is_selected) return; gtk_tree_model_get (model, &iter, SOURCES_NAME_COLUMN, &name, -1); if (!name) return; else { GtkWidget *edit_dialog; edit_dialog = gdict_source_dialog_new (GTK_WINDOW (dialog), _("Edit Dictionary Source"), GDICT_SOURCE_DIALOG_EDIT, dialog->loader, name); gtk_dialog_run (GTK_DIALOG (edit_dialog)); gtk_widget_destroy (edit_dialog); } g_free (name); update_sources_view (dialog); }
static void source_remove_clicked_cb (GtkWidget *widget, GdictPrefDialog *dialog) { GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; gboolean is_selected; gchar *name, *description; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->sources_view)); if (!selection) return; is_selected = gtk_tree_selection_get_selected (selection, &model, &iter); if (!is_selected) return; gtk_tree_model_get (model, &iter, SOURCES_NAME_COLUMN, &name, SOURCES_DESCRIPTION_COLUMN, &description, -1); if (!name) return; else { GtkWidget *confirm_dialog; gint response; confirm_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("Remove \"%s\"?"), description); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (confirm_dialog), _("This will permanently remove the " "dictionary source from the list.")); gtk_dialog_add_button (GTK_DIALOG (confirm_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (GTK_DIALOG (confirm_dialog), GTK_STOCK_REMOVE, GTK_RESPONSE_OK); gtk_window_set_title (GTK_WINDOW (confirm_dialog), ""); response = gtk_dialog_run (GTK_DIALOG (confirm_dialog)); if (response == GTK_RESPONSE_CANCEL) { gtk_widget_destroy (confirm_dialog); goto out; } gtk_widget_destroy (confirm_dialog); } if (gdict_source_loader_remove_source (dialog->loader, name)) gtk_list_store_remove (GTK_LIST_STORE (model), &iter); else { GtkWidget *error_dialog; gchar *message; message = g_strdup_printf (_("Unable to remove source '%s'"), description); error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", message); gtk_window_set_title (GTK_WINDOW (error_dialog), ""); gtk_dialog_run (GTK_DIALOG (error_dialog)); gtk_widget_destroy (error_dialog); } out: g_free (name); g_free (description); update_sources_view (dialog); }