#include "alertpanel.h"
#include "folder.h"
#include "description_window.h"
+#include "addr_compl.h"
#include "matcher_parser.h"
#include "colorlabel.h"
GtkWidget *exec_btn;
GtkWidget *color_label;
GtkWidget *color_optmenu;
+ GtkWidget *score_label;
gint current_action;
} filtering_action;
ACTION_REDIRECT,
ACTION_EXECUTE,
ACTION_COLOR,
+ ACTION_CHANGE_SCORE,
+ ACTION_SET_SCORE,
+ ACTION_HIDE,
+ ACTION_STOP,
/* add other action constants */
} Action;
{ N_("Forward as attachment"), ACTION_FORWARD_AS_ATTACHMENT },
{ N_("Redirect"), ACTION_REDIRECT },
{ N_("Execute"), ACTION_EXECUTE },
- { N_("Color"), ACTION_COLOR }
+ { N_("Color"), ACTION_COLOR },
+ { N_("Change score"), ACTION_CHANGE_SCORE},
+ { N_("Set score"), ACTION_SET_SCORE},
+ { N_("Hide"), ACTION_HIDE },
+ { N_("Stop filter"), ACTION_STOP },
};
void * sel;
GList * child;
- if (list->selection == NULL)
+ if (list->selection == NULL)
return -1;
sel = list->selection->data;
GtkWidget *account_list;
GtkWidget *dest_label;
GtkWidget *exec_label;
+ GtkWidget *score_label;
GtkWidget *color_label;
GtkWidget *account_label;
GtkWidget *account_combo;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width(GTK_CONTAINER(window), 8);
- gtk_window_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
+ gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
- gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE);
+ gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
vbox = gtk_vbox_new(FALSE, 6);
gtk_widget_show(vbox);
gtk_window_set_title(GTK_WINDOW(window),
_("Filtering action configuration"));
- gtk_signal_connect(GTK_OBJECT(window), "delete_event",
- GTK_SIGNAL_FUNC(prefs_filtering_action_deleted), NULL);
- gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
- GTK_SIGNAL_FUNC(prefs_filtering_action_key_pressed), NULL);
+ g_signal_connect(G_OBJECT(window), "delete_event",
+ G_CALLBACK(prefs_filtering_action_deleted), NULL);
+ g_signal_connect(G_OBJECT(window), "key_press_event",
+ G_CALLBACK(prefs_filtering_action_key_pressed), NULL);
MANAGE_WINDOW_SIGNALS_CONNECT(window);
- gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_ok), NULL);
- gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_cancel), NULL);
+ g_signal_connect(G_OBJECT(ok_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_ok), NULL);
+ g_signal_connect(G_OBJECT(cancel_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_cancel), NULL);
vbox1 = gtk_vbox_new(FALSE, VSPACING);
gtk_widget_show(vbox1);
gtk_box_pack_start (GTK_BOX (hbox1), action_combo,
TRUE, TRUE, 0);
action_type_list = GTK_COMBO(action_combo)->list;
- gtk_signal_connect (GTK_OBJECT (action_type_list), "select-child",
- GTK_SIGNAL_FUNC (prefs_filtering_action_type_select),
- NULL);
+ g_signal_connect (G_OBJECT(action_type_list), "select-child",
+ G_CALLBACK(prefs_filtering_action_type_select),
+ NULL);
- gtk_signal_connect(GTK_OBJECT(action_type_list), "selection-changed",
- GTK_SIGNAL_FUNC(prefs_filtering_action_type_selection_changed),
- NULL);
+ g_signal_connect(G_OBJECT(action_type_list), "selection-changed",
+ G_CALLBACK(prefs_filtering_action_type_selection_changed),
+ NULL);
/* accounts */
gtk_misc_set_alignment(GTK_MISC(color_label), 0, 0.5);
gtk_box_pack_start(GTK_BOX(hbox1), color_label, FALSE, FALSE, 0);
+ score_label = gtk_label_new (_("Score"));
+ gtk_widget_show (score_label);
+ gtk_misc_set_alignment (GTK_MISC (score_label), 0, 0.5);
+ gtk_box_pack_start (GTK_BOX (hbox1), score_label, FALSE, FALSE, 0);
+
dest_entry = gtk_entry_new ();
gtk_widget_set_usize (dest_entry, 150, -1);
gtk_widget_show (dest_entry);
dest_btn = gtk_button_new_with_label (_("Select ..."));
gtk_widget_show (dest_btn);
gtk_box_pack_start (GTK_BOX (hbox1), dest_btn, FALSE, FALSE, 0);
- gtk_signal_connect (GTK_OBJECT (dest_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_filtering_action_select_dest),
- NULL);
+ g_signal_connect (G_OBJECT (dest_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_select_dest),
+ NULL);
exec_btn = gtk_button_new_with_label (_("Info ..."));
gtk_widget_show (exec_btn);
gtk_box_pack_start (GTK_BOX (hbox1), exec_btn, FALSE, FALSE, 0);
- gtk_signal_connect (GTK_OBJECT (exec_btn), "clicked",
- GTK_SIGNAL_FUNC (prefs_filtering_action_exec_info),
- NULL);
+ g_signal_connect (G_OBJECT (exec_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_exec_info),
+ NULL);
/* register / substitute / delete */
reg_btn = gtk_button_new_with_label(_("Add"));
gtk_widget_show(reg_btn);
gtk_box_pack_start(GTK_BOX(btn_hbox), reg_btn, FALSE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(reg_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_register_cb), NULL);
+ g_signal_connect(G_OBJECT(reg_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_register_cb), NULL);
subst_btn = gtk_button_new_with_label(_(" Replace "));
gtk_widget_show(subst_btn);
gtk_box_pack_start(GTK_BOX(btn_hbox), subst_btn, FALSE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(subst_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_substitute_cb),
- NULL);
+ g_signal_connect(G_OBJECT(subst_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_substitute_cb),
+ NULL);
del_btn = gtk_button_new_with_label(_("Delete"));
gtk_widget_show(del_btn);
gtk_box_pack_start(GTK_BOX(btn_hbox), del_btn, FALSE, TRUE, 0);
- gtk_signal_connect(GTK_OBJECT(del_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_delete_cb), NULL);
+ g_signal_connect(G_OBJECT(del_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_delete_cb), NULL);
action_hbox = gtk_hbox_new(FALSE, 8);
gtk_widget_show(action_hbox);
GTK_SELECTION_BROWSE);
GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(action_clist)->column[0].button,
GTK_CAN_FOCUS);
- gtk_signal_connect(GTK_OBJECT(action_clist), "select_row",
- GTK_SIGNAL_FUNC(prefs_filtering_action_select), NULL);
+ g_signal_connect(G_OBJECT(action_clist), "select_row",
+ G_CALLBACK(prefs_filtering_action_select), NULL);
btn_vbox = gtk_vbox_new(FALSE, 8);
gtk_widget_show(btn_vbox);
up_btn = gtk_button_new_with_label(_("Up"));
gtk_widget_show(up_btn);
gtk_box_pack_start(GTK_BOX(btn_vbox), up_btn, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(up_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_up), NULL);
+ g_signal_connect(G_OBJECT(up_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_up), NULL);
down_btn = gtk_button_new_with_label(_("Down"));
gtk_widget_show(down_btn);
gtk_box_pack_start(GTK_BOX(btn_vbox), down_btn, FALSE, FALSE, 0);
- gtk_signal_connect(GTK_OBJECT(down_btn), "clicked",
- GTK_SIGNAL_FUNC(prefs_filtering_action_down), NULL);
+ g_signal_connect(G_OBJECT(down_btn), "clicked",
+ G_CALLBACK(prefs_filtering_action_down), NULL);
gtk_widget_show_all(window);
filtering_action.exec_btn = exec_btn;
filtering_action.color_label = color_label;
filtering_action.color_optmenu = color_optmenu;
+ filtering_action.score_label = score_label;
filtering_action.ok_btn = ok_btn;
filtering_action.action_clist = action_clist;
}
static GSList *prefs_filtering_action_get_list(void)
{
gchar *action_str;
- FilteringAction *action;
gint row = 1;
GSList *action_list;
return MATCHACTION_EXECUTE;
case ACTION_COLOR:
return MATCHACTION_COLOR;
+ case ACTION_HIDE:
+ return MATCHACTION_HIDE;
+ case ACTION_STOP:
+ return MATCHACTION_STOP;
+ case ACTION_CHANGE_SCORE:
+ return MATCHACTION_CHANGE_SCORE;
+ case ACTION_SET_SCORE:
+ return MATCHACTION_SET_SCORE;
default:
return -1;
}
const gchar * destination;
gint labelcolor = 0;
FilteringAction * action;
-
+ gchar * score_str;
+ gint score;
+
action_id = get_sel_from_list(GTK_LIST(filtering_action.action_type_list));
action_type = prefs_filtering_action_get_matching_from_action(action_id);
list_id = get_sel_from_list(GTK_LIST(filtering_action.account_list));
account_id = get_account_id_from_list_id(list_id);
-
+ score = 0;
+ destination = NULL;
+
switch (action_id) {
case ACTION_MOVE:
case ACTION_COPY:
destination = gtk_entry_get_text(GTK_ENTRY(filtering_action.dest_entry));
if (*destination == '\0') {
if (alert)
- alertpanel_error(_("Destination is not set."));
+ alertpanel_error(action_id == ACTION_EXECUTE
+ ? _("Command line not set")
+ : _("Destination is not set."));
return NULL;
}
break;
gtk_option_menu_get_menu(GTK_OPTION_MENU(filtering_action.color_optmenu)));
destination = NULL;
break;
+ case ACTION_CHANGE_SCORE:
+ case ACTION_SET_SCORE:
+ score_str = gtk_entry_get_text(GTK_ENTRY(filtering_action.dest_entry));
+ if (*score_str == '\0') {
+ if (alert)
+ alertpanel_error(_("Score is not set"));
+ return NULL;
+ }
+ score = strtol(score_str, NULL, 10);
+ break;
+ case ACTION_STOP:
+ case ACTION_HIDE:
+ case ACTION_DELETE:
+ case ACTION_MARK:
+ case ACTION_UNMARK:
+ case ACTION_LOCK:
+ case ACTION_UNLOCK:
+ case ACTION_MARK_AS_READ:
+ case ACTION_MARK_AS_UNREAD:
default:
- destination = NULL;
break;
}
- action = filteringaction_new(action_type, account_id, destination, labelcolor);
+ action = filteringaction_new(action_type, account_id,
+ destination, labelcolor, score);
return action;
}
prefs_filtering_action_clist_set_row(-1, action);
filteringaction_free(action);
-
- prefs_filtering_action_reset_dialog();
+ /* presumably gtk_list_select_item(), called by
+ * prefs_filtering_action_reset_dialog() activates
+ * what seems to be a bug. this causes any other
+ * list items to be unselectable */
+ /* prefs_filtering_action_reset_dialog(); */
+ gtk_list_select_item(GTK_LIST(filtering_action.account_list), 0);
+ gtk_entry_set_text(GTK_ENTRY(filtering_action.dest_entry), "");
prefs_filtering_action_update_hscrollbar();
}
ACTION_COLOR);
gtk_option_menu_set_history(GTK_OPTION_MENU(filtering_action.color_optmenu), action->labelcolor);
break;
+ case MATCHACTION_CHANGE_SCORE:
+ gtk_list_select_item(GTK_LIST(filtering_action.action_type_list),
+ ACTION_CHANGE_SCORE);
+ break;
+ case MATCHACTION_SET_SCORE:
+ gtk_list_select_item(GTK_LIST(filtering_action.action_type_list),
+ ACTION_SET_SCORE);
+ break;
+ case MATCHACTION_STOP:
+ gtk_list_select_item(GTK_LIST(filtering_action.action_type_list),
+ ACTION_STOP);
+ break;
+ case MATCHACTION_HIDE:
+ gtk_list_select_item(GTK_LIST(filtering_action.action_type_list),
+ ACTION_HIDE);
+ break;
}
}
static gboolean prefs_filtering_action_key_pressed(GtkWidget *widget,
GdkEventKey *event, gpointer data)
{
- if (event && event->keyval == GDK_Escape)
+ if (event && event->keyval == GDK_Escape) {
prefs_filtering_action_cancel();
+ return TRUE;
+ }
+ return FALSE;
}
/*!
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_COPY:
gtk_widget_show(filtering_action.account_label);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_DELETE:
gtk_widget_show(filtering_action.account_label);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_MARK:
case ACTION_UNMARK:
case ACTION_UNLOCK:
case ACTION_MARK_AS_READ:
case ACTION_MARK_AS_UNREAD:
+ case ACTION_STOP:
+ case ACTION_HIDE:
gtk_widget_show(filtering_action.account_label);
gtk_widget_set_sensitive(filtering_action.account_label, FALSE);
gtk_widget_set_sensitive(filtering_action.account_combo, FALSE);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_FORWARD:
gtk_widget_show(filtering_action.account_label);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_FORWARD_AS_ATTACHMENT:
gtk_widget_show(filtering_action.account_label);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_REDIRECT:
gtk_widget_show(filtering_action.account_label);
gtk_widget_hide(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_EXECUTE:
gtk_widget_show(filtering_action.account_label);
gtk_widget_show(filtering_action.exec_btn);
gtk_widget_hide(filtering_action.color_optmenu);
gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
break;
case ACTION_COLOR:
gtk_widget_show(filtering_action.account_label);
gtk_widget_set_sensitive(filtering_action.exec_btn, FALSE);
gtk_widget_show(filtering_action.color_optmenu);
gtk_widget_show(filtering_action.color_label);
+ gtk_widget_hide(filtering_action.score_label);
+ break;
+ case ACTION_CHANGE_SCORE:
+ case ACTION_SET_SCORE:
+ gtk_widget_show(filtering_action.account_label);
+ gtk_widget_set_sensitive(filtering_action.account_label, FALSE);
+ gtk_widget_set_sensitive(filtering_action.account_combo, FALSE);
+ gtk_widget_show(filtering_action.dest_entry);
+ gtk_widget_set_sensitive(filtering_action.dest_entry, TRUE);
+ gtk_widget_hide(filtering_action.dest_btn);
+ gtk_widget_hide(filtering_action.dest_label);
+ gtk_widget_hide(filtering_action.recip_label);
+ gtk_widget_hide(filtering_action.exec_label);
+ gtk_widget_show(filtering_action.exec_btn);
+ gtk_widget_set_sensitive(filtering_action.exec_btn, FALSE);
+ gtk_widget_hide(filtering_action.color_optmenu);
+ gtk_widget_hide(filtering_action.color_label);
+ gtk_widget_show(filtering_action.score_label);
break;
}
}