summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-trash-directory.c
diff options
context:
space:
mode:
authorDarin Adler <darin@src.gnome.org>2000-08-15 21:55:12 +0000
committerDarin Adler <darin@src.gnome.org>2000-08-15 21:55:12 +0000
commit8d0a34c537bb61f854d84877374b510d8bb4afba (patch)
tree874fc7bc9476787ac14017e47b919909c7e93a62 /libnautilus-private/nautilus-trash-directory.c
parentcfdbd50b5972561619fa66c2d22d84481ca71415 (diff)
downloadnautilus-8d0a34c537bb61f854d84877374b510d8bb4afba.tar.gz
Getting closer to an implementation of the shared trash. Did a bit
of factoring so that the trash has its own NautilusDirectory subclass now, and the appropriate functions are virtual. * libnautilus-extensions/nautilus-directory.c: (nautilus_directory_are_all_files_seen), (nautilus_directory_contains_file), (nautilus_directory_call_when_ready), (nautilus_directory_cancel_callback), (nautilus_directory_file_monitor_add), (nautilus_directory_file_monitor_remove), (nautilus_directory_is_not_empty): Made all these functions virtual. (wait_until_ready_callback), (nautilus_directory_wait_until_ready): Fixed some names and got rid of some type casts. * libnautilus-extensions/nautilus-gtk-macros.h: Added a new macro to make calls to virtual functions easier to read. * libnautilus-extensions/nautilus-icon-container.c: * libnautilus-extensions/nautilus-icon-container.h: * libnautilus-extensions/nautilus-icon-private.h: * src/file-manager/fm-desktop-icon-view.c: (fm_desktop_icon_view_initialize): Minor cleanup and name changes. * libnautilus-extensions/nautilus-lib-self-check-functions.h: * libnautilus-extensions/nautilus-search-uri.h: * libnautilus-extensions/nautilus-search-uri.c: (nautilus_is_search_uri): Added a function to tell if a URI is a search URI. (nautilus_self_check_search_uri): Added self-checks. * libnautilus-extensions/nautilus-directory-async.c: (allow_metafile): * src/nautilus-switchable-navigation-bar.c: (nautilus_switchable_navigation_bar_set_location): * src/nautilus-window-manage-views.c: (nautilus_window_end_location_change_callback): Changed to use the is_search_uri function. * libnautilus-extensions/nautilus-trash-directory.c: (trash_destroy), (trash_contains_file), (trash_call_when_ready), (trash_cancel_callback), (trash_file_monitor_add), (trash_file_monitor_remove), (trash_are_all_files_seen), (trash_is_not_empty), (nautilus_trash_directory_initialize_class): Trash versions of the virtual functions. * libnautilus-extensions/nautilus-vfs-directory.c: (vfs_destroy), (vfs_contains_file), (vfs_call_when_ready), (vfs_cancel_callback), (vfs_file_monitor_add), (vfs_file_monitor_remove), (vfs_are_all_files_seen), (any_non_metafile_item), (vfs_is_not_empty), (nautilus_vfs_directory_initialize_class): Non-trash versions of the virtual functions (mostly code moved from nautilus-directory.c). * src/file-manager/fm-directory-view.c: (disconnect_model_handlers): Fix a place that relied on doing a call with a NautilusDirectory of NULL. We don't need to be so tolerant of NULL any more now that nautilus_directory_get always returns a non-NULL result for any URI. * src/nautilus-window.c: (nautilus_window_realize): A little code cleanup. (nautilus_window_load_content_view_menu): Fixed a storage leak of the method string. * src/nautilus.oafinfo: Added trash and gnome-trash as additional URIs supported by the icon and list view.
Diffstat (limited to 'libnautilus-private/nautilus-trash-directory.c')
-rw-r--r--libnautilus-private/nautilus-trash-directory.c147
1 files changed, 136 insertions, 11 deletions
diff --git a/libnautilus-private/nautilus-trash-directory.c b/libnautilus-private/nautilus-trash-directory.c
index 269162c81..6ba5694bd 100644
--- a/libnautilus-private/nautilus-trash-directory.c
+++ b/libnautilus-private/nautilus-trash-directory.c
@@ -29,9 +29,13 @@
#include "nautilus-gtk-macros.h"
struct NautilusTrashDirectoryDetails {
+ GList *directories;
};
-static void nautilus_trash_directory_destroy (GtkObject *object);
+typedef struct {
+ NautilusDirectory *directory;
+} RealTrashDirectory;
+
static void nautilus_trash_directory_initialize (gpointer object,
gpointer klass);
static void nautilus_trash_directory_initialize_class (gpointer klass);
@@ -40,15 +44,6 @@ NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusTrashDirectory,
nautilus_trash_directory,
NAUTILUS_TYPE_DIRECTORY)
-static void
-nautilus_trash_directory_initialize_class (gpointer klass)
-{
- GtkObjectClass *object_class;
-
- object_class = GTK_OBJECT_CLASS (klass);
-
- object_class->destroy = nautilus_trash_directory_destroy;
-}
static void
nautilus_trash_directory_initialize (gpointer object, gpointer klass)
@@ -61,7 +56,137 @@ nautilus_trash_directory_initialize (gpointer object, gpointer klass)
}
static void
-nautilus_trash_directory_destroy (GtkObject *object)
+trash_destroy (GtkObject *object)
{
NAUTILUS_CALL_PARENT_CLASS (GTK_OBJECT_CLASS, destroy, (object));
}
+
+static gboolean
+trash_contains_file (NautilusDirectory *directory,
+ NautilusFile *file)
+{
+ NautilusTrashDirectory *trash;
+ GList *p;
+ RealTrashDirectory *trash_directory;
+
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ trash = NAUTILUS_TRASH_DIRECTORY (trash);
+ for (p = trash->details->directories; p != NULL; p = p->next) {
+ trash_directory = p->data;
+
+ if (nautilus_directory_contains_file (trash_directory->directory, file)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void
+trash_call_when_ready (NautilusDirectory *directory,
+ GList *file_attributes,
+ gboolean wait_for_metadata,
+ NautilusDirectoryCallback callback,
+ gpointer callback_data)
+{
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ /* FIXME: Not implemented. */
+ g_warning ("NautilusTrashDirectory: call_when_ready not implemented");
+}
+
+static void
+trash_cancel_callback (NautilusDirectory *directory,
+ NautilusDirectoryCallback callback,
+ gpointer callback_data)
+{
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ /* FIXME: Not implemented. */
+ g_warning ("NautilusTrashDirectory: cancel_callback not implemented");
+}
+
+static void
+trash_file_monitor_add (NautilusDirectory *directory,
+ gconstpointer client,
+ GList *file_attributes,
+ gboolean monitor_metadata,
+ gboolean force_reload,
+ NautilusDirectoryCallback callback,
+ gpointer callback_data)
+{
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ /* FIXME: Not implemented. */
+ g_warning ("NautilusTrashDirectory: file_monitor_add not implemented");
+}
+
+static void
+trash_file_monitor_remove (NautilusDirectory *directory,
+ gconstpointer client)
+{
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ /* FIXME: Not implemented. */
+ g_warning ("NautilusTrashDirectory: file_monitor_remove not implemented");
+}
+
+static gboolean
+trash_are_all_files_seen (NautilusDirectory *directory)
+{
+ NautilusTrashDirectory *trash;
+ GList *p;
+ RealTrashDirectory *trash_directory;
+
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ trash = NAUTILUS_TRASH_DIRECTORY (trash);
+ for (p = trash->details->directories; p != NULL; p = p->next) {
+ trash_directory = p->data;
+
+ if (!nautilus_directory_are_all_files_seen (trash_directory->directory)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+static gboolean
+trash_is_not_empty (NautilusDirectory *directory)
+{
+ NautilusTrashDirectory *trash;
+ GList *p;
+ RealTrashDirectory *trash_directory;
+
+ g_assert (NAUTILUS_IS_TRASH_DIRECTORY (directory));
+
+ trash = NAUTILUS_TRASH_DIRECTORY (trash);
+ for (p = trash->details->directories; p != NULL; p = p->next) {
+ trash_directory = p->data;
+
+ if (nautilus_directory_is_not_empty (trash_directory->directory)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void
+nautilus_trash_directory_initialize_class (gpointer klass)
+{
+ GtkObjectClass *object_class;
+ NautilusDirectoryClass *directory_class;
+
+ object_class = GTK_OBJECT_CLASS (klass);
+ directory_class = NAUTILUS_DIRECTORY_CLASS (klass);
+
+ object_class->destroy = trash_destroy;
+
+ directory_class->contains_file = trash_contains_file;
+ directory_class->call_when_ready = trash_call_when_ready;
+ directory_class->cancel_callback = trash_cancel_callback;
+ directory_class->file_monitor_add = trash_file_monitor_add;
+ directory_class->file_monitor_remove = trash_file_monitor_remove;
+ directory_class->are_all_files_seen = trash_are_all_files_seen;
+ directory_class->is_not_empty = trash_is_not_empty;
+}