From f54327b748170a6e771dc0cd87eff918d7f64b2d Mon Sep 17 00:00:00 2001 From: Jeffrey Stedfast Date: Wed, 10 Jan 2001 05:44:23 +0000 Subject: Attach to the "activate" signal - this should now make it so that a 2001-01-10 Jeffrey Stedfast * filter-option.c (get_widget): Attach to the "activate" signal - this should now make it so that a filter-option will "remember" what a user changed. * filter-system-flag.c (get_widget): Don't reset fsf->value to the first system flag, this should already be defaulted to the appropriate flag. This should fix the problem of always defaulting to the first menu option and thus "forgetting" the user's settings. svn path=/trunk/; revision=7356 --- filter/ChangeLog | 11 +++++++++++ filter/filter-option.c | 19 ++++++++++++++++++- filter/filter-system-flag.c | 24 +++++++++++++++++------- filter/filtertypes.xml | 2 +- filter/libfilter-i18n.h | 36 ++++++++++++++++++------------------ 5 files changed, 65 insertions(+), 27 deletions(-) (limited to 'filter') diff --git a/filter/ChangeLog b/filter/ChangeLog index a1b483dc4a..dfc3602574 100644 --- a/filter/ChangeLog +++ b/filter/ChangeLog @@ -1,3 +1,14 @@ +2001-01-10 Jeffrey Stedfast + + * filter-option.c (get_widget): Attach to the "activate" signal - + this should now make it so that a filter-option will "remember" + what a user changed. + + * filter-system-flag.c (get_widget): Don't reset fsf->value to the + first system flag, this should already be defaulted to the + appropriate flag. This should fix the problem of always defaulting + to the first menu option and thus "forgetting" the user's settings. + 2001-01-04 Jeffrey Stedfast * filter-system-flag.c: comment out some of the system flags as we diff --git a/filter/filter-option.c b/filter/filter-option.c index 658136f0cb..3b3660dd5c 100644 --- a/filter/filter-option.c +++ b/filter/filter-option.c @@ -239,6 +239,14 @@ xml_decode (FilterElement *fe, xmlNodePtr node) return 0; } +static void +option_changed (GtkWidget *widget, FilterElement *fe) +{ + FilterOption *fo = (FilterOption *)fe; + + fo->current = gtk_object_get_data (GTK_OBJECT (widget), "option"); +} + static GtkWidget * get_widget (FilterElement *fe) { @@ -246,6 +254,7 @@ get_widget (FilterElement *fe) GtkWidget *menu; GtkWidget *omenu; GtkWidget *item; + GtkWidget *first = NULL; GList *l = fo->options; struct _filter_option *op; int index = 0, current = 0; @@ -253,12 +262,16 @@ get_widget (FilterElement *fe) menu = gtk_menu_new (); while (l) { op = l->data; - item = gtk_menu_item_new_with_label (_(op->title)); + item = gtk_menu_item_new_with_label (op->title); gtk_object_set_data (GTK_OBJECT (item), "option", op); + gtk_signal_connect (GTK_OBJECT (item), "activate", option_changed, fe); gtk_menu_append (GTK_MENU (menu), item); gtk_widget_show (item); if (op == fo->current) { current = index; + first = item; + } else if (!first) { + first = item; } l = g_list_next (l); @@ -267,6 +280,10 @@ get_widget (FilterElement *fe) omenu = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu); + + if (first) + gtk_signal_emit_by_name (GTK_OBJECT (first), "activate", fe); + gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), current); return omenu; diff --git a/filter/filter-system-flag.c b/filter/filter-system-flag.c index f1eb2a5b10..3667876e23 100644 --- a/filter/filter-system-flag.c +++ b/filter/filter-system-flag.c @@ -69,12 +69,12 @@ struct _system_flag { }; static struct _system_flag * -find_option (const char *name) +find_option (const char *value) { struct _system_flag *flag; for (flag = system_flags; flag->title; flag++) { - if (!g_strcasecmp (name, flag->value)) + if (!g_strcasecmp (value, flag->value)) return flag; } @@ -215,26 +215,36 @@ static GtkWidget * get_widget (FilterElement *fe) { FilterSystemFlag *fsf = (FilterSystemFlag *) fe; - GtkWidget *omenu, *menu, *item; + GtkWidget *omenu, *menu, *item, *first = NULL; struct _system_flag *flag; int index = 0, current = 0; - fsf->value = system_flags[0].value; - menu = gtk_menu_new (); for (flag = system_flags; flag->title; flag++) { item = gtk_menu_item_new_with_label (flag->title); gtk_object_set_data (GTK_OBJECT (item), "flag", flag); - gtk_signal_connect (GTK_OBJECT (item), "select", item_selected, fe); + gtk_signal_connect (GTK_OBJECT (item), "activate", item_selected, fe); + gtk_menu_append (GTK_MENU (menu), item); + gtk_widget_show (item); - if (!strcmp (fsf->value, flag->value)) + + if (fsf->value && !g_strcasecmp (fsf->value, flag->value)) { current = index; + first = item; + } else if (!first) { + first = item; + } + index++; } omenu = gtk_option_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (omenu), menu); + + if (first) + gtk_signal_emit_by_name (GTK_OBJECT (first), "activate", fe); + gtk_option_menu_set_history (GTK_OPTION_MENU (omenu), current); return omenu; diff --git a/filter/filtertypes.xml b/filter/filtertypes.xml index 0eb9ca242d..e0837cf09e 100644 --- a/filter/filtertypes.xml +++ b/filter/filtertypes.xml @@ -423,7 +423,7 @@ (match-all (system-flag ${flag})) -