From 8cf25a3fc9a08d2bceaaaccb82b4d8fd72b80e4b Mon Sep 17 00:00:00 2001 From: Christian Neumair Date: Fri, 30 May 2008 20:46:51 +0000 Subject: Make "New Tab" appear above "New Window" menu items. Add GConf keys for 2008-05-30 Christian Neumair * libnautilus-private/apps_nautilus_preferences.schemas.in: * libnautilus-private/nautilus-global-preferences.c (global_preferences_register_enumerations): * libnautilus-private/nautilus-global-preferences.h: * src/file-manager/fm-directory-view.c (open_one_in_new_tab), (real_update_menus): * src/file-manager/fm-icon-view.c (icon_container_activate_alternate_callback): * src/file-manager/nautilus-directory-view-ui.xml: * src/nautilus-actions.h: * src/nautilus-navigation-window-menus.c (nautilus_navigation_window_update_tab_menu_item_visibility), (action_new_tab_callback), (nautilus_navigation_window_initialize_menus): * src/nautilus-navigation-window-ui.xml: * src/nautilus-navigation-window.c (nautilus_navigation_window_init), (enable_tabs_changed): * src/nautilus-window-manage-views.c (nautilus_window_slot_open_location_full): * src/nautilus-window-private.h: Make "New Tab" appear above "New Window" menu items. Add GConf keys for enabling tab support, and for determining whether a tab should be opened after the current tab, or at the end. Show/hide tab widgets depending on the preferences. svn path=/branches/multiview/; revision=14210 --- ChangeLog | 27 +++++++++++++++++ .../apps_nautilus_preferences.schemas.in | 30 +++++++++++++++++++ libnautilus-private/nautilus-global-preferences.c | 18 ++++++++++++ libnautilus-private/nautilus-global-preferences.h | 8 +++++ src/file-manager/fm-directory-view.c | 7 ++++- src/file-manager/fm-icon-view.c | 2 +- src/file-manager/nautilus-directory-view-ui.xml | 2 +- src/nautilus-actions.h | 2 ++ src/nautilus-navigation-window-menus.c | 34 +++++++++++++++++++++- src/nautilus-navigation-window-ui.xml | 2 +- src/nautilus-navigation-window.c | 15 ++++++++++ src/nautilus-window-manage-views.c | 12 +++++++- src/nautilus-window-private.h | 1 + 13 files changed, 154 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee55bc65f..c5e7d7a2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +2008-05-30 Christian Neumair + + * libnautilus-private/apps_nautilus_preferences.schemas.in: + * libnautilus-private/nautilus-global-preferences.c + (global_preferences_register_enumerations): + * libnautilus-private/nautilus-global-preferences.h: + * src/file-manager/fm-directory-view.c (open_one_in_new_tab), + (real_update_menus): + * src/file-manager/fm-icon-view.c + (icon_container_activate_alternate_callback): + * src/file-manager/nautilus-directory-view-ui.xml: + * src/nautilus-actions.h: + * src/nautilus-navigation-window-menus.c + (nautilus_navigation_window_update_tab_menu_item_visibility), + (action_new_tab_callback), + (nautilus_navigation_window_initialize_menus): + * src/nautilus-navigation-window-ui.xml: + * src/nautilus-navigation-window.c + (nautilus_navigation_window_init), (enable_tabs_changed): + * src/nautilus-window-manage-views.c + (nautilus_window_slot_open_location_full): + * src/nautilus-window-private.h: + Make "New Tab" appear above "New Window" menu items. + Add GConf keys for enabling tab support, and for determining + whether a tab should be opened after the current tab, or at the end. + Show/hide tab widgets depending on the preferences. + 2008-05-26 Christian Neumair * src/nautilus-navigation-window-menus.c (reload_tab_menu), diff --git a/libnautilus-private/apps_nautilus_preferences.schemas.in b/libnautilus-private/apps_nautilus_preferences.schemas.in index bbdfddcc9..3104c0d42 100644 --- a/libnautilus-private/apps_nautilus_preferences.schemas.in +++ b/libnautilus-private/apps_nautilus_preferences.schemas.in @@ -68,6 +68,36 @@ + + /schemas/desktop/gnome/file_views/tabs_enable + /desktop/gnome/file_views/tabs_enable + nautilus + bool + true + + Whether to enable tabs in Nautilus browser windows + + If set to true, then multiple views can be opened in one browser window, + each in a separate tab. + + + + + + /schemas/desktop/gnome/file_views/tabs_open_position + /desktop/gnome/file_views/tabs_open_position + nautilus + string + after_current_tab + + Where to position newly open tabs in browser windows. + + If set to "after_current_tab", then new tabs are inserted after the current tab. + If set to "end", then new tabs are appended to the end of the tab list. + + + + /schemas/apps/nautilus/preferences/media_automount /apps/nautilus/preferences/media_automount diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c index 5f4f49860..e4b301765 100644 --- a/libnautilus-private/nautilus-global-preferences.c +++ b/libnautilus-private/nautilus-global-preferences.c @@ -169,6 +169,11 @@ static EelEnumerationEntry date_format_entries[] = { { "informal", "Informal", NAUTILUS_DATE_FORMAT_INFORMAL } }; +static EelEnumerationEntry new_tab_position_entries[] = { + { "after_current_tab", "After Current Tab", NAUTILUS_NEW_TAB_POSITION_AFTER_CURRENT_TAB }, + { "end", "End", NAUTILUS_NEW_TAB_POSITION_END } +}; + /* * A callback which can be used to fetch dynamic fallback values. * For example, values that are dependent on the environment (such as user name) @@ -331,6 +336,16 @@ static const PreferenceDefault preference_defaults[] = { PREFERENCE_BOOLEAN, GINT_TO_POINTER (FALSE) }, + { NAUTILUS_PREFERENCES_ENABLE_TABS, + PREFERENCE_BOOLEAN, + GINT_TO_POINTER (TRUE) + }, + { NAUTILUS_PREFERENCES_NEW_TAB_POSITION, + PREFERENCE_STRING, + "after_current_tab", + NULL, NULL, + "new_tab_position" + }, { NAUTILUS_PREFERENCES_START_WITH_TOOLBAR, PREFERENCE_BOOLEAN, GINT_TO_POINTER (TRUE) @@ -594,6 +609,9 @@ global_preferences_register_enumerations (void) eel_enumeration_register ("date_format", date_format_entries, G_N_ELEMENTS (date_format_entries)); + eel_enumeration_register ("new_tab_position", + new_tab_position_entries, + G_N_ELEMENTS (new_tab_position_entries)); /* Set the enumeration ids for preferences that need them */ for (i = 0; preference_defaults[i].name != NULL; i++) { diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h index e6d030190..ac5a94b39 100644 --- a/libnautilus-private/nautilus-global-preferences.h +++ b/libnautilus-private/nautilus-global-preferences.h @@ -78,6 +78,12 @@ typedef enum NAUTILUS_DATE_FORMAT_INFORMAL } NautilusDateFormat; +typedef enum +{ + NAUTILUS_NEW_TAB_POSITION_AFTER_CURRENT_TAB, + NAUTILUS_NEW_TAB_POSITION_END, +} NautilusNewTabPosition; + /* Sidebar panels */ #define NAUTILUS_PREFERENCES_TREE_SHOW_ONLY_DIRECTORIES "sidebar_panels/tree/show_only_directories" @@ -89,6 +95,8 @@ typedef enum /* Spatial or browser mode */ #define NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER "preferences/always_use_browser" +#define NAUTILUS_PREFERENCES_ENABLE_TABS "preferences/tabs_enable" +#define NAUTILUS_PREFERENCES_NEW_TAB_POSITION "preferences/tabs_open_position" /* Which views should be displayed for new windows */ #define NAUTILUS_PREFERENCES_START_WITH_LOCATION_BAR "preferences/start_with_location_bar" diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index ee416ac01..a7aec49f3 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -3989,6 +3989,10 @@ open_one_in_new_tab (gpointer data, gpointer callback_data) g_assert (NAUTILUS_IS_FILE (data)); g_assert (FM_IS_DIRECTORY_VIEW (callback_data)); + if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)) { + return; + } + fm_directory_view_activate_file (FM_DIRECTORY_VIEW (callback_data), NAUTILUS_FILE (data), NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, @@ -7198,7 +7202,8 @@ real_update_menus (FMDirectoryView *view) gtk_action_set_visible (action, show_open_alternate); /* Open in New Tab action */ - if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) { + if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION && + eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)) { if (selection_count == 0 || selection_count == 1) { label_with_underscore = g_strdup (_("Open in New Tab")); } else { diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c index 0cb8b3cce..6a9e5bb2c 100644 --- a/src/file-manager/fm-icon-view.c +++ b/src/file-manager/fm-icon-view.c @@ -1755,7 +1755,7 @@ icon_container_activate_alternate_callback (NautilusIconContainer *container, } flags = NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND; - if (open_in_tab) { + if (open_in_tab && eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)) { flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB; } else { flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW; diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml index 8fbb751f0..60271e339 100644 --- a/src/file-manager/nautilus-directory-view-ui.xml +++ b/src/file-manager/nautilus-directory-view-ui.xml @@ -17,8 +17,8 @@ - + diff --git a/src/nautilus-actions.h b/src/nautilus-actions.h index b3d839cc3..bbf9e43aa 100644 --- a/src/nautilus-actions.h +++ b/src/nautilus-actions.h @@ -50,5 +50,7 @@ #define NAUTILUS_ACTION_CLOSE "Close" #define NAUTILUS_ACTION_SEARCH "Search" #define NAUTILUS_ACTION_FOLDER_WINDOW "Folder Window" +#define NAUTILUS_ACTION_TABS "Tabs" +#define NAUTILUS_ACTION_NEW_TAB "New Tab" #endif /* NAUTILUS_ACTIONS_H */ diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c index cd45acb54..8ca70b11e 100644 --- a/src/nautilus-navigation-window-menus.c +++ b/src/nautilus-navigation-window-menus.c @@ -245,6 +245,23 @@ nautilus_navigation_window_update_spatial_menu_item (NautilusNavigationWindow *w !eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)); } +void +nautilus_navigation_window_update_tab_menu_item_visibility (NautilusNavigationWindow *window) +{ + GtkAction *action; + + action = gtk_action_group_get_action (window->details->navigation_action_group, + NAUTILUS_ACTION_TABS); + gtk_action_set_visible (action, + eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)); + + action = gtk_action_group_get_action (window->details->navigation_action_group, + NAUTILUS_ACTION_NEW_TAB); + gtk_action_set_visible (action, + eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)); + +} + static void action_add_bookmark_callback (GtkAction *action, gpointer user_data) @@ -491,7 +508,13 @@ action_new_tab_callback (GtkAction *action, NautilusWindow *window; NautilusWindowSlot *current_slot; NautilusWindowSlot *new_slot; + NautilusWindowOpenFlags flags; GFile *current_location; + int new_slot_position; + + if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)) { + return; + } window = NAUTILUS_WINDOW (user_data); current_slot = window->details->active_slot; @@ -500,7 +523,15 @@ action_new_tab_callback (GtkAction *action, window = NAUTILUS_WINDOW (current_slot->window); if (current_location != NULL) { - new_slot = nautilus_window_open_slot (window, 0); + flags = 0; + + new_slot_position = eel_preferences_get_enum (NAUTILUS_PREFERENCES_NEW_TAB_POSITION); + if (new_slot_position == NAUTILUS_NEW_TAB_POSITION_END) { + flags = NAUTILUS_WINDOW_OPEN_SLOT_APPEND; + } + + + new_slot = nautilus_window_open_slot (window, flags); nautilus_window_set_active_slot (window, new_slot); nautilus_window_slot_go_to (new_slot, current_location); g_object_unref (current_location); @@ -742,6 +773,7 @@ nautilus_navigation_window_initialize_menus (NautilusNavigationWindow *window) nautilus_navigation_window_update_show_hide_menu_items (window); nautilus_navigation_window_update_spatial_menu_item (window); + nautilus_navigation_window_update_tab_menu_item_visibility (window); nautilus_navigation_window_initialize_go_menu (window); nautilus_navigation_window_initialize_tabs_menu (window); diff --git a/src/nautilus-navigation-window-ui.xml b/src/nautilus-navigation-window-ui.xml index 5e504c9d9..7abadb11d 100644 --- a/src/nautilus-navigation-window-ui.xml +++ b/src/nautilus-navigation-window-ui.xml @@ -2,8 +2,8 @@ - + diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index 120bee7d5..b24ea5be0 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -114,6 +114,7 @@ static void path_bar_location_changed_callback (GtkWidget * NautilusNavigationWindow *window); static void always_use_location_entry_changed (gpointer callback_data); static void always_use_browser_changed (gpointer callback_data); +static void enable_tabs_changed (gpointer callback_data); static void nautilus_navigation_window_set_bar_mode (NautilusNavigationWindow *window, NautilusBarMode mode); @@ -386,6 +387,10 @@ nautilus_navigation_window_init (NautilusNavigationWindow *window) eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER, always_use_browser_changed, window, G_OBJECT (window)); + + eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_ENABLE_TABS, + enable_tabs_changed, + window, G_OBJECT (window)); } static void @@ -423,6 +428,16 @@ always_use_browser_changed (gpointer callback_data) nautilus_navigation_window_update_spatial_menu_item (window); } +static void +enable_tabs_changed (gpointer callback_data) +{ + NautilusNavigationWindow *window; + + window = NAUTILUS_NAVIGATION_WINDOW (callback_data); + + nautilus_navigation_window_update_tab_menu_item_visibility (window); +} + static int bookmark_list_get_uri_index (GList *list, GFile *location) diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c index d8bb2fd0a..5dc6d48b6 100644 --- a/src/nautilus-window-manage-views.c +++ b/src/nautilus-window-manage-views.c @@ -488,9 +488,11 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot, NautilusWindow *window; NautilusWindow *target_window; NautilusWindowSlot *target_slot; + NautilusWindowOpenFlags slot_flags; gboolean do_load_location = TRUE; GFile *old_location; char *old_uri, *new_uri; + int new_slot_position; window = slot->window; @@ -582,7 +584,15 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot, if ((flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB) != 0 && NAUTILUS_IS_NAVIGATION_WINDOW (window)) { g_assert (target_window == window); - target_slot = nautilus_window_open_slot (window, 0); + + slot_flags = 0; + + new_slot_position = eel_preferences_get_enum (NAUTILUS_PREFERENCES_NEW_TAB_POSITION); + if (new_slot_position == NAUTILUS_NEW_TAB_POSITION_END) { + slot_flags = NAUTILUS_WINDOW_OPEN_SLOT_APPEND; + } + + target_slot = nautilus_window_open_slot (window, slot_flags); } if ((flags & NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND) != 0) { diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 098e1208b..b1f71747a 100644 --- a/src/nautilus-window-private.h +++ b/src/nautilus-window-private.h @@ -220,6 +220,7 @@ void nautilus_navigation_window_remove_bookmarks_menu_callback void nautilus_navigation_window_remove_bookmarks_menu_items (NautilusNavigationWindow *window); void nautilus_navigation_window_update_show_hide_menu_items (NautilusNavigationWindow *window); void nautilus_navigation_window_update_spatial_menu_item (NautilusNavigationWindow *window); +void nautilus_navigation_window_update_tab_menu_item_visibility (NautilusNavigationWindow *window); void nautilus_navigation_window_remove_go_menu_callback (NautilusNavigationWindow *window); void nautilus_navigation_window_remove_go_menu_items (NautilusNavigationWindow *window); -- cgit v1.2.1