diff options
author | Darin Adler <darin@src.gnome.org> | 2000-08-15 21:55:12 +0000 |
---|---|---|
committer | Darin Adler <darin@src.gnome.org> | 2000-08-15 21:55:12 +0000 |
commit | 8d0a34c537bb61f854d84877374b510d8bb4afba (patch) | |
tree | 874fc7bc9476787ac14017e47b919909c7e93a62 /libnautilus-private/nautilus-trash-directory.c | |
parent | cfdbd50b5972561619fa66c2d22d84481ca71415 (diff) | |
download | nautilus-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.c | 147 |
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; +} |