Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
	}
}
Esempio n. 3
0
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));
}
Esempio n. 4
0
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);
		}
	}
}