diff options
author | Andy Hertzfeld <andy@src.gnome.org> | 2001-01-12 23:41:23 +0000 |
---|---|---|
committer | Andy Hertzfeld <andy@src.gnome.org> | 2001-01-12 23:41:23 +0000 |
commit | 9bbbc2805d55f8c8e31172785e8e974ddaddb22d (patch) | |
tree | 8ec67bde0d28340167f3599b09ec71adef68392e | |
parent | 261da07b3af9c48e61620e81dfae27a9036a68b0 (diff) | |
download | nautilus-9bbbc2805d55f8c8e31172785e8e974ddaddb22d.tar.gz |
fixed bug 5198, removing an active sidebar panel messes up the remaining
fixed bug 5198, removing an active sidebar panel messes up the
remaining ones . I had already fixed this but missed the case
when multiple windows were open. Fixed by adding a sidebar call to
close the active panel if it matches a passed-in id, and used that in
nautilus window to close the panel if necessary before destroying it.
* src/nautilus-sidebar.c:
(nautilus_sidebar_hide_active_panel_if_matches),
(toggle_sidebar_panel):
added routine to close the active panel if it matches a passed-in
id.
* src/nautilus-sidebar.h:
added above mentioned routine
* src/nautilus-window-manage-views.c: (handle_view_failure),
(nautilus_window_set_sidebar_panels):
close the active panel if necessary before destroying it.
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | src/nautilus-information-panel.c | 15 | ||||
-rw-r--r-- | src/nautilus-information-panel.h | 3 | ||||
-rw-r--r-- | src/nautilus-sidebar.c | 15 | ||||
-rw-r--r-- | src/nautilus-sidebar.h | 3 | ||||
-rw-r--r-- | src/nautilus-window-manage-views.c | 8 |
6 files changed, 55 insertions, 9 deletions
@@ -1,3 +1,23 @@ +2001-01-12 Andy Hertzfeld <andy@eazel.com> + + fixed bug 5198, removing an active sidebar panel messes up the + remaining ones . I had already fixed this but missed the case + when multiple windows were open. Fixed by adding a sidebar call to + close the active panel if it matches a passed-in id, and used that in + nautilus window to close the panel if necessary before destroying it. + + * src/nautilus-sidebar.c: + (nautilus_sidebar_hide_active_panel_if_matches), + (toggle_sidebar_panel): + added routine to close the active panel if it matches a passed-in + id. + * src/nautilus-sidebar.h: + added above mentioned routine + + * src/nautilus-window-manage-views.c: (handle_view_failure), + (nautilus_window_set_sidebar_panels): + close the active panel if necessary before destroying it. + 2001-01-12 John Sullivan <sullivan@eazel.com> Fixed the corner of bug 3405 that valiant bug verifier Brett diff --git a/src/nautilus-information-panel.c b/src/nautilus-information-panel.c index 0cea000c5..f8c95bc7c 100644 --- a/src/nautilus-information-panel.c +++ b/src/nautilus-information-panel.c @@ -363,6 +363,15 @@ nautilus_sidebar_active_panel_matches_id (NautilusSidebar *sidebar, const char * return nautilus_strcmp (current_iid, id) == 0; } +/* if the active panel matches the passed in id, hide it. */ +void +nautilus_sidebar_hide_active_panel_if_matches (NautilusSidebar *sidebar, const char *sidebar_id) +{ + if (nautilus_sidebar_active_panel_matches_id (sidebar, sidebar_id)) { + nautilus_sidebar_deactivate_panel (sidebar); + } +} + /* callback for sidebar panel menu items to toggle their visibility */ static void toggle_sidebar_panel (GtkWidget *widget, char *sidebar_id) @@ -372,10 +381,8 @@ toggle_sidebar_panel (GtkWidget *widget, char *sidebar_id) sidebar = NAUTILUS_SIDEBAR (gtk_object_get_user_data (GTK_OBJECT (widget))); - if (nautilus_sidebar_active_panel_matches_id (sidebar, sidebar_id)) { - nautilus_sidebar_deactivate_panel (sidebar); - } - + nautilus_sidebar_hide_active_panel_if_matches (sidebar, sidebar_id); + key = nautilus_sidebar_get_sidebar_panel_key (sidebar_id); nautilus_preferences_set_boolean (key, !nautilus_preferences_get_boolean (key, FALSE)); g_free (key); diff --git a/src/nautilus-information-panel.h b/src/nautilus-information-panel.h index d7ba21f0a..4d0a3ae90 100644 --- a/src/nautilus-information-panel.h +++ b/src/nautilus-information-panel.h @@ -62,6 +62,9 @@ void nautilus_sidebar_add_panel (NautilusSidebar *sidebar, NautilusViewFrame *panel); GtkWidget *nautilus_sidebar_create_context_menu (NautilusSidebar *sidebar); +void nautilus_sidebar_hide_active_panel_if_matches (NautilusSidebar *sidebar, + const char *sidebar_id); + void nautilus_sidebar_remove_panel (NautilusSidebar *sidebar, NautilusViewFrame *panel); void nautilus_sidebar_set_uri (NautilusSidebar *sidebar, diff --git a/src/nautilus-sidebar.c b/src/nautilus-sidebar.c index 0cea000c5..f8c95bc7c 100644 --- a/src/nautilus-sidebar.c +++ b/src/nautilus-sidebar.c @@ -363,6 +363,15 @@ nautilus_sidebar_active_panel_matches_id (NautilusSidebar *sidebar, const char * return nautilus_strcmp (current_iid, id) == 0; } +/* if the active panel matches the passed in id, hide it. */ +void +nautilus_sidebar_hide_active_panel_if_matches (NautilusSidebar *sidebar, const char *sidebar_id) +{ + if (nautilus_sidebar_active_panel_matches_id (sidebar, sidebar_id)) { + nautilus_sidebar_deactivate_panel (sidebar); + } +} + /* callback for sidebar panel menu items to toggle their visibility */ static void toggle_sidebar_panel (GtkWidget *widget, char *sidebar_id) @@ -372,10 +381,8 @@ toggle_sidebar_panel (GtkWidget *widget, char *sidebar_id) sidebar = NAUTILUS_SIDEBAR (gtk_object_get_user_data (GTK_OBJECT (widget))); - if (nautilus_sidebar_active_panel_matches_id (sidebar, sidebar_id)) { - nautilus_sidebar_deactivate_panel (sidebar); - } - + nautilus_sidebar_hide_active_panel_if_matches (sidebar, sidebar_id); + key = nautilus_sidebar_get_sidebar_panel_key (sidebar_id); nautilus_preferences_set_boolean (key, !nautilus_preferences_get_boolean (key, FALSE)); g_free (key); diff --git a/src/nautilus-sidebar.h b/src/nautilus-sidebar.h index d7ba21f0a..4d0a3ae90 100644 --- a/src/nautilus-sidebar.h +++ b/src/nautilus-sidebar.h @@ -62,6 +62,9 @@ void nautilus_sidebar_add_panel (NautilusSidebar *sidebar, NautilusViewFrame *panel); GtkWidget *nautilus_sidebar_create_context_menu (NautilusSidebar *sidebar); +void nautilus_sidebar_hide_active_panel_if_matches (NautilusSidebar *sidebar, + const char *sidebar_id); + void nautilus_sidebar_remove_panel (NautilusSidebar *sidebar, NautilusViewFrame *panel); void nautilus_sidebar_set_uri (NautilusSidebar *sidebar, diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c index 733085a09..9fbc8af42 100644 --- a/src/nautilus-window-manage-views.c +++ b/src/nautilus-window-manage-views.c @@ -890,9 +890,12 @@ static void handle_view_failure (NautilusWindow *window, NautilusViewFrame *view) { + const char* current_iid; if (view_frame_is_sidebar_panel (view)) { report_sidebar_panel_failure_to_user (window, view); - disconnect_view_and_destroy (window, view); + current_iid = nautilus_view_frame_get_iid (view); + nautilus_sidebar_hide_active_panel_if_matches (window->sidebar, current_iid); + disconnect_view_and_destroy (window, view); nautilus_window_remove_sidebar_panel (window, view); } else { if (view == window->content_view) { @@ -1531,6 +1534,7 @@ nautilus_window_set_sidebar_panels (NautilusWindow *window, GList *node, *next, *found_node; NautilusViewFrame *sidebar_panel; NautilusViewIdentifier *identifier; + const char *current_iid; gboolean load_succeeded; g_return_if_fail (NAUTILUS_IS_WINDOW (window)); @@ -1548,6 +1552,8 @@ nautilus_window_set_sidebar_panels (NautilusWindow *window, (char *) nautilus_view_frame_get_iid (sidebar_panel), compare_view_identifier_with_iid); if (found_node == NULL) { + current_iid = nautilus_view_frame_get_iid (sidebar_panel); + nautilus_sidebar_hide_active_panel_if_matches (window->sidebar, current_iid); disconnect_view_and_destroy (window, sidebar_panel); nautilus_window_remove_sidebar_panel (window, sidebar_panel); } else { |