summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hertzfeld <andy@src.gnome.org>2001-01-12 23:41:23 +0000
committerAndy Hertzfeld <andy@src.gnome.org>2001-01-12 23:41:23 +0000
commit9bbbc2805d55f8c8e31172785e8e974ddaddb22d (patch)
tree8ec67bde0d28340167f3599b09ec71adef68392e
parent261da07b3af9c48e61620e81dfae27a9036a68b0 (diff)
downloadnautilus-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--ChangeLog20
-rw-r--r--src/nautilus-information-panel.c15
-rw-r--r--src/nautilus-information-panel.h3
-rw-r--r--src/nautilus-sidebar.c15
-rw-r--r--src/nautilus-sidebar.h3
-rw-r--r--src/nautilus-window-manage-views.c8
6 files changed, 55 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index c84d95f6f..1978fce3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 {