[nautilus] Remember extra pane status access windows.
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus] Remember extra pane status access windows.
- Date: Thu, 10 Dec 2009 17:16:23 +0000 (UTC)
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]