summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Neumair <cneumair@gnome.org>2008-05-31 10:40:11 +0000
committerChristian Neumair <cneumair@src.gnome.org>2008-05-31 10:40:11 +0000
commit9631de7c708aca1cb202e317072330b3aae4a569 (patch)
tree2a31aa13e251649566fe3544b8cbc8f6fcb6f635
parent8cf25a3fc9a08d2bceaaaccb82b4d8fd72b80e4b (diff)
downloadnautilus-9631de7c708aca1cb202e317072330b3aae4a569.tar.gz
Fix order and confirmation when opening multiple tabs. All tabs are
2008-05-31 Christian Neumair <cneumair@gnome.org> * libnautilus-private/nautilus-mime-actions.c (confirm_multiple_windows), (activate_files), (activation_mountable_mounted), (nautilus_mime_activate_files), (nautilus_mime_activate_file): * libnautilus-private/nautilus-mime-actions.h: * src/file-manager/fm-directory-view.c (fm_directory_view_confirm_multiple), (fm_directory_view_activate_files), (action_open_callback), (action_open_close_parent_callback), (action_open_alternate_callback), (action_open_new_tab_callback), (action_open_folder_window_callback): * src/file-manager/fm-directory-view.h: * src/file-manager/fm-icon-view.c (icon_container_activate_callback), (icon_container_activate_alternate_callback): * src/file-manager/fm-list-view.c (activate_selected_items), (activate_selected_items_alternate): * src/file-manager/nautilus-directory-view-ui.xml: Fix order and confirmation when opening multiple tabs. All tabs are activated at once, instead of activating each separately. Refer to tabs rather than windows in the confirmation dialog. Also list "New Tab" above "New Window" in background context menu. svn path=/branches/multiview/; revision=14215
-rw-r--r--ChangeLog25
-rw-r--r--libnautilus-private/nautilus-mime-actions.c62
-rw-r--r--libnautilus-private/nautilus-mime-actions.h3
-rw-r--r--src/file-manager/fm-directory-view.c61
-rw-r--r--src/file-manager/fm-directory-view.h5
-rw-r--r--src/file-manager/fm-icon-view.c6
-rw-r--r--src/file-manager/fm-list-view.c6
-rw-r--r--src/file-manager/nautilus-directory-view-ui.xml2
8 files changed, 116 insertions, 54 deletions
diff --git a/ChangeLog b/ChangeLog
index c5e7d7a2e..dd2e85967 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2008-05-31 Christian Neumair <cneumair@gnome.org>
+
+ * libnautilus-private/nautilus-mime-actions.c
+ (confirm_multiple_windows), (activate_files),
+ (activation_mountable_mounted), (nautilus_mime_activate_files),
+ (nautilus_mime_activate_file):
+ * libnautilus-private/nautilus-mime-actions.h:
+ * src/file-manager/fm-directory-view.c
+ (fm_directory_view_confirm_multiple),
+ (fm_directory_view_activate_files), (action_open_callback),
+ (action_open_close_parent_callback),
+ (action_open_alternate_callback), (action_open_new_tab_callback),
+ (action_open_folder_window_callback):
+ * src/file-manager/fm-directory-view.h:
+ * src/file-manager/fm-icon-view.c
+ (icon_container_activate_callback),
+ (icon_container_activate_alternate_callback):
+ * src/file-manager/fm-list-view.c (activate_selected_items),
+ (activate_selected_items_alternate):
+ * src/file-manager/nautilus-directory-view-ui.xml:
+ Fix order and confirmation when opening multiple tabs. All tabs are
+ activated at once, instead of activating each separately. Refer to tabs
+ rather than windows in the confirmation dialog.
+ Also list "New Tab" above "New Window" in background context menu.
+
2008-05-30 Christian Neumair <cneumair@gnome.org>
* libnautilus-private/apps_nautilus_preferences.schemas.in:
diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c
index 011acef63..292c9fb22 100644
--- a/libnautilus-private/nautilus-mime-actions.c
+++ b/libnautilus-private/nautilus-mime-actions.c
@@ -73,6 +73,7 @@ typedef struct {
NautilusFileListHandle *files_handle;
gboolean tried_mounting;
char *activation_directory;
+ gboolean user_confirmation;
} ActivateParameters;
/* Number of seconds until cancel dialog shows up */
@@ -973,7 +974,9 @@ activate_mount_op_active (EelMountOperation *operation,
}
static gboolean
-confirm_multiple_windows (GtkWindow *parent_window, int count)
+confirm_multiple_windows (GtkWindow *parent_window,
+ int count,
+ gboolean use_tabs)
{
GtkDialog *dialog;
char *prompt;
@@ -985,8 +988,13 @@ confirm_multiple_windows (GtkWindow *parent_window, int count)
}
prompt = _("Are you sure you want to open all files?");
- detail = g_strdup_printf (ngettext("This will open %d separate window.",
- "This will open %d separate windows.", count), count);
+ if (use_tabs) {
+ detail = g_strdup_printf (ngettext("This will open %d separate tab.",
+ "This will open %d separate tabs.", count), count);
+ } else {
+ detail = g_strdup_printf (ngettext("This will open %d separate window.",
+ "This will open %d separate windows.", count), count);
+ }
dialog = eel_show_yes_no_dialog (prompt, detail,
GTK_STOCK_OK, GTK_STOCK_CANCEL,
parent_window);
@@ -1002,6 +1010,7 @@ static void
activate_files (ActivateParameters *parameters)
{
NautilusWindowInfo *window_info;
+ NautilusWindowOpenFlags flags;
NautilusFile *file;
GList *launch_desktop_files;
GList *launch_files;
@@ -1135,17 +1144,34 @@ activate_files (ActivateParameters *parameters)
open_in_view_files = g_list_reverse (open_in_view_files);
count = g_list_length (open_in_view_files);
- if (parameters->slot_info != NULL &&
- confirm_multiple_windows (parameters->parent_window, count)) {
- NautilusWindowOpenFlags flags;
- flags = parameters->flags;
- if (count > 1) {
- if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
- flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
- }
+ flags = parameters->flags;
+ if (count > 1) {
+ if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS) &&
+ (parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
+ } else {
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW;
+ }
+ }
+
+ if (parameters->slot_info != NULL &&
+ (!parameters->user_confirmation ||
+ confirm_multiple_windows (parameters->parent_window, count,
+ (flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB) != 0))) {
+
+ if ((flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB) != 0 &&
+ eel_preferences_get_enum (NAUTILUS_PREFERENCES_NEW_TAB_POSITION) ==
+ NAUTILUS_NEW_TAB_POSITION_AFTER_CURRENT_TAB) {
+ /* When inserting N tabs after the current one,
+ * we first open tab N, then tab N-1, ..., then tab 0.
+ * Each of them is appended to the current tab, i.e.
+ * prepended to the list of tabs to open.
+ */
+ open_in_view_files = g_list_reverse (open_in_view_files);
}
+
for (l = open_in_view_files; l != NULL; l = l->next) {
GFile *f;
/* The ui should ask for navigation or object windows
@@ -1466,6 +1492,7 @@ activation_mountable_mounted (NautilusFile *file,
{
ActivateParameters *parameters = callback_data;
NautilusFile *target_file;
+ int position;
/* Remove from list of files that have to be mounted */
parameters->mountables = g_list_remove (parameters->mountables, file);
@@ -1473,13 +1500,16 @@ activation_mountable_mounted (NautilusFile *file,
if (error == NULL) {
/* Replace file with the result of the mount */
-
target_file = nautilus_file_get (result_location);
+ position = g_list_index (parameters->files, file);
+
parameters->files = g_list_remove (parameters->files, file);
nautilus_file_unref (file);
- parameters->files = g_list_prepend (parameters->files, target_file);
+ parameters->files = g_list_insert (parameters->files,
+ target_file,
+ position);
} else {
/* Remove failed file */
@@ -1547,7 +1577,8 @@ nautilus_mime_activate_files (GtkWindow *parent_window,
GList *files,
const char *launch_directory,
NautilusWindowOpenMode mode,
- NautilusWindowOpenFlags flags)
+ NautilusWindowOpenFlags flags,
+ gboolean user_confirmation)
{
ActivateParameters *parameters;
char *file_name;
@@ -1575,6 +1606,7 @@ nautilus_mime_activate_files (GtkWindow *parent_window,
parameters->files = nautilus_file_list_copy (files);
parameters->mode = mode;
parameters->flags = flags;
+ parameters->user_confirmation = user_confirmation;
file_count = g_list_length (files);
if (file_count == 1) {
@@ -1627,6 +1659,6 @@ nautilus_mime_activate_file (GtkWindow *parent_window,
g_return_if_fail (NAUTILUS_IS_FILE (file));
files = g_list_prepend (NULL, file);
- nautilus_mime_activate_files (parent_window, slot_info, files, launch_directory, mode, flags);
+ nautilus_mime_activate_files (parent_window, slot_info, files, launch_directory, mode, flags, FALSE);
g_list_free (files);
}
diff --git a/libnautilus-private/nautilus-mime-actions.h b/libnautilus-private/nautilus-mime-actions.h
index 905514dc1..f9f628507 100644
--- a/libnautilus-private/nautilus-mime-actions.h
+++ b/libnautilus-private/nautilus-mime-actions.h
@@ -49,7 +49,8 @@ void nautilus_mime_activate_files (GtkWi
GList *files,
const char *launch_directory,
NautilusWindowOpenMode mode,
- NautilusWindowOpenFlags flags);
+ NautilusWindowOpenFlags flags,
+ gboolean user_confirmation);
void nautilus_mime_activate_file (GtkWindow *parent_window,
NautilusWindowSlotInfo *slot_info,
NautilusFile *file,
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index a7aec49f3..fa76bde12 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -315,8 +315,6 @@ 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_new_tab (gpointer data,
- gpointer callback_data);
static void open_one_in_folder_window (gpointer data,
gpointer callback_data);
static void schedule_update_menus (FMDirectoryView *view);
@@ -608,8 +606,10 @@ fm_directory_view_get_containing_window (FMDirectoryView *view)
return GTK_WINDOW (window);
}
-gboolean
-fm_directory_view_confirm_multiple_windows (GtkWindow *parent_window, int count)
+static gboolean
+fm_directory_view_confirm_multiple (GtkWindow *parent_window,
+ int count,
+ gboolean tabs)
{
GtkDialog *dialog;
char *prompt;
@@ -621,8 +621,13 @@ fm_directory_view_confirm_multiple_windows (GtkWindow *parent_window, int count)
}
prompt = _("Are you sure you want to open all files?");
- detail = g_strdup_printf (ngettext("This will open %'d separate window.",
- "This will open %'d separate windows.", count), count);
+ if (tabs) {
+ detail = g_strdup_printf (ngettext("This will open %'d separate tab.",
+ "This will open %'d separate tabs.", count), count);
+ } else {
+ detail = g_strdup_printf (ngettext("This will open %'d separate window.",
+ "This will open %'d separate windows.", count), count);
+ }
dialog = eel_show_yes_no_dialog (prompt, detail,
GTK_STOCK_OK, GTK_STOCK_CANCEL,
parent_window);
@@ -695,7 +700,8 @@ void
fm_directory_view_activate_files (FMDirectoryView *view,
GList *files,
NautilusWindowOpenMode mode,
- NautilusWindowOpenFlags flags)
+ NautilusWindowOpenFlags flags,
+ gboolean confirm_multiple)
{
char *path;
@@ -705,7 +711,8 @@ fm_directory_view_activate_files (FMDirectoryView *view,
files,
path,
mode,
- flags);
+ flags,
+ confirm_multiple);
g_free (path);
}
@@ -742,7 +749,8 @@ action_open_callback (GtkAction *action,
fm_directory_view_activate_files (view,
selection,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
- 0);
+ 0,
+ TRUE);
nautilus_file_list_free (selection);
}
@@ -759,7 +767,8 @@ action_open_close_parent_callback (GtkAction *action,
fm_directory_view_activate_files (view,
selection,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
- NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND);
+ NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND,
+ TRUE);
nautilus_file_list_free (selection);
}
@@ -777,7 +786,7 @@ action_open_alternate_callback (GtkAction *action,
window = fm_directory_view_get_containing_window (view);
- if (fm_directory_view_confirm_multiple_windows (window, g_list_length (selection))) {
+ if (fm_directory_view_confirm_multiple (window, g_list_length (selection), FALSE)) {
g_list_foreach (selection, open_one_in_new_window, view);
}
@@ -792,13 +801,21 @@ action_open_new_tab_callback (GtkAction *action,
GList *selection;
GtkWindow *window;
+ if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ENABLE_TABS)) {
+ return;
+ }
+
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_new_tab, view);
+ if (fm_directory_view_confirm_multiple (window, g_list_length (selection), TRUE)) {
+ fm_directory_view_activate_files (view,
+ selection,
+ NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
+ NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
+ FALSE);
}
nautilus_file_list_free (selection);
@@ -817,7 +834,7 @@ action_open_folder_window_callback (GtkAction *action,
window = fm_directory_view_get_containing_window (view);
- if (fm_directory_view_confirm_multiple_windows (window, g_list_length (selection))) {
+ if (fm_directory_view_confirm_multiple (window, g_list_length (selection), FALSE)) {
g_list_foreach (selection, open_one_in_folder_window, view);
}
@@ -3984,22 +4001,6 @@ open_one_in_new_window (gpointer data, gpointer callback_data)
}
static void
-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,
- NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB);
-}
-
-static void
open_one_in_folder_window (gpointer data, gpointer callback_data)
{
g_assert (NAUTILUS_IS_FILE (data));
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index 5c61c6078..aeb64c313 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -388,15 +388,14 @@ gboolean fm_directory_view_get_loading (FMDirect
void fm_directory_view_activate_files (FMDirectoryView *view,
GList *files,
NautilusWindowOpenMode mode,
- NautilusWindowOpenFlags flags);
+ NautilusWindowOpenFlags flags,
+ gboolean confirm_multiple);
void fm_directory_view_activate_file (FMDirectoryView *view,
NautilusFile *file,
NautilusWindowOpenMode mode,
NautilusWindowOpenFlags flags);
void fm_directory_view_start_batching_selection_changes (FMDirectoryView *view);
void fm_directory_view_stop_batching_selection_changes (FMDirectoryView *view);
-gboolean fm_directory_view_confirm_multiple_windows (GtkWindow *parent_window,
- int window_count);
void fm_directory_view_queue_file_change (FMDirectoryView *view,
NautilusFile *file);
void fm_directory_view_notify_selection_changed (FMDirectoryView *view);
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index 6a9e5bb2c..6d1e272c9 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -1714,7 +1714,8 @@ icon_container_activate_callback (NautilusIconContainer *container,
fm_directory_view_activate_files (FM_DIRECTORY_VIEW (icon_view),
file_list,
- NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, 0);
+ NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, 0,
+ TRUE);
}
static void
@@ -1764,7 +1765,8 @@ icon_container_activate_alternate_callback (NautilusIconContainer *container,
fm_directory_view_activate_files (FM_DIRECTORY_VIEW (icon_view),
file_list,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
- flags);
+ flags,
+ TRUE);
}
static void
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index a7e2e907e..bc69a083f 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -230,7 +230,8 @@ activate_selected_items (FMListView *view)
fm_directory_view_activate_files (FM_DIRECTORY_VIEW (view),
file_list,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
- 0);
+ 0,
+ TRUE);
nautilus_file_list_free (file_list);
}
@@ -252,7 +253,8 @@ activate_selected_items_alternate (FMListView *view,
file_list,
NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND |
- NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
+ NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW,
+ TRUE);
nautilus_file_list_free (file_list);
}
diff --git a/src/file-manager/nautilus-directory-view-ui.xml b/src/file-manager/nautilus-directory-view-ui.xml
index 60271e339..d4eea7189 100644
--- a/src/file-manager/nautilus-directory-view-ui.xml
+++ b/src/file-manager/nautilus-directory-view-ui.xml
@@ -116,8 +116,8 @@
<popup name="selection">
<placeholder name="Open Placeholder">
<menuitem name="Open" action="Open"/>
- <menuitem name="OpenAlternate" action="OpenAlternate"/>
<menuitem name="OpenInNewTab" action="OpenInNewTab"/>
+ <menuitem name="OpenAlternate" action="OpenAlternate"/>
<menuitem name="OpenFolderWindow" action="OpenFolderWindow"/>
<separator name="applications separator"/>
<placeholder name="Applications Placeholder"/>