aboutsummaryrefslogtreecommitdiffstats
path: root/filter/filter-filter.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/filter-filter.c')
-rw-r--r--filter/filter-filter.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/filter/filter-filter.c b/filter/filter-filter.c
index 12d7af2f19..145f5f6d92 100644
--- a/filter/filter-filter.c
+++ b/filter/filter-filter.c
@@ -2,7 +2,7 @@
* Copyright (C) 2000 Helix Code Inc.
*
* Authors: Not Zed <notzed@lostzed.mmc.com.au>
- * Jeffrey Stedfasr <fejj@helixcode.com>
+ * Jeffrey Stedfast <fejj@helixcode.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
@@ -150,7 +150,7 @@ void
filter_filter_replace_action (FilterFilter *fr, FilterPart *fp, FilterPart *new)
{
GList *l;
-
+
l = g_list_find (fr->actions, fp);
if (l) {
l->data = new;
@@ -336,7 +336,7 @@ struct _rule_data {
};
static void
-less_parts (GtkWidget *widget, struct _rule_data *data)
+less_parts (GtkWidget *button, struct _rule_data *data)
{
GList *l;
FilterPart *part;
@@ -356,10 +356,14 @@ less_parts (GtkWidget *widget, struct _rule_data *data)
l = g_list_last (GTK_BOX (data->parts)->children);
w = ((GtkBoxChild *) l->data)->widget;
gtk_container_remove (GTK_CONTAINER (data->parts), w);
+
+ /* if there's only 1 action, we can't remove anymore so set insensitive */
+ if (g_list_length (((FilterFilter *)data->fr)->actions) == 1)
+ gtk_widget_set_sensitive (button, FALSE);
}
static void
-more_parts (GtkWidget *widget, struct _rule_data *data)
+more_parts (GtkWidget *button, struct _rule_data *data)
{
FilterPart *new;
GtkWidget *w;
@@ -372,6 +376,10 @@ more_parts (GtkWidget *widget, struct _rule_data *data)
w = get_rule_part_widget (data->f, new, data->fr);
gtk_box_pack_start (GTK_BOX (data->parts), w, FALSE, FALSE, 0);
}
+
+ /* set the "Remove action" button sensitive */
+ w = gtk_object_get_data (GTK_OBJECT (button), "remove");
+ gtk_widget_set_sensitive (w, TRUE);
}
static GtkWidget *
@@ -380,7 +388,7 @@ get_widget (FilterRule *fr, struct _RuleContext *f)
GtkWidget *widget;
GtkWidget *parts, *inframe;
GtkWidget *hbox;
- GtkWidget *button, *pixmap;
+ GtkWidget *add, *remove, *pixmap;
GtkWidget *w;
GtkWidget *frame;
GtkWidget *scrolledwindow;
@@ -406,16 +414,21 @@ get_widget (FilterRule *fr, struct _RuleContext *f)
hbox = gtk_hbox_new (FALSE, 3);
pixmap = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_ADD);
- button = gnome_pixmap_button (pixmap, _("Add action"));
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
- gtk_signal_connect (GTK_OBJECT (button), "clicked", more_parts, data);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 3);
+ add = gnome_pixmap_button (pixmap, _("Add action"));
+ gtk_button_set_relief (GTK_BUTTON (add), GTK_RELIEF_NONE);
+ gtk_signal_connect (GTK_OBJECT (add), "clicked", more_parts, data);
+ gtk_box_pack_start (GTK_BOX (hbox), add, FALSE, FALSE, 3);
pixmap = gnome_stock_new_with_icon (GNOME_STOCK_PIXMAP_REMOVE);
- button = gnome_pixmap_button (pixmap, _("Remove action"));
- gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
- gtk_signal_connect (GTK_OBJECT (button), "clicked", less_parts, data);
- gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 3);
+ remove = gnome_pixmap_button (pixmap, _("Remove action"));
+ gtk_object_set_data (GTK_OBJECT (add), "remove", remove);
+ gtk_button_set_relief (GTK_BUTTON (remove), GTK_RELIEF_NONE);
+ gtk_signal_connect (GTK_OBJECT (remove), "clicked", less_parts, data);
+ gtk_box_pack_start (GTK_BOX (hbox), remove, FALSE, FALSE, 3);
+
+ /* if we only have 1 action, then we can't remove any more so disable this */
+ if (g_list_length (ff->actions) == 1)
+ gtk_widget_set_sensitive (remove, FALSE);
gtk_box_pack_start (GTK_BOX (inframe), hbox, FALSE, FALSE, 3);