/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2011 Hiroyuki Yamamoto & The Claws Mail Team
+ * Copyright (C) 1999-2012 Hiroyuki Yamamoto & The Claws Mail Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#ifdef HAVE_CONFIG_H
# include "config.h"
+#include "claws-features.h"
#endif
#include "defs.h"
#include "filtering.h"
#include "prefs_filtering_action.h"
#include "matcher_parser.h"
+#include "prefs_toolbar.h"
enum {
PREFS_ACTIONS_STRING, /*!< string pointer managed by list store,
GtkWidget *up_btn;
GtkWidget *down_btn;
static GdkGeometry geometry;
- CLAWS_TIP_DECL();
debug_print("Creating actions configuration window...\n");
{
gtk_entry_set_text(GTK_ENTRY(actions.name_entry), "");
gtk_entry_set_text(GTK_ENTRY(actions.cmd_entry), "");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(actions.shell_radiobtn), TRUE);
}
void prefs_actions_read_config(void)
(GTK_TREE_VIEW(actions.actions_list_view)));
prefs_actions_clear_list(store);
+ prefs_actions_reset_dialog();
for (cur = prefs_common.actions_list; cur != NULL; cur = cur->next) {
gchar *action = (gchar *) cur->data;
static gint prefs_actions_clist_set_row(gint row)
{
const gchar *entry_text;
- gint len;
+ gint len, action_nb;
gchar action[PREFSBUFSIZE];
gchar *new_action;
- GtkListStore *store;
-
- store = GTK_LIST_STORE(gtk_tree_view_get_model
- (GTK_TREE_VIEW(actions.actions_list_view)));
GET_ENTRY(actions.name_entry);
if (entry_text[0] == '\0') {
return -1;
}
+ action_nb = prefs_actions_find_by_name(entry_text);
+ if ((action_nb != -1) && ((row == -1) || (row != action_nb + 1))) {
+ alertpanel_error(_("There is an action with this name already."));
+ return -1;
+ }
+
strncpy(action, entry_text, PREFSBUFSIZE - 1);
while (strstr(action, "//")) {
compose_update_actions_menu(compose);
}
+ /* Update toolbars */
+ prefs_toolbar_update_action_btns();
+
gtk_widget_hide(actions.window);
gtk_window_set_modal(GTK_WINDOW(actions.window), FALSE);
inc_unlock();
static DescriptionWindow actions_desc_win = {
NULL,
NULL,
+ TRUE,
2,
N_("Actions"),
N_("The Actions feature is a way for the user to launch "
{"PrefsActionsPopup/Duplicate", NULL, N_("D_uplicate"), NULL, NULL, G_CALLBACK(prefs_actions_duplicate_cb) },
};
+static void prefs_actions_row_selected(GtkTreeSelection *selection, GtkTreeView *list_view)
+{
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+
+ if (!gtk_tree_selection_get_selected(selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path(model, &iter);
+ prefs_actions_select_row(list_view, path);
+ gtk_tree_path_free(path);
+}
+
static gint prefs_actions_list_btn_pressed(GtkWidget *widget, GdkEventButton *event,
GtkTreeView *list_view)
{
selector = gtk_tree_view_get_selection(list_view);
gtk_tree_selection_set_mode(selector, GTK_SELECTION_BROWSE);
+ g_signal_connect(G_OBJECT(selector), "changed",
+ G_CALLBACK(prefs_actions_row_selected), list_view);
/* create the columns */
prefs_actions_create_list_view_columns(GTK_WIDGET(list_view));
if (action_list == NULL)
return;
+ action_list = filtering_action_list_sort(action_list);
str = filteringaction_list_to_string(action_list);
if (str != NULL) {
modified = TRUE;
}
}
+
+void prefs_actions_rename_path(const gchar *old_path, const gchar *new_path)
+{
+ gchar **tokens, *action_str;
+ GSList *action, *action_list;
+
+ for (action = prefs_common.actions_list; action != NULL;
+ action = action->next) {
+ action_str = (gchar *)action->data;
+ tokens = g_strsplit_set(action_str, "{}", 5);
+
+ if (tokens[0] && tokens[1] && *tokens[1] != '\0')
+ action_list = matcher_parser_get_action_list(tokens[1]);
+ else
+ action_list = NULL;
+
+ if (action_list &&
+ filtering_action_list_rename_path(action_list,
+ old_path, new_path)) {
+ g_free(action->data);
+ action->data = g_strconcat(tokens[0], "{",
+ filteringaction_list_to_string(action_list),
+ "}", NULL);
+ }
+
+ g_strfreev(tokens);
+ }
+}
+
+gint prefs_actions_find_by_name(const gchar *name)
+{
+ GSList *act = prefs_common.actions_list;
+ gchar *action_name, *action_p;
+ gint action_nb = 0;
+
+ for (; act != NULL; act = act->next) {
+ action_name = g_strdup((gchar *)act->data);
+ action_p = strstr(action_name, ": ");
+ action_p[0] = 0x00;
+
+ if (g_utf8_collate(name, action_name) == 0) {
+ g_free(action_name);
+ return action_nb;
+ }
+
+ g_free(action_name);
+ action_nb++;
+ }
+
+ return -1;
+}