aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/misc/ChangeLog10
-rw-r--r--widgets/misc/e-search-bar.c67
-rw-r--r--widgets/misc/e-search-bar.h7
3 files changed, 68 insertions, 16 deletions
diff --git a/widgets/misc/ChangeLog b/widgets/misc/ChangeLog
index 04a1273f32..207ac511e7 100644
--- a/widgets/misc/ChangeLog
+++ b/widgets/misc/ChangeLog
@@ -1,3 +1,13 @@
+2001-02-24 Not Zed <NotZed@Ximian.com>
+
+ * e-search-bar.c (add_dropdown): Move the event box into the
+ esb->dropdown_holder. Changed so it can be called again on the
+ same esb, to rebuild the menu.
+ (e_search_bar_set_menu): New function to (re)set the menu.
+ (add_option): Setup so it can be re-called to rebuild the option
+ list.
+ (e_search_bar_set_option): New function to build the menu's.
+
2001-02-05 Jeffrey Stedfast <fejj@ximian.com>
* .cvsignore: Ignore test-dropdown-button
diff --git a/widgets/misc/e-search-bar.c b/widgets/misc/e-search-bar.c
index 1e5c4f2c8e..c1d69161c6 100644
--- a/widgets/misc/e-search-bar.c
+++ b/widgets/misc/e-search-bar.c
@@ -110,7 +110,7 @@ add_dropdown (ESearchBar *esb,
ESearchBarItem *items)
{
GtkWidget *menu;
- GtkWidget *event_box;
+ GtkWidget *dropdown;
int i;
menu = gtk_menu_new ();
@@ -132,19 +132,29 @@ add_dropdown (ESearchBar *esb,
}
gtk_widget_show_all (menu);
- esb->dropdown = e_dropdown_button_new (_("Sear_ch"), GTK_MENU (menu));
- GTK_WIDGET_UNSET_FLAGS (esb->dropdown, GTK_CAN_FOCUS);
- gtk_widget_show (esb->dropdown);
+ dropdown = e_dropdown_button_new (_("Sear_ch"), GTK_MENU (menu));
+ GTK_WIDGET_UNSET_FLAGS (dropdown, GTK_CAN_FOCUS);
+ gtk_widget_show (dropdown);
- /* So, GtkOptionMenu is stupid; it adds a 1-pixel-wide empty border
- around the button for no reason. So we add a 1-pixel-wide border
- around the button as well, by using an event box. */
- event_box = gtk_event_box_new ();
- gtk_container_set_border_width (GTK_CONTAINER (event_box), 1);
- gtk_container_add (GTK_CONTAINER (event_box), esb->dropdown);
- gtk_widget_show (event_box);
+ if (esb->dropdown_holder == NULL) {
- gtk_box_pack_start(GTK_BOX(esb), event_box, FALSE, FALSE, 0);
+ /* So, GtkOptionMenu is stupid; it adds a 1-pixel-wide empty border
+ around the button for no reason. So we add a 1-pixel-wide border
+ around the button as well, by using an event box. */
+
+ esb->dropdown_holder = gtk_event_box_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (esb->dropdown_holder), 1);
+ esb->dropdown = dropdown;
+ gtk_container_add (GTK_CONTAINER (esb->dropdown_holder), esb->dropdown);
+ gtk_widget_show (esb->dropdown_holder);
+
+ gtk_box_pack_start(GTK_BOX(esb), esb->dropdown_holder, FALSE, FALSE, 0);
+ } else {
+ gtk_container_remove(GTK_CONTAINER(esb->dropdown_holder), esb->dropdown);
+ gtk_widget_destroy(esb->dropdown);
+ esb->dropdown = dropdown;
+ gtk_container_add (GTK_CONTAINER (esb->dropdown_holder), esb->dropdown);
+ }
}
static void
@@ -155,11 +165,16 @@ add_option(ESearchBar *esb, ESearchBarItem *items)
GtkRequisition option_requisition;
int i;
- esb->option = gtk_option_menu_new();
- gtk_widget_show(esb->option);
- gtk_box_pack_start(GTK_BOX(esb), esb->option, FALSE, FALSE, 0);
+ if (esb->option) {
+ gtk_option_menu_remove_menu((GtkOptionMenu *)esb->option);
+ gtk_widget_destroy(esb->menu);
+ } else {
+ esb->option = gtk_option_menu_new();
+ gtk_widget_show(esb->option);
+ gtk_box_pack_start(GTK_BOX(esb), esb->option, FALSE, FALSE, 0);
+ }
- menu = gtk_menu_new ();
+ esb->menu = menu = gtk_menu_new ();
for (i = 0; items[i].id != -1; i++) {
GtkWidget *item;
@@ -339,6 +354,26 @@ e_search_bar_construct (ESearchBar *search_bar,
add_spacer (search_bar);
}
+void
+e_search_bar_set_menu(ESearchBar *search_bar, ESearchBarItem *menu_items)
+{
+ g_return_if_fail (search_bar != NULL);
+ g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
+ g_return_if_fail (menu_items != NULL);
+
+ add_dropdown (search_bar, menu_items);
+}
+
+void
+e_search_bar_set_option(ESearchBar *search_bar, ESearchBarItem *option_items)
+{
+ g_return_if_fail (search_bar != NULL);
+ g_return_if_fail (E_IS_SEARCH_BAR (search_bar));
+ g_return_if_fail (option_items != NULL);
+
+ add_option (search_bar, option_items);
+}
+
GtkWidget *
e_search_bar_new (ESearchBarItem *menu_items,
ESearchBarItem *option_items)
diff --git a/widgets/misc/e-search-bar.h b/widgets/misc/e-search-bar.h
index 402de319f7..222501d2fe 100644
--- a/widgets/misc/e-search-bar.h
+++ b/widgets/misc/e-search-bar.h
@@ -60,6 +60,11 @@ struct _ESearchBar
GtkWidget *dropdown;
GtkWidget *option;
GtkWidget *entry;
+
+ /* PRIVATE */
+ GtkWidget *dropdown_holder; /* holds the dropdown */
+ GtkWidget *menu;
+
int option_choice;
};
@@ -73,6 +78,8 @@ struct _ESearchBarClass
GtkType e_search_bar_get_type (void);
+void e_search_bar_set_menu (ESearchBar *search_bar, ESearchBarItem *menu_items);
+void e_search_bar_set_option (ESearchBar *search_bar, ESearchBarItem *option_items);
void e_search_bar_construct (ESearchBar *search_bar,
ESearchBarItem *menu_items,
ESearchBarItem *option_items);