summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuerg Billeter <j@bitron.ch>2007-11-05 15:15:32 +0000
committerJürg Billeter <juergbi@src.gnome.org>2007-11-05 15:15:32 +0000
commitaef42c722fedae31f45af9bc0f013404f4bf3186 (patch)
treed4b9ab91f3a720521d1eb1c7d1a8c546898b3c76
parent1f202b66f3e8b0058eb642c389e5e7299e30c520 (diff)
downloadnautilus-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--ChangeLog22
-rw-r--r--src/file-manager/fm-actions.h2
-rw-r--r--src/file-manager/fm-directory-view.c107
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml2
-rw-r--r--src/nautilus-actions.h1
-rw-r--r--src/nautilus-navigation-window-menus.c40
-rw-r--r--src/nautilus-navigation-window-ui.xml1
-rw-r--r--src/nautilus-navigation-window.c15
-rw-r--r--src/nautilus-window-private.h1
9 files changed, 183 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 7fca698b2..4a56839d9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);