[nautilus] Remember extra pane status access windows.



commit ee3c49268205cd6fd99694706a4b2b7e3aca8086
Author: Alexander Larsson <alexl redhat com>
Date:   Thu Dec 10 13:26:28 2009 +0100

    Remember extra pane status access windows.
    
    The status of the extra pane display is remembered in a gconf key,
    analog to show/hide statusbar and other window display properties. As
    the extra-pane action implementation does a lot of widget and action
    re-ordering, this can only be done when a windows is set up
    completely, and is thus delayed in an idle-callback. If splitting the
    view is to be done on startup, the showing of the window is delayed to
    avoid ugly visible reordering.

 .../apps_nautilus_preferences.schemas.in           |   15 ++++++++++++
 libnautilus-private/nautilus-global-preferences.c  |    4 +++
 libnautilus-private/nautilus-global-preferences.h  |    1 +
 src/nautilus-actions.h                             |    1 +
 src/nautilus-navigation-window-menus.c             |   19 +++++++++++----
 src/nautilus-navigation-window.c                   |   25 ++++++++++++++++++-
 src/nautilus-navigation-window.h                   |    1 +
 src/nautilus-window-slot.c                         |    5 ++++
 src/nautilus-window.c                              |    4 ++-
 9 files changed, 67 insertions(+), 8 deletions(-)
---
diff --git a/libnautilus-private/apps_nautilus_preferences.schemas.in b/libnautilus-private/apps_nautilus_preferences.schemas.in
index 61b6436..d5b432d 100644
--- a/libnautilus-private/apps_nautilus_preferences.schemas.in
+++ b/libnautilus-private/apps_nautilus_preferences.schemas.in
@@ -1010,6 +1010,21 @@ most cases, this should be left alone. -->Sans 10</default>
     </schema>
 
     <schema>
+      <key>/schemas/apps/nautilus/preferences/start_with_extra_pane</key>
+      <applyto>/apps/nautilus/preferences/start_with_extra_pane</applyto>
+      <owner>nautilus</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+         <short>Show extra pane in new windows</short>
+         <long>
+           If set to true, newly opened windows will have the extra
+	   pane visible.
+         </long>
+      </locale>
+    </schema>
+
+    <schema>
       <key>/schemas/apps/nautilus/preferences/side_pane_view</key>
       <applyto>/apps/nautilus/preferences/side_pane_view</applyto>
       <owner>nautilus</owner>
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c
index faaab17..574ef8d 100644
--- a/libnautilus-private/nautilus-global-preferences.c
+++ b/libnautilus-private/nautilus-global-preferences.c
@@ -377,6 +377,10 @@ static const PreferenceDefault preference_defaults[] = {
 	  PREFERENCE_BOOLEAN,
 	  GINT_TO_POINTER (TRUE)
 	},
+	{ NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE,
+	  PREFERENCE_BOOLEAN,
+	  GINT_TO_POINTER (FALSE)
+	},
 	{ NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_SAVED_GEOMETRY,
 	  PREFERENCE_STRING,
 	  ""
diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h
index d9f18be..53db6ee 100644
--- a/libnautilus-private/nautilus-global-preferences.h
+++ b/libnautilus-private/nautilus-global-preferences.h
@@ -115,6 +115,7 @@ typedef enum
 #define NAUTILUS_PREFERENCES_START_WITH_STATUS_BAR		"preferences/start_with_status_bar"
 #define NAUTILUS_PREFERENCES_START_WITH_SIDEBAR		 	"preferences/start_with_sidebar"
 #define NAUTILUS_PREFERENCES_START_WITH_TOOLBAR			"preferences/start_with_toolbar"
+#define NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE              "preferences/start_with_extra_pane"
 #define NAUTILUS_PREFERENCES_SIDE_PANE_VIEW                     "preferences/side_pane_view"
 #define NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_SAVED_GEOMETRY 	"preferences/navigation_window_saved_geometry"
 #define NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_MAXIMIZED        "preferences/navigation_window_saved_maximized"
diff --git a/src/nautilus-actions.h b/src/nautilus-actions.h
index bbf9e43..202c652 100644
--- a/src/nautilus-actions.h
+++ b/src/nautilus-actions.h
@@ -37,6 +37,7 @@
 #define NAUTILUS_ACTION_SHOW_HIDE_SIDEBAR "Show Hide Sidebar"
 #define NAUTILUS_ACTION_SHOW_HIDE_STATUSBAR "Show Hide Statusbar"
 #define NAUTILUS_ACTION_SHOW_HIDE_LOCATION_BAR "Show Hide Location Bar"
+#define NAUTILUS_ACTION_SHOW_HIDE_EXTRA_PANE "Show Hide Extra Pane"
 #define NAUTILUS_ACTION_GO_TO_BURN_CD "Go to Burn CD"
 #define NAUTILUS_ACTION_GO_TO_LOCATION "Go to Location"
 #define NAUTILUS_ACTION_GO_HOME "Home"
diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index 37f5a75..07f6ada 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -244,13 +244,17 @@ action_split_view_callback (GtkAction *action,
 			    gpointer user_data)
 {
 	NautilusNavigationWindow *window;
+	gboolean is_active;
 
 	window = NAUTILUS_NAVIGATION_WINDOW (user_data);
 
-	if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
-		nautilus_navigation_window_split_view_on (window);
-	} else {
-		nautilus_navigation_window_split_view_off (window);
+	is_active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+	if (is_active != nautilus_navigation_window_split_view_showing (window)) {
+		if (is_active) {
+			nautilus_navigation_window_split_view_on (window);
+		} else {
+			nautilus_navigation_window_split_view_off (window);
+		}
 	}
 }
 
@@ -280,6 +284,11 @@ nautilus_navigation_window_update_show_hide_menu_items (NautilusNavigationWindow
 					      NAUTILUS_ACTION_SHOW_HIDE_STATUSBAR);
 	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
 				      nautilus_navigation_window_status_bar_showing (window));
+
+	action = gtk_action_group_get_action (window->details->navigation_action_group,
+					      NAUTILUS_ACTION_SHOW_HIDE_EXTRA_PANE);
+	gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+				      nautilus_navigation_window_split_view_showing (window));
 }
 
 void
@@ -1041,7 +1050,7 @@ static const GtkToggleActionEntry navigation_toggle_entries[] = {
   /* tooltip */              N_("Search documents and folders by name"),
                              G_CALLBACK (action_show_hide_search_callback),
   /* is_active */            FALSE },
-  /* name, stock id */     { "Show Hide Extra Pane", NULL,
+  /* name, stock id */     { NAUTILUS_ACTION_SHOW_HIDE_EXTRA_PANE, NULL,
   /* label, accelerator */   N_("Extra Pane"), "F3",
   /* tooltip */              N_("Open an extra folder view side-by-side"),
                              G_CALLBACK (action_split_view_callback),
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 19afbf0..3e7c0cd 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -1060,8 +1060,6 @@ nautilus_navigation_window_get_base_page_index (NautilusNavigationWindow *window
 	return forward_count;
 }
 
-
-
 /**
  * nautilus_navigation_window_show:
  * @widget: a #GtkWidget.
@@ -1118,6 +1116,10 @@ nautilus_navigation_window_show (GtkWidget *widget)
 		nautilus_navigation_window_hide_status_bar (window);
 	}
 
+	if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE)) {
+		nautilus_navigation_window_split_view_on (window);
+	}
+
 	GTK_WIDGET_CLASS (parent_class)->show (widget);
 }
 
@@ -1311,6 +1313,12 @@ nautilus_navigation_window_split_view_on (NautilusNavigationWindow *window)
 	/* listen when view is finally added */
 	g_signal_connect_object (GTK_CONTAINER (NAUTILUS_WINDOW_PANE (pane)->active_slot->view_box), "add",
 				 G_CALLBACK (split_view_added_to_container_callback), pane, 0);
+
+	/* remember in gconf */
+	if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE) &&
+	    !eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE)) {
+		eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE, TRUE);
+	}
 }
 
 void
@@ -1334,4 +1342,17 @@ nautilus_navigation_window_split_view_off (NautilusNavigationWindow *window)
 			nautilus_window_close_pane (pane);
 		}
 	}
+
+	nautilus_navigation_window_update_show_hide_menu_items (window);
+	/* remember in gconf */
+	if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE) &&
+	    eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE)) {
+		eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_EXTRA_PANE, FALSE);
+	}
+}
+
+gboolean
+nautilus_navigation_window_split_view_showing (NautilusNavigationWindow *window)
+{
+	return g_list_length (NAUTILUS_WINDOW (window)->details->panes) > 1;
 }
diff --git a/src/nautilus-navigation-window.h b/src/nautilus-navigation-window.h
index b96198b..643d38f 100644
--- a/src/nautilus-navigation-window.h
+++ b/src/nautilus-navigation-window.h
@@ -108,5 +108,6 @@ void     nautilus_navigation_window_set_search_button	 (NautilusNavigationWindow
 void     nautilus_navigation_window_restore_focus_widget (NautilusNavigationWindow *window);
 void     nautilus_navigation_window_split_view_on        (NautilusNavigationWindow *window);
 void     nautilus_navigation_window_split_view_off       (NautilusNavigationWindow *window);
+gboolean nautilus_navigation_window_split_view_showing   (NautilusNavigationWindow *window);
 
 #endif
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index f0b1580..e6179c6 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -404,6 +404,11 @@ nautilus_window_slot_is_in_active_pane (NautilusWindowSlot *slot,
 		return;
 	}
 
+	/* it may also be that the content is not a valid directory view during init */
+	if (!FM_IS_DIRECTORY_VIEW (slot->content_view)) {
+		return;
+	}
+
 	bg = EEL_BACKGROUND (fm_directory_view_get_background (FM_DIRECTORY_VIEW (slot->content_view)));
 	g_return_if_fail (EEL_IS_BACKGROUND (bg));
 
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 4407e6f..6df1ecb 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1530,7 +1530,9 @@ nautilus_window_next_pane_is_writable (NautilusWindow *window)
 		return FALSE;
 	}
 
-	g_return_val_if_fail(FM_IS_DIRECTORY_VIEW (next_pane->active_slot->content_view), FALSE);	
+	if (next_pane->active_slot->content_view == NULL) {
+		return FALSE;
+	}
 
 	return !fm_directory_view_is_read_only (FM_DIRECTORY_VIEW (next_pane->active_slot->content_view));
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]