+
+static void prefs_action_filter_radiobtn_cb(GtkWidget *widget, gpointer data)
+{
+ if(actions.filter_btn)
+ gtk_widget_set_sensitive(actions.filter_btn, TRUE);
+ if(actions.cmd_entry)
+ gtk_widget_set_sensitive(actions.cmd_entry,FALSE);
+ if(actions.info_btn)
+ gtk_widget_set_sensitive(actions.info_btn,FALSE);
+}
+
+static void prefs_action_shell_radiobtn_cb(GtkWidget *widget, gpointer data)
+{
+ if(actions.filter_btn)
+ gtk_widget_set_sensitive(actions.filter_btn, FALSE);
+ if(actions.cmd_entry)
+ gtk_widget_set_sensitive(actions.cmd_entry,TRUE);
+ if(actions.info_btn)
+ gtk_widget_set_sensitive(actions.info_btn,TRUE);
+}
+
+static void prefs_action_filterbtn_cb(GtkWidget *widget, gpointer data)
+{
+ gchar *action_str, **tokens;
+ GSList *action_list = NULL, *cur;
+
+ if(modified && alertpanel(_("Entry was modified"),
+ _("Opening the filter action dialog will clear current modifications "
+ "of the command line."),
+ GTK_STOCK_CANCEL, _("+_Continue editing"), NULL) == G_ALERTDEFAULT)
+ return;
+
+ action_str = gtk_editable_get_chars(GTK_EDITABLE(actions.cmd_entry), 0, -1);
+ tokens = g_strsplit_set(action_str, "{}", 5);
+
+ if (tokens[1] && *tokens[1] != '\0') {
+ action_list = matcher_parser_get_action_list(tokens[1]);
+ if (action_list == NULL)
+ alertpanel_error(_("Action string is not valid."));
+ }
+
+ prefs_filtering_action_open(action_list, prefs_action_define_filter_done);
+
+ if (action_list != NULL) {
+ for(cur = action_list ; cur != NULL ; cur = cur->next)
+ filteringaction_free(cur->data);
+ }
+
+ g_free(action_str);
+ g_strfreev(tokens);
+}
+
+static void prefs_action_define_filter_done(GSList * action_list)
+{
+ gchar *str;
+
+ if(action_list == NULL)
+ return;
+
+ str = filteringaction_list_to_string(action_list);
+
+ if (str != NULL) {
+ gchar *cmd;
+ cmd = g_strdup_printf("%%as{%s}",str);
+ g_free(str);
+ gtk_entry_set_text(GTK_ENTRY(actions.cmd_entry), cmd);
+ g_free(cmd);
+ modified = TRUE;
+ }
+}