diff options
author | Christian Neumair <cneumair@gnome.org> | 2008-05-31 10:40:11 +0000 |
---|---|---|
committer | Christian Neumair <cneumair@src.gnome.org> | 2008-05-31 10:40:11 +0000 |
commit | 9631de7c708aca1cb202e317072330b3aae4a569 (patch) | |
tree | 2a31aa13e251649566fe3544b8cbc8f6fcb6f635 | |
parent | 8cf25a3fc9a08d2bceaaaccb82b4d8fd72b80e4b (diff) | |
download | nautilus-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-- | ChangeLog | 25 | ||||
-rw-r--r-- | libnautilus-private/nautilus-mime-actions.c | 62 | ||||
-rw-r--r-- | libnautilus-private/nautilus-mime-actions.h | 3 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.c | 61 | ||||
-rw-r--r-- | src/file-manager/fm-directory-view.h | 5 | ||||
-rw-r--r-- | src/file-manager/fm-icon-view.c | 6 | ||||
-rw-r--r-- | src/file-manager/fm-list-view.c | 6 | ||||
-rw-r--r-- | src/file-manager/nautilus-directory-view-ui.xml | 2 |
8 files changed, 116 insertions, 54 deletions
@@ -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"/> |