diff options
author | Juerg Billeter <j@bitron.ch> | 2007-11-05 15:15:32 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2007-11-05 15:15:32 +0000 |
commit | aef42c722fedae31f45af9bc0f013404f4bf3186 (patch) | |
tree | d4b9ab91f3a720521d1eb1c7d1a8c546898b3c76 | |
parent | 1f202b66f3e8b0058eb642c389e5e7299e30c520 (diff) | |
download | nautilus-aef42c722fedae31f45af9bc0f013404f4bf3186.tar.gz |
reviewed by: Alexander Larsson <alexl@redhat.com>
2007-11-05 Juerg Billeter <j@bitron.ch>
reviewed by: Alexander Larsson <alexl@redhat.com>
* src/file-manager/fm-actions.h:
* src/file-manager/fm-directory-view.c:
(action_open_folder_window_callback), (open_one_in_folder_window),
(action_location_open_folder_window_callback),
(real_update_location_menu), (real_update_menus):
* src/file-manager/nautilus-directory-view-ui.xml:
* src/nautilus-actions.h:
* src/nautilus-navigation-window-menus.c:
(nautilus_navigation_window_update_spatial_menu_item),
(action_folder_window_callback),
(nautilus_navigation_window_initialize_menus):
* src/nautilus-navigation-window-ui.xml:
* src/nautilus-navigation-window.c:
(nautilus_navigation_window_init), (always_use_browser_changed):
* src/nautilus-window-private.h:
Add menu item to open spatial folder window from browser window to File
menu and context menus.
svn path=/branches/gio-branch/; revision=13405
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | src/file-manager/fm-actions.h | 2 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 107 | ||||
-rw-r--r-- | src/file-manager/nautilus-directory-view-ui.xml | 2 | ||||
-rw-r--r-- | src/nautilus-actions.h | 1 | ||||
-rw-r--r-- | src/nautilus-navigation-window-menus.c | 40 | ||||
-rw-r--r-- | src/nautilus-navigation-window-ui.xml | 1 | ||||
-rw-r--r-- | src/nautilus-navigation-window.c | 15 | ||||
-rw-r--r-- | src/nautilus-window-private.h | 1 |
9 files changed, 183 insertions, 8 deletions
@@ -1,3 +1,25 @@ +2007-11-05 Jürg Billeter <j@bitron.ch> + + reviewed by: Alexander Larsson <alexl@redhat.com> + + * src/file-manager/fm-actions.h: + * src/file-manager/fm-directory-view.c: + (action_open_folder_window_callback), (open_one_in_folder_window), + (action_location_open_folder_window_callback), + (real_update_location_menu), (real_update_menus): + * src/file-manager/nautilus-directory-view-ui.xml: + * src/nautilus-actions.h: + * src/nautilus-navigation-window-menus.c: + (nautilus_navigation_window_update_spatial_menu_item), + (action_folder_window_callback), + (nautilus_navigation_window_initialize_menus): + * src/nautilus-navigation-window-ui.xml: + * src/nautilus-navigation-window.c: + (nautilus_navigation_window_init), (always_use_browser_changed): + * src/nautilus-window-private.h: + Add menu item to open spatial folder window from browser window to File + menu and context menus. + 2007-11-02 Paolo Borelli <pborelli@katamail.com> * src/file-manager/fm-directory-view.c: diff --git a/src/file-manager/fm-actions.h b/src/file-manager/fm-actions.h index 9c7f37cbb..89172021e 100644 --- a/src/file-manager/fm-actions.h +++ b/src/file-manager/fm-actions.h @@ -27,7 +27,9 @@ #define FM_ACTION_OPEN "Open" #define FM_ACTION_OPEN_ALTERNATE "OpenAlternate" +#define FM_ACTION_OPEN_FOLDER_WINDOW "OpenFolderWindow" #define FM_ACTION_LOCATION_OPEN_ALTERNATE "LocationOpenAlternate" +#define FM_ACTION_LOCATION_OPEN_FOLDER_WINDOW "LocationOpenFolderWindow" #define FM_ACTION_OTHER_APPLICATION1 "OtherApplication1" #define FM_ACTION_OTHER_APPLICATION2 "OtherApplication2" #define FM_ACTION_NEW_FOLDER "New Folder" diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index f533b76a3..918e32152 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -310,6 +310,8 @@ static void clipboard_changed_callback (NautilusClipboar FMDirectoryView *view); static void open_one_in_new_window (gpointer data, gpointer callback_data); +static void open_one_in_folder_window (gpointer data, + gpointer callback_data); static void schedule_update_menus (FMDirectoryView *view); static void schedule_update_menus_callback (gpointer callback_data); static void remove_update_menus_timeout_callback (FMDirectoryView *view); @@ -364,6 +366,8 @@ static void action_format_volume_callback (GtkAction *action, static void action_location_open_alternate_callback (GtkAction *action, gpointer callback_data); +static void action_location_open_folder_window_callback (GtkAction *action, + gpointer callback_data); static void action_location_cut_callback (GtkAction *action, gpointer callback_data); @@ -770,6 +774,26 @@ action_open_alternate_callback (GtkAction *action, } static void +action_open_folder_window_callback (GtkAction *action, + gpointer callback_data) +{ + FMDirectoryView *view; + GList *selection; + GtkWindow *window; + + view = FM_DIRECTORY_VIEW (callback_data); + selection = fm_directory_view_get_selection (view); + + window = fm_directory_view_get_containing_window (view); + + if (fm_directory_view_confirm_multiple_windows (window, g_list_length (selection))) { + g_list_foreach (selection, open_one_in_folder_window, view); + } + + nautilus_file_list_free (selection); +} + +static void open_location (FMDirectoryView *directory_view, const char *new_uri, NautilusWindowOpenMode mode, @@ -3922,6 +3946,18 @@ open_one_in_new_window (gpointer data, gpointer callback_data) 0); } +static void +open_one_in_folder_window (gpointer data, gpointer callback_data) +{ + g_assert (NAUTILUS_IS_FILE (data)); + g_assert (FM_IS_DIRECTORY_VIEW (callback_data)); + + fm_directory_view_activate_file (FM_DIRECTORY_VIEW (callback_data), + NAUTILUS_FILE (data), + NAUTILUS_WINDOW_OPEN_IN_SPATIAL, + 0); +} + NautilusFile * fm_directory_view_get_directory_as_file (FMDirectoryView *view) { @@ -5959,6 +5995,24 @@ action_location_open_alternate_callback (GtkAction *action, } static void +action_location_open_folder_window_callback (GtkAction *action, + gpointer callback_data) +{ + FMDirectoryView *view; + NautilusFile *file; + + view = FM_DIRECTORY_VIEW (callback_data); + + file = view->details->directory_as_file; + g_return_if_fail (file != NULL); + + fm_directory_view_activate_file (view, + file, + NAUTILUS_WINDOW_OPEN_IN_SPATIAL, + 0); +} + +static void action_location_cut_callback (GtkAction *action, gpointer callback_data) { @@ -6122,6 +6176,10 @@ static const GtkActionEntry directory_view_entries[] = { N_("Open in Navigation Window"), "<control><shift>o", /* label, accelerator */ N_("Open each selected item in a navigation window"), /* tooltip */ G_CALLBACK (action_open_alternate_callback) }, + { "OpenFolderWindow", NULL, /* name, stock id */ + N_("Open in Folder Window"), NULL, /* label, accelerator */ + N_("Open each selected item in a folder window"), /* tooltip */ + G_CALLBACK (action_open_folder_window_callback) }, { "OtherApplication1", NULL, /* name, stock id */ N_("Open with Other _Application..."), NULL, /* label, accelerator */ N_("Choose another application with which to open the selected item"), /* tooltip */ @@ -6247,6 +6305,11 @@ static const GtkActionEntry directory_view_entries[] = { N_("Open this folder in a navigation window"), /* tooltip */ G_CALLBACK (action_location_open_alternate_callback) }, + { FM_ACTION_LOCATION_OPEN_FOLDER_WINDOW, NULL, /* name, stock id */ + N_("Open in Folder Window"), "", /* label, accelerator */ + N_("Open this folder in a folder window"), /* tooltip */ + G_CALLBACK (action_location_open_folder_window_callback) }, + { FM_ACTION_LOCATION_CUT, GTK_STOCK_CUT, /* name, stock id */ NULL, "", /* label, accelerator */ N_("Prepare this folder to be moved with a Paste command"), /* tooltip */ @@ -6732,11 +6795,18 @@ real_update_location_menu (FMDirectoryView *view) gboolean is_read_only; gboolean can_delete_file; gboolean show_separate_delete_command; + gboolean show_open_folder_window; char *label; char *tip; + show_open_folder_window = FALSE; if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) { - label = _("Open in New Window"); + if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) { + label = _("Open in New Window"); + } else { + label = _("Browse in New Window"); + show_open_folder_window = TRUE; + } } else { label = g_strdup (ngettext ("_Browse Folder", "_Browse Folders", 1)); @@ -6747,6 +6817,10 @@ real_update_location_menu (FMDirectoryView *view) "label", label, NULL); + action = gtk_action_group_get_action (view->details->dir_action_group, + FM_ACTION_LOCATION_OPEN_FOLDER_WINDOW); + gtk_action_set_visible (action, show_open_folder_window); + file = view->details->directory_as_file; is_special_link = NAUTILUS_IS_DESKTOP_ICON_FILE (file); is_desktop_or_home_dir = nautilus_file_is_home (file) @@ -6829,6 +6903,7 @@ real_update_menus (FMDirectoryView *view) gboolean show_save_search; gboolean save_search_sensitive; gboolean show_save_search_as; + gboolean show_open_folder_window; GtkAction *action; GAppInfo *app; @@ -6906,14 +6981,28 @@ real_update_menus (FMDirectoryView *view) g_free (label_with_underscore); show_open_alternate = file_list_all_are_folders (selection); + show_open_folder_window = FALSE; if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) { - if (selection_count == 0 || selection_count == 1) { - label_with_underscore = g_strdup (_("Open in New Window")); + if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) { + if (selection_count == 0 || selection_count == 1) { + label_with_underscore = g_strdup (_("Open in New Window")); + } else { + label_with_underscore = g_strdup_printf (ngettext("Open in %d New Window", + "Open in %d New Windows", + selection_count), + selection_count); + } + gtk_action_set_visible (action, FALSE); } else { - label_with_underscore = g_strdup_printf (ngettext("Open in %d New Window", - "Open in %d New Windows", - selection_count), - selection_count); + if (selection_count == 0 || selection_count == 1) { + label_with_underscore = g_strdup (_("Browse in New Window")); + } else { + label_with_underscore = g_strdup_printf (ngettext("Browse in %d New Window", + "Browse in %d New Windows", + selection_count), + selection_count); + } + show_open_folder_window = show_open_alternate; } } else { label_with_underscore = g_strdup (ngettext ("_Browse Folder", @@ -6927,6 +7016,10 @@ real_update_menus (FMDirectoryView *view) label_with_underscore, NULL); g_free (label_with_underscore); + + action = gtk_action_group_get_action (view->details->dir_action_group, + FM_ACTION_OPEN_FOLDER_WINDOW); + gtk_action_set_visible (action, show_open_folder_window); gtk_action_set_sensitive (action, selection_count != 0); gtk_action_set_visible (action, show_open_alternate); diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml index 3e37fb849..a1f93c354 100644 --- a/src/file-manager/nautilus-directory-view-ui.xml +++ b/src/file-manager/nautilus-directory-view-ui.xml @@ -116,6 +116,7 @@ <placeholder name="Open Placeholder"> <menuitem name="Open" action="Open"/> <menuitem name="OpenAlternate" action="OpenAlternate"/> + <menuitem name="OpenFolderWindow" action="OpenFolderWindow"/> <separator name="applications separator"/> <placeholder name="Applications Placeholder"/> <menu action="Open With"> @@ -167,6 +168,7 @@ <popup name="location"> <placeholder name="Open Placeholder"> <menuitem name="LocationOpenAlternate" action="LocationOpenAlternate"/> + <menuitem name="LocationOpenFolderWindow" action="LocationOpenFolderWindow"/> </placeholder> <separator/> <placeholder name="Clipboard Actions"> diff --git a/src/nautilus-actions.h b/src/nautilus-actions.h index f2b28a533..f40e765a5 100644 --- a/src/nautilus-actions.h +++ b/src/nautilus-actions.h @@ -48,5 +48,6 @@ #define NAUTILUS_ACTION_ZOOM_NORMAL "Zoom Normal" #define NAUTILUS_ACTION_CLOSE "Close" #define NAUTILUS_ACTION_SEARCH "Search" +#define NAUTILUS_ACTION_FOLDER_WINDOW "Folder Window" #endif /* NAUTILUS_ACTIONS_H */ diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c index 0e3a71236..d062d7d04 100644 --- a/src/nautilus-navigation-window-menus.c +++ b/src/nautilus-navigation-window-menus.c @@ -52,6 +52,7 @@ #include <libgnomeui/gnome-about.h> #include <libgnomeui/gnome-uidefs.h> #include <libnautilus-private/nautilus-file-utilities.h> +#include <libnautilus-private/nautilus-global-preferences.h> #include <libnautilus-private/nautilus-ui-utilities.h> #include <libnautilus-private/nautilus-undo-manager.h> #include <libnautilus-private/nautilus-search-engine.h> @@ -229,6 +230,19 @@ nautilus_navigation_window_update_show_hide_menu_items (NautilusNavigationWindow nautilus_navigation_window_status_bar_showing (window)); } +void +nautilus_navigation_window_update_spatial_menu_item (NautilusNavigationWindow *window) +{ + GtkAction *action; + + g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window)); + + action = gtk_action_group_get_action (window->details->navigation_action_group, + NAUTILUS_ACTION_FOLDER_WINDOW); + gtk_action_set_visible (action, + !eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)); +} + static void action_add_bookmark_callback (GtkAction *action, gpointer user_data) @@ -413,6 +427,26 @@ action_new_window_callback (GtkAction *action, } static void +action_folder_window_callback (GtkAction *action, + gpointer user_data) +{ + NautilusWindow *current_window; + GFile *current_location; + + current_window = NAUTILUS_WINDOW (user_data); + current_location = nautilus_window_get_location (current_window); + nautilus_application_present_spatial_window ( + current_window->application, + current_window, + NULL, + current_location, + gtk_window_get_screen (GTK_WINDOW (current_window))); + if (current_location != NULL) { + g_object_unref (current_location); + } +} + +static void action_go_to_location_callback (GtkAction *action, gpointer user_data) { @@ -437,9 +471,12 @@ action_search_callback (GtkAction *action, static const GtkActionEntry navigation_entries[] = { { "Go", NULL, N_("_Go") }, /* name, stock id, label */ { "Bookmarks", NULL, N_("_Bookmarks") }, /* name, stock id, label */ - { "New Window", "window-new", N_("Open New _Window"), /* name, stock id, label */ + { "New Window", "window-new", N_("New _Window"), /* name, stock id, label */ "<control>N", N_("Open another Nautilus window for the displayed location"), G_CALLBACK (action_new_window_callback) }, + { "Folder Window", "folder", N_("Open Folder W_indow"), /* name, stock id, label */ + NULL, N_("Open a folder window for the displayed location"), + G_CALLBACK (action_folder_window_callback) }, { "Close All Windows", NULL, N_("Close _All Windows"), /* name, stock id, label */ "<control><shift>W", N_("Close all Navigation windows"), G_CALLBACK (action_close_all_windows_callback) }, @@ -564,6 +601,7 @@ nautilus_navigation_window_initialize_menus (NautilusNavigationWindow *window) gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL); nautilus_navigation_window_update_show_hide_menu_items (window); + nautilus_navigation_window_update_spatial_menu_item (window); nautilus_navigation_window_initialize_go_menu (window); } diff --git a/src/nautilus-navigation-window-ui.xml b/src/nautilus-navigation-window-ui.xml index 1b3e58147..8f5c0997d 100644 --- a/src/nautilus-navigation-window-ui.xml +++ b/src/nautilus-navigation-window-ui.xml @@ -3,6 +3,7 @@ <menu action="File"> <placeholder name="New Items Placeholder"> <menuitem name="New Window" action="New Window"/> + <menuitem name="Folder Window" action="Folder Window"/> </placeholder> <placeholder name="Close Items Placeholder"> diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index 0d27d6059..0d21e665e 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -118,6 +118,7 @@ static void path_bar_location_changed_callback (GtkWidget * GFile *path, NautilusNavigationWindow *window); static void always_use_location_entry_changed (gpointer callback_data); +static void always_use_browser_changed (gpointer callback_data); static void nautilus_navigation_window_set_bar_mode (NautilusNavigationWindow *window, NautilusBarMode mode); @@ -354,6 +355,10 @@ nautilus_navigation_window_init (NautilusNavigationWindow *window) eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_ALWAYS_USE_LOCATION_ENTRY, always_use_location_entry_changed, window, G_OBJECT (window)); + + eel_preferences_add_callback_while_alive (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER, + always_use_browser_changed, + window, G_OBJECT (window)); } static void @@ -381,6 +386,16 @@ always_use_location_entry_changed (gpointer callback_data) window); } +static void +always_use_browser_changed (gpointer callback_data) +{ + NautilusNavigationWindow *window; + + window = NAUTILUS_NAVIGATION_WINDOW (callback_data); + + nautilus_navigation_window_update_spatial_menu_item (window); +} + static int bookmark_list_get_uri_index (GList *list, GFile *location) diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 9f855bd01..3eabde34f 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_remove_go_menu_callback (NautilusNavigationWindow *window); void nautilus_navigation_window_remove_go_menu_items (NautilusNavigationWindow *window); |