diff options
-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"/> |