diff options
author | William Jon McCann <jmccann@redhat.com> | 2012-07-13 19:55:58 -0400 |
---|---|---|
committer | William Jon McCann <jmccann@redhat.com> | 2012-07-14 06:59:35 -0400 |
commit | ce64cbc6bfffd275ef98aee730d85879ce4a4a3e (patch) | |
tree | 530182bdab201d39140f715aec3858ca8788d260 | |
parent | 7b280cb71277fa3f9520be2a71ef7945cb849046 (diff) | |
download | nautilus-ce64cbc6bfffd275ef98aee730d85879ce4a4a3e.tar.gz |
Add a Recent files place
https://bugzilla.gnome.org/show_bug.cgi?id=325824
-rw-r--r-- | eel/eel-vfs-extensions.c | 6 | ||||
-rw-r--r-- | eel/eel-vfs-extensions.h | 1 | ||||
-rw-r--r-- | libnautilus-private/nautilus-directory.c | 12 | ||||
-rw-r--r-- | libnautilus-private/nautilus-directory.h | 1 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file-operations.c | 1 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file.c | 17 | ||||
-rw-r--r-- | libnautilus-private/nautilus-file.h | 1 | ||||
-rw-r--r-- | libnautilus-private/nautilus-recent.c | 1 | ||||
-rw-r--r-- | src/nautilus-places-sidebar.c | 26 | ||||
-rw-r--r-- | src/nautilus-properties-window.c | 26 | ||||
-rw-r--r-- | src/nautilus-view.c | 52 |
11 files changed, 134 insertions, 10 deletions
diff --git a/eel/eel-vfs-extensions.c b/eel/eel-vfs-extensions.c index aac2708a3..75322533c 100644 --- a/eel/eel-vfs-extensions.c +++ b/eel/eel-vfs-extensions.c @@ -47,6 +47,12 @@ eel_uri_is_trash (const char *uri) } gboolean +eel_uri_is_recent (const char *uri) +{ + return g_str_has_prefix (uri, "recent:"); +} + +gboolean eel_uri_is_search (const char *uri) { return g_str_has_prefix (uri, EEL_SEARCH_URI); diff --git a/eel/eel-vfs-extensions.h b/eel/eel-vfs-extensions.h index 6338fba1e..90364de25 100644 --- a/eel/eel-vfs-extensions.h +++ b/eel/eel-vfs-extensions.h @@ -42,6 +42,7 @@ gboolean eel_uri_is_trash_folder (const char * gboolean eel_uri_is_in_trash (const char *uri); gboolean eel_uri_is_desktop (const char *uri); gboolean eel_uri_is_search (const char *uri); +gboolean eel_uri_is_recent (const char *uri); char * eel_make_valid_utf8 (const char *name); diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c index 6bc84b556..6dcb8e0bd 100644 --- a/libnautilus-private/nautilus-directory.c +++ b/libnautilus-private/nautilus-directory.c @@ -539,6 +539,18 @@ nautilus_directory_is_in_trash (NautilusDirectory *directory) } gboolean +nautilus_directory_is_in_recent (NautilusDirectory *directory) +{ + g_assert (NAUTILUS_IS_DIRECTORY (directory)); + + if (directory->details->location == NULL) { + return FALSE; + } + + return g_file_has_uri_scheme (directory->details->location, "recent"); +} + +gboolean nautilus_directory_are_all_files_seen (NautilusDirectory *directory) { g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), FALSE); diff --git a/libnautilus-private/nautilus-directory.h b/libnautilus-private/nautilus-directory.h index 3a628ec43..ac9cc7ef9 100644 --- a/libnautilus-private/nautilus-directory.h +++ b/libnautilus-private/nautilus-directory.h @@ -216,6 +216,7 @@ gboolean nautilus_directory_are_all_files_seen (NautilusDirector gboolean nautilus_directory_is_local (NautilusDirectory *directory); gboolean nautilus_directory_is_in_trash (NautilusDirectory *directory); +gboolean nautilus_directory_is_in_recent (NautilusDirectory *directory); /* Return false if directory contains anything besides a Nautilus metafile. * Only valid if directory is monitored. Used by the Trash monitor. diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c index 0ed15c5fc..8acef954a 100644 --- a/libnautilus-private/nautilus-file-operations.c +++ b/libnautilus-private/nautilus-file-operations.c @@ -1023,6 +1023,7 @@ static gboolean can_delete_without_confirm (GFile *file) { if (g_file_has_uri_scheme (file, "burn") || + g_file_has_uri_scheme (file, "recent") || g_file_has_uri_scheme (file, "x-nautilus-desktop")) { return TRUE; } diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index 337c3983b..b35920349 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -6763,6 +6763,23 @@ nautilus_file_is_in_trash (NautilusFile *file) return nautilus_directory_is_in_trash (file->details->directory); } +/** + * nautilus_file_is_in_recent + * + * Check if this file is a file in Recent. + * @file: NautilusFile representing the file in question. + * + * Returns: TRUE if @file is in Recent. + * + **/ +gboolean +nautilus_file_is_in_recent (NautilusFile *file) +{ + g_assert (NAUTILUS_IS_FILE (file)); + + return nautilus_directory_is_in_recent (file->details->directory); +} + GError * nautilus_file_get_file_info_error (NautilusFile *file) { diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h index 7e3f9686f..f482377a8 100644 --- a/libnautilus-private/nautilus-file.h +++ b/libnautilus-private/nautilus-file.h @@ -188,6 +188,7 @@ gboolean nautilus_file_is_user_special_directory (Nautilu GUserDirectory special_directory); gboolean nautilus_file_is_archive (NautilusFile *file); gboolean nautilus_file_is_in_trash (NautilusFile *file); +gboolean nautilus_file_is_in_recent (NautilusFile *file); gboolean nautilus_file_is_in_desktop (NautilusFile *file); gboolean nautilus_file_is_home (NautilusFile *file); gboolean nautilus_file_is_desktop_directory (NautilusFile *file); diff --git a/libnautilus-private/nautilus-recent.c b/libnautilus-private/nautilus-recent.c index adb567edc..244cbe4d4 100644 --- a/libnautilus-private/nautilus-recent.c +++ b/libnautilus-private/nautilus-recent.c @@ -52,6 +52,7 @@ nautilus_recent_add_file (NautilusFile *file, /* do not add trash:// etc */ if (eel_uri_is_trash (uri) || eel_uri_is_search (uri) || + eel_uri_is_recent (uri) || eel_uri_is_desktop (uri)) { g_free (uri); return; diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c index abba49a48..d8cc81678 100644 --- a/src/nautilus-places-sidebar.c +++ b/src/nautilus-places-sidebar.c @@ -425,6 +425,21 @@ special_directory_get_gicon (GUserDirectory directory) #undef ICON_CASE } +static gboolean +recent_is_supported (void) +{ + const char * const *supported; + int i; + + supported = g_vfs_get_supported_uri_schemes (g_vfs_get_default ()); + for (i = 0; supported[i] != NULL; i++) { + if (strcmp ("recent", supported[i]) == 0) { + return TRUE; + } + } + return FALSE; +} + static void update_places (NautilusPlacesSidebar *sidebar) { @@ -476,6 +491,17 @@ update_places (NautilusPlacesSidebar *sidebar) add_heading (sidebar, SECTION_COMPUTER, _("Places")); + if (recent_is_supported ()) { + mount_uri = "recent:///"; /* No need to strdup */ + icon = g_themed_icon_new ("document-open-recent-symbolic"); + add_place (sidebar, PLACES_BUILT_IN, + SECTION_COMPUTER, + _("Recent"), icon, mount_uri, + NULL, NULL, NULL, 0, + _("Recent files")); + g_object_unref (icon); + } + /* home folder */ mount_uri = nautilus_get_home_directory_uri (); icon = g_themed_icon_new (NAUTILUS_ICON_HOME); diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c index b7ef2c5d9..950e57e03 100644 --- a/src/nautilus-properties-window.c +++ b/src/nautilus-properties-window.c @@ -2393,6 +2393,19 @@ is_burn_directory (NautilusFile *file) } static gboolean +is_recent_directory (NautilusFile *file) +{ + char *file_uri; + gboolean result; + + file_uri = nautilus_file_get_uri (file); + result = strcmp (file_uri, "recent:///") == 0; + g_free (file_uri); + + return result; +} + +static gboolean should_show_custom_icon_buttons (NautilusPropertiesWindow *window) { if (is_multi_file_window (window)) { @@ -2457,6 +2470,15 @@ should_show_link_target (NautilusPropertiesWindow *window) } static gboolean +location_show_original (NautilusPropertiesWindow *window) +{ + NautilusFile *file; + + file = get_original_file (window); + return !nautilus_file_is_in_recent (file); +} + +static gboolean should_show_free_space (NautilusPropertiesWindow *window) { @@ -2464,6 +2486,7 @@ should_show_free_space (NautilusPropertiesWindow *window) && (is_merged_trash_directory (get_target_file (window)) || is_computer_directory (get_target_file (window)) || is_network_directory (get_target_file (window)) || + is_recent_directory (get_target_file (window)) || is_burn_directory (get_target_file (window)))) { return FALSE; } @@ -3083,7 +3106,7 @@ create_basic_page (NautilusPropertiesWindow *window) append_title_and_ellipsizing_value (window, grid, _("Location:"), "where", INCONSISTENT_STATE_STRING, - TRUE); + location_show_original (window)); append_title_and_ellipsizing_value (window, grid, _("Volume:"), @@ -4576,6 +4599,7 @@ should_show_permissions (NautilusPropertiesWindow *window) */ if (!is_multi_file_window (window) && (is_merged_trash_directory (file) || + is_recent_directory (file) || is_computer_directory (file))) { return FALSE; } diff --git a/src/nautilus-view.c b/src/nautilus-view.c index 7d0f2a04b..523390694 100644 --- a/src/nautilus-view.c +++ b/src/nautilus-view.c @@ -523,11 +523,25 @@ showing_trash_directory (NautilusView *view) } static gboolean +showing_recent_directory (NautilusView *view) +{ + NautilusFile *file; + + file = nautilus_view_get_directory_as_file (view); + if (file != NULL) { + return nautilus_file_is_in_recent (file); + } + return FALSE; +} + +static gboolean nautilus_view_supports_creating_files (NautilusView *view) { g_return_val_if_fail (NAUTILUS_IS_VIEW (view), FALSE); - return !nautilus_view_is_read_only (view) && !showing_trash_directory (view); + return !nautilus_view_is_read_only (view) + && !showing_trash_directory (view) + && !showing_recent_directory (view); } static gboolean @@ -8281,22 +8295,26 @@ real_update_paste_menu (NautilusView *view, { gboolean can_paste_files_into; gboolean selection_is_read_only; + gboolean selection_contains_recent; gboolean is_read_only; GtkAction *action; selection_is_read_only = selection_count == 1 && (!nautilus_file_can_write (NAUTILUS_FILE (selection->data)) && !nautilus_file_has_activation_uri (NAUTILUS_FILE (selection->data))); - + is_read_only = nautilus_view_is_read_only (view); - - can_paste_files_into = (selection_count == 1 && + selection_contains_recent = showing_recent_directory (view); + + can_paste_files_into = (!selection_contains_recent && + selection_count == 1 && can_paste_into_file (NAUTILUS_FILE (selection->data))); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_PASTE); gtk_action_set_sensitive (action, !is_read_only); - + gtk_action_set_visible (action, !selection_contains_recent); + action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_PASTE_FILES_INTO); gtk_action_set_visible (action, can_paste_files_into); @@ -8316,6 +8334,7 @@ real_update_location_menu (NautilusView *view) NautilusFile *file; gboolean is_special_link; gboolean is_desktop_or_home_dir; + gboolean is_recent; gboolean can_delete_file, show_delete; gboolean show_separate_delete_command; gboolean show_open_in_new_tab; @@ -8354,6 +8373,7 @@ real_update_location_menu (NautilusView *view) is_special_link = NAUTILUS_IS_DESKTOP_ICON_FILE (file); is_desktop_or_home_dir = nautilus_file_is_home (file) || nautilus_file_is_desktop_directory (file); + is_recent = nautilus_file_is_in_recent (file); can_delete_file = nautilus_file_can_delete (file) && @@ -8362,7 +8382,8 @@ real_update_location_menu (NautilusView *view) action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_LOCATION_CUT); - gtk_action_set_sensitive (action, can_delete_file); + gtk_action_set_sensitive (action, !is_recent && can_delete_file); + gtk_action_set_visible (action, !is_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_LOCATION_PASTE_FILES_INTO); @@ -8370,10 +8391,12 @@ real_update_location_menu (NautilusView *view) "can-paste-according-to-destination", GINT_TO_POINTER (can_paste_into_file (file))); gtk_action_set_sensitive (action, + !is_recent && GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action), "can-paste-according-to-clipboard")) && GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action), "can-paste-according-to-destination"))); + gtk_action_set_visible (action, !is_recent); show_delete = TRUE; @@ -8483,6 +8506,7 @@ real_update_menus (NautilusView *view) char *label_with_underscore; gboolean selection_contains_special_link; gboolean selection_contains_desktop_or_home_dir; + gboolean selection_contains_recent; gboolean can_create_files; gboolean can_delete_files; gboolean can_trash_files; @@ -8508,6 +8532,7 @@ real_update_menus (NautilusView *view) selection_contains_special_link = special_link_in_selection (view); selection_contains_desktop_or_home_dir = desktop_or_home_dir_in_selection (view); + selection_contains_recent = showing_recent_directory (view); can_create_files = nautilus_view_supports_creating_files (view); can_delete_files = @@ -8521,11 +8546,12 @@ real_update_menus (NautilusView *view) !selection_contains_special_link && !selection_contains_desktop_or_home_dir; can_copy_files = selection_count != 0 - && !selection_contains_special_link; + && !selection_contains_recent + && !selection_contains_special_link; can_duplicate_files = can_create_files && can_copy_files; can_link_files = can_create_files && can_copy_files; - + action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_RENAME); /* rename sensitivity depending on selection */ @@ -8537,15 +8563,17 @@ real_update_menus (NautilusView *view) selection_count == 1 && nautilus_view_can_rename_file (view, selection->data)); } + gtk_action_set_visible (action, !selection_contains_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_NEW_FOLDER); gtk_action_set_sensitive (action, can_create_files); + gtk_action_set_visible (action, !selection_contains_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_NEW_FOLDER_WITH_SELECTION); gtk_action_set_sensitive (action, can_create_files && can_delete_files && (selection_count > 1)); - gtk_action_set_visible (action, selection_count > 1); + gtk_action_set_visible (action, !selection_contains_recent && (selection_count > 1)); label_with_underscore = g_strdup_printf (ngettext("New Folder with Selection (%'d Item)", "New Folder with Selection (%'d Items)", selection_count), @@ -8724,10 +8752,12 @@ real_update_menus (NautilusView *view) action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_DUPLICATE); gtk_action_set_sensitive (action, can_duplicate_files); + gtk_action_set_visible (action, !selection_contains_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_CREATE_LINK); gtk_action_set_sensitive (action, can_link_files); + gtk_action_set_visible (action, !selection_contains_recent); g_object_set (action, "label", ngettext ("Ma_ke Link", "Ma_ke Links", @@ -8801,6 +8831,7 @@ real_update_menus (NautilusView *view) action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_CUT); gtk_action_set_sensitive (action, can_delete_files); + gtk_action_set_visible (action, !selection_contains_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_COPY); @@ -8821,6 +8852,7 @@ real_update_menus (NautilusView *view) action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_NEW_DOCUMENTS); gtk_action_set_sensitive (action, can_create_files); + gtk_action_set_visible (action, !selection_contains_recent); if (can_create_files && view->details->templates_invalid) { update_templates_menu (view); @@ -8829,9 +8861,11 @@ real_update_menus (NautilusView *view) action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_COPY_TO); gtk_action_set_sensitive (action, can_copy_files); + gtk_action_set_visible (action, !selection_contains_recent); action = gtk_action_group_get_action (view->details->dir_action_group, NAUTILUS_ACTION_MOVE_TO); gtk_action_set_sensitive (action, can_delete_files); + gtk_action_set_visible (action, !selection_contains_recent); } /** |