summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"/>