From ef539c50b7678a286964ee8051b4ce4127dc0837 Mon Sep 17 00:00:00 2001 From: Peter Williams Date: Tue, 23 Jul 2002 16:03:07 +0000 Subject: Also perform a search on the query_changed signal, which is what gets 2002-07-22 Peter Williams * folder-browser.c (folder_browser_gui_init): Also perform a search on the query_changed signal, which is what gets emitted when the Search menu is used. 2002-07-22 Peter Williams * e-filter-bar.c (do_advanced): Break out the code for creating the advanced rule editor into a separate function, so that... (menubar_activated): ... can also create an Advanced dialog; needed when the Search menu's advanced button is used. (option_changed): Change this to call the function instead of having all the code to itself. * e-search-bar.h: Add id's for the FIND_NOW and CLEAR actions so that other code (eg, EFilterBar) doesn't get confused by an old id being used when the search-activated signal gets emitted. * e-search-bar.c (clear_search): Set the item_id to CLEAR before emitting the signal. (search_now_verb_cb): Just make this emit query_changed, as the button in the toolbar does. svn path=/trunk/; revision=17550 --- mail/ChangeLog | 6 ++++ mail/folder-browser.c | 2 ++ widgets/misc/ChangeLog | 19 ++++++++++ widgets/misc/e-filter-bar.c | 85 +++++++++++++++++++++++++-------------------- widgets/misc/e-search-bar.c | 3 +- widgets/misc/e-search-bar.h | 5 +++ 6 files changed, 82 insertions(+), 38 deletions(-) diff --git a/mail/ChangeLog b/mail/ChangeLog index 3c83d7211f..6ac21d865c 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,9 @@ +2002-07-22 Peter Williams + + * folder-browser.c (folder_browser_gui_init): Also perform a search + on the query_changed signal, which is what gets emitted when the + Search menu is used. + 2002-07-24 Not Zed * mail-display.c (drag_data_delete_cb): use uri_list before we set diff --git a/mail/folder-browser.c b/mail/folder-browser.c index 605b33d751..53b410c9b0 100644 --- a/mail/folder-browser.c +++ b/mail/folder-browser.c @@ -2288,6 +2288,8 @@ folder_browser_gui_init (FolderBrowser *fb) GTK_SIGNAL_FUNC (folder_browser_search_menu_activated), fb); gtk_signal_connect (GTK_OBJECT (fb->search), "search_activated", GTK_SIGNAL_FUNC (folder_browser_search_do_search), fb); + gtk_signal_connect (GTK_OBJECT (fb->search), "query_changed", + GTK_SIGNAL_FUNC (folder_browser_search_do_search), fb); gtk_table_attach (GTK_TABLE (fb), GTK_WIDGET (fb->search), diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog index dab760980f..434dfb2a86 100644 --- a/widgets/misc/ChangeLog +++ b/widgets/misc/ChangeLog @@ -1,3 +1,22 @@ +2002-07-22 Peter Williams + + * e-filter-bar.c (do_advanced): Break out the code for creating + the advanced rule editor into a separate function, so that... + (menubar_activated): ... can also create an Advanced dialog; + needed when the Search menu's advanced button is used. + (option_changed): Change this to call the function instead of + having all the code to itself. + + * e-search-bar.h: Add id's for the FIND_NOW and CLEAR actions + so that other code (eg, EFilterBar) doesn't get confused by + an old id being used when the search-activated signal gets + emitted. + + * e-search-bar.c (clear_search): Set the item_id to CLEAR + before emitting the signal. + (search_now_verb_cb): Just make this emit query_changed, + as the button in the toolbar does. + 2002-07-17 Ettore Perazzoli [Fix #27854, spurious warnings from ESearchBar.] diff --git a/widgets/misc/e-filter-bar.c b/widgets/misc/e-filter-bar.c index 9863b8f294..261147d03c 100644 --- a/widgets/misc/e-filter-bar.c +++ b/widgets/misc/e-filter-bar.c @@ -131,6 +131,48 @@ rule_advanced_clicked (GtkWidget *dialog, int button, void *data) } } +static void +do_advanced (ESearchBar *esb) +{ + EFilterBar *efb = (EFilterBar *)esb; + + d(printf("Advanced search!\n")); + + if (!efb->save_dialogue && !efb->setquery) { + GtkWidget *w, *gd; + FilterRule *rule; + + if (efb->current_query) + rule = filter_rule_clone (efb->current_query); + else + rule = filter_rule_new (); + + w = filter_rule_get_widget (rule, efb->context); + filter_rule_set_source (rule, FILTER_SOURCE_INCOMING); + gd = gnome_dialog_new (_("Advanced Search"), + GNOME_STOCK_BUTTON_OK, + _("Save"), + GNOME_STOCK_BUTTON_CANCEL, + NULL); + efb->save_dialogue = gd; + gnome_dialog_set_default (GNOME_DIALOG (gd), 0); + + gtk_window_set_policy (GTK_WINDOW (gd), FALSE, TRUE, FALSE); + gtk_window_set_default_size (GTK_WINDOW (gd), 600, 300); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (gd)->vbox), w, TRUE, TRUE, 0); + gtk_widget_show (gd); + gtk_object_ref (GTK_OBJECT (rule)); + gtk_object_set_data_full (GTK_OBJECT (gd), "rule", rule, (GtkDestroyNotify)gtk_object_unref); + gtk_signal_connect (GTK_OBJECT (gd), "clicked", rule_advanced_clicked, efb); + gtk_signal_connect (GTK_OBJECT (gd), "destroy", rule_editor_destroyed, efb); + + e_search_bar_set_menu_sensitive (esb, E_FILTERBAR_SAVE_ID, FALSE); + gtk_widget_set_sensitive (esb->entry, FALSE); + + gtk_widget_show (gd); + } +} + static void menubar_activated (ESearchBar *esb, int id, void *data) { @@ -181,6 +223,9 @@ menubar_activated (ESearchBar *esb, int id, void *data) d(printf("Save menu\n")); break; + case E_FILTERBAR_ADVANCED_ID: + do_advanced (esb); + break; default: if (id >= efb->menu_base && id < efb->menu_base + efb->menu_rules->len) { GString *out = g_string_new (""); @@ -214,43 +259,9 @@ option_changed (ESearchBar *esb, void *data) d(printf("option changed, id = %d\n", id)); switch (id) { - case E_FILTERBAR_ADVANCED_ID: { - d(printf("Advanced search!\n")); - - if (!efb->save_dialogue && !efb->setquery) { - GtkWidget *w, *gd; - FilterRule *rule; - - if (efb->current_query) - rule = filter_rule_clone (efb->current_query); - else - rule = filter_rule_new (); - - w = filter_rule_get_widget (rule, efb->context); - filter_rule_set_source (rule, FILTER_SOURCE_INCOMING); - gd = gnome_dialog_new (_("Advanced Search"), - GNOME_STOCK_BUTTON_OK, - _("Save"), - GNOME_STOCK_BUTTON_CANCEL, - NULL); - efb->save_dialogue = gd; - gnome_dialog_set_default (GNOME_DIALOG (gd), 0); - - gtk_window_set_policy (GTK_WINDOW (gd), FALSE, TRUE, FALSE); - gtk_window_set_default_size (GTK_WINDOW (gd), 600, 300); - gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (gd)->vbox), w, TRUE, TRUE, 0); - gtk_widget_show (gd); - gtk_object_ref (GTK_OBJECT (rule)); - gtk_object_set_data_full (GTK_OBJECT (gd), "rule", rule, (GtkDestroyNotify)gtk_object_unref); - gtk_signal_connect (GTK_OBJECT (gd), "clicked", rule_advanced_clicked, efb); - gtk_signal_connect (GTK_OBJECT (gd), "destroy", rule_editor_destroyed, efb); - - e_search_bar_set_menu_sensitive (esb, E_FILTERBAR_SAVE_ID, FALSE); - gtk_widget_set_sensitive (esb->entry, FALSE); - - gtk_widget_show (gd); - } - } break; + case E_FILTERBAR_ADVANCED_ID: + do_advanced (esb); + break; default: if (id >= efb->option_base && id < efb->option_base + efb->option_rules->len) { efb->current_query = (FilterRule *)efb->option_rules->pdata[id - efb->option_base]; diff --git a/widgets/misc/e-search-bar.c b/widgets/misc/e-search-bar.c index 93896a1a72..8da8863d65 100644 --- a/widgets/misc/e-search-bar.c +++ b/widgets/misc/e-search-bar.c @@ -103,6 +103,7 @@ static void clear_search (ESearchBar *esb) { e_search_bar_set_text (esb, ""); + e_search_bar_set_item_id (esb, E_SEARCHBAR_CLEAR_ID); emit_search_activated (esb); } @@ -188,7 +189,7 @@ search_now_verb_cb (BonoboUIComponent *ui_component, ESearchBar *esb; esb = E_SEARCH_BAR (data); - emit_search_activated (esb); + emit_query_changed (esb); } static void diff --git a/widgets/misc/e-search-bar.h b/widgets/misc/e-search-bar.h index f50f487b8d..e7d3830735 100644 --- a/widgets/misc/e-search-bar.h +++ b/widgets/misc/e-search-bar.h @@ -102,6 +102,11 @@ struct _ESearchBarClass void (*menu_activated) (ESearchBar *search, int item); }; +enum { + E_SEARCHBAR_FIND_NOW_ID = 0, + E_SEARCHBAR_CLEAR_ID = 1 +}; + GtkType e_search_bar_get_type (void); void e_search_bar_construct (ESearchBar *search_bar, -- cgit v1.2.3