From 251a18b6c2aae59864d661589accbe0f12f56342 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Tue, 8 May 2007 20:37:45 +0100 Subject: Clean up properly when switching between modes Stop and clean up the models attached to the search and recent files operation modes when switching between them and the browse mode. Signed-off-by: Emmanuele Bassi --- gtk/gtkfilechooserdefault.c | 44 +++++++++++++++++++++++++++++++++++++++++- 1 files changed, 42 insertions(+), 2 deletions(-) diff --git a/gtk/gtkfilechooserdefault.c b/gtk/gtkfilechooserdefault.c index 825ddf0..de6282e 100644 --- a/gtk/gtkfilechooserdefault.c +++ b/gtk/gtkfilechooserdefault.c @@ -9025,19 +9025,37 @@ search_setup_widgets (GtkFileChooserDefault *impl) static void search_activate (GtkFileChooserDefault *impl) { + OperationMode previous_mode; + if (impl->operation_mode == OPERATION_MODE_SEARCH) { gtk_widget_grab_focus (impl->search_entry); return; } + previous_mode = impl->operation_mode; impl->operation_mode = OPERATION_MODE_SEARCH; + switch (previous_mode) + { + case OPERATION_MODE_RECENT: + recent_stop_loading (impl); + recent_clear_model (impl, TRUE); + break; + + case OPERATION_MODE_BROWSE: + stop_loading_and_clear_list_model (impl); + break; + + case OPERATION_MODE_SEARCH: + g_assert_not_reached (); + break; + } + g_assert (impl->search_hbox == NULL); g_assert (impl->search_entry == NULL); g_assert (impl->search_model == NULL); - stop_loading_and_clear_list_model (impl); search_setup_widgets (impl); file_list_set_sort_column_ids (impl); } @@ -9453,12 +9471,34 @@ recent_hide_entry (GtkFileChooserDefault *impl) static void recent_activate (GtkFileChooserDefault *impl) { + OperationMode previous_mode; + if (impl->operation_mode == OPERATION_MODE_RECENT) return; + previous_mode = impl->operation_mode; impl->operation_mode = OPERATION_MODE_RECENT; - stop_loading_and_clear_list_model (impl); + switch (previous_mode) + { + case OPERATION_MODE_SEARCH: + search_stop_searching (impl, FALSE); + search_clear_model (impl, TRUE); + + gtk_widget_destroy (impl->search_hbox); + impl->search_hbox = NULL; + impl->search_entry = NULL; + break; + + case OPERATION_MODE_BROWSE: + stop_loading_and_clear_list_model (impl); + break; + + case OPERATION_MODE_RECENT: + g_assert_not_reached (); + break; + } + recent_hide_entry (impl); file_list_set_sort_column_ids (impl); recent_start_loading (impl); -- 1.4.4.2