static void cb_pm_button_directory_delete_clicked (PluginManagerGUI *pm_gui) { GtkTreeIter iter; char *dir_name = NULL; gboolean is_system = TRUE; GSList *extra_dirs, *res; if (!gtk_tree_selection_get_selected (pm_gui->selection_directory, NULL, &iter)) return; gtk_tree_model_get (GTK_TREE_MODEL (pm_gui->model_directories), &iter, DIR_NAME, &dir_name, DIR_IS_SYSTEM, &is_system, -1); extra_dirs = go_string_slist_copy (gnm_conf_get_plugins_extra_dirs ()); res = is_system ? NULL : g_slist_find_custom (extra_dirs, dir_name, go_str_compare); if (res) { extra_dirs = g_slist_remove_link (extra_dirs, res); g_free (res->data); g_slist_free_1 (res); gnm_conf_set_plugins_extra_dirs (extra_dirs); pm_gui_load_directory_page (pm_gui); cb_pm_button_rescan_directories_clicked (pm_gui); } g_slist_free_full (extra_dirs, g_free); g_free (dir_name); }
static void wordlist_pref_remove (GtkButton *button, wordlist_conf_setter_t setter) { GtkTreeView *tree = g_object_get_data (G_OBJECT (button), "treeview"); GtkTreeSelection *select = gtk_tree_view_get_selection (tree); GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected (select, &model, &iter)) { char *text; wordlist_conf_getter_t getter = g_object_get_data (G_OBJECT (button), "getter"); GSList *l, *list = getter (); list = go_string_slist_copy (list); gtk_tree_model_get (model, &iter, 0, &text, -1); l = g_slist_find_custom (list, text, (GCompareFunc)strcmp); if (l != NULL) { g_free (l->data); list = g_slist_delete_link (list, l); setter (list); } g_slist_free_full (list, g_free); g_free (text); } }
static void cb_pm_button_directory_add_clicked (PluginManagerGUI *pm_gui) { GtkFileChooser *fsel; fsel = GTK_FILE_CHOOSER (g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG, "action", GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "title", _("Select Directory"), /* We need to force local-only as plugins won't work over the network. */ "local-only", TRUE, NULL)); gtk_dialog_add_buttons (GTK_DIALOG (fsel), _("Cancel"), GTK_RESPONSE_CANCEL, _("Add"), GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (fsel), GTK_RESPONSE_OK); if (go_gtk_file_sel_dialog (pm_gui->parent_window, GTK_WIDGET (fsel))) { char *path = gtk_file_chooser_get_filename (fsel); if (!g_file_test (path, G_FILE_TEST_IS_DIR)) { char *dir_name = g_path_get_dirname (path); g_free (path); path = dir_name; } if (g_slist_find_custom (gnm_conf_get_plugins_extra_dirs (), path, go_str_compare) == NULL) { GSList *extra_dirs = go_string_slist_copy (gnm_conf_get_plugins_extra_dirs ()); GO_SLIST_PREPEND (extra_dirs, path); gnm_conf_set_plugins_extra_dirs (extra_dirs); g_slist_free_full (extra_dirs, g_free); pm_gui_load_directory_page (pm_gui); cb_pm_button_rescan_directories_clicked (pm_gui); } else g_free (path); } gtk_widget_destroy (GTK_WIDGET (fsel)); }
static void wordlist_pref_add (GtkButton *button, wordlist_conf_setter_t setter) { GtkEntry *entry = g_object_get_data (G_OBJECT (button), "entry"); const gchar *text = gtk_entry_get_text (entry); if (text[0]) { wordlist_conf_getter_t getter = g_object_get_data (G_OBJECT (button), "getter"); GSList *l, *list = getter (); l = g_slist_find_custom (list, text, (GCompareFunc)strcmp); if (l == NULL) { list = go_string_slist_copy (list); list = g_slist_append (list, g_strdup (text)); setter (list); g_slist_free_full (list, g_free); } } }