mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-17 23:01:59 +00:00
79f2702490
reviewed by: Darin Adler <darin@eazel.com> * libnautilus-extensions/nautilus-directory-async.c: (is_anyone_waiting_for_metafile), (call_ready_callbacks), (start_or_stop_io), (nautilus_directory_cancel): * libnautilus-extensions/nautilus-directory-metafile-monitor.c: (corba_metafile_ready): * libnautilus-extensions/nautilus-directory-metafile.c: (get_metafile), (nautilus_directory_rename_file_metadata), (nautilus_directory_rename_directory_metadata): * libnautilus-extensions/nautilus-directory-metafile.h: * libnautilus-extensions/nautilus-directory-private.h: * libnautilus-extensions/nautilus-directory.c: (nautilus_directory_initialize), (nautilus_directory_destroy), (set_directory_uri), (change_directory_uri), (nautilus_self_check_directory): * libnautilus-extensions/nautilus-directory.h: * libnautilus-extensions/nautilus-file-utilities.c: (nautilus_file_name_matches_backup_pattern), (nautilus_file_name_matches_metafile_pattern): * libnautilus-extensions/nautilus-file-utilities.h: * libnautilus-extensions/nautilus-file.c: (nautilus_file_is_metafile): * libnautilus-extensions/nautilus-file.h: * libnautilus-extensions/nautilus-metafile-factory.c: (corba_open): * libnautilus-extensions/nautilus-metafile-server.idl: * libnautilus-extensions/nautilus-metafile.c: (nautilus_metafile_class_init), (nautilus_metafile_init), (destroy), (construct_private_metafile_vfs_uri), (nautilus_metafile_set_directory_uri), (nautilus_metafile_new), (nautilus_metafile_get), (schedule_next_read), (async_read_start), (async_read_done), (async_read_cancel), (corba_is_read), (corba_get), (corba_get_list), (corba_set), (corba_set_list), (corba_copy), (corba_remove), (corba_rename), (corba_rename_directory), (corba_register_monitor), (corba_unregister_monitor), (nautilus_metafile_notify_metafile_ready), (call_metafile_changed), (call_metafile_changed_for_all_files_mentioned_in_metafile), (call_metafile_changed_for_one_file), (create_metafile_root), (get_file_node), (get_metadata_string_from_metafile), (get_metadata_list_from_metafile), (set_metadata_string_in_metafile), (set_metadata_list_in_metafile), (set_metadata_in_metafile), (get_metadata_string_from_table), (get_metadata_list_from_table), (set_metadata_eat_value), (metafile_free_metadata), (get_file_metadata), (get_file_metadata_list), (set_file_metadata), (set_file_metadata_list), (metafile_get_file_uri), (rename_file_metadata), (apply_one_change), (apply_file_changes), (nautilus_metafile_apply_pending_changes), (copy_file_metadata), (remove_file_metadata), (nautilus_metafile_set_metafile_contents), (metafile_read_cancel), (can_use_public_metafile), (metafile_read_mark_done), (metafile_read_done), (metafile_read_try_public_metafile), (metafile_read_check_for_directory_callback), (metafile_read_check_for_directory), (metafile_read_failed), (metafile_read_done_callback), (metafile_read_restart), (allow_metafile), (metafile_read_start), (metafile_write_done), (metafile_write_failed), (metafile_write_failure_close_callback), (metafile_write_success_close_callback), (metafile_write_callback), (metafile_write_create_callback), (metafile_write_start), (metafile_write), (metafile_write_idle_callback), (directory_request_write_metafile): * libnautilus-extensions/nautilus-metafile.h: * libnautilus-extensions/nautilus-vfs-directory.c: (vfs_is_not_empty): Factored the metadata reading/writing code out of nautilus-directory - bug 6661.
208 lines
8.9 KiB
C
208 lines
8.9 KiB
C
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
|
|
|
|
nautilus-directory.h: Nautilus directory model.
|
|
|
|
Copyright (C) 1999, 2000, 2001 Eazel, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public
|
|
License along with this program; if not, write to the
|
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
|
|
Author: Darin Adler <darin@eazel.com>
|
|
*/
|
|
|
|
#ifndef NAUTILUS_DIRECTORY_H
|
|
#define NAUTILUS_DIRECTORY_H
|
|
|
|
#include <gtk/gtkobject.h>
|
|
#include <libgnomevfs/gnome-vfs-types.h>
|
|
|
|
/* NautilusDirectory is a class that manages the model for a directory,
|
|
real or virtual, for Nautilus, mainly the file-manager component. The directory is
|
|
responsible for managing both real data and cached metadata. On top of
|
|
the file system independence provided by gnome-vfs, the directory
|
|
object also provides:
|
|
|
|
1) A synchronization framework, which notifies via signals as the
|
|
set of known files changes.
|
|
2) An abstract interface for getting attributes and performing
|
|
operations on files.
|
|
*/
|
|
|
|
#define NAUTILUS_TYPE_DIRECTORY \
|
|
(nautilus_directory_get_type ())
|
|
#define NAUTILUS_DIRECTORY(obj) \
|
|
(GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_DIRECTORY, NautilusDirectory))
|
|
#define NAUTILUS_DIRECTORY_CLASS(klass) \
|
|
(GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_DIRECTORY, NautilusDirectoryClass))
|
|
#define NAUTILUS_IS_DIRECTORY(obj) \
|
|
(GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_DIRECTORY))
|
|
#define NAUTILUS_IS_DIRECTORY_CLASS(klass) \
|
|
(GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_DIRECTORY))
|
|
|
|
/* NautilusFile is defined both here and in nautilus-file.h. */
|
|
#ifndef NAUTILUS_FILE_DEFINED
|
|
#define NAUTILUS_FILE_DEFINED
|
|
typedef struct NautilusFile NautilusFile;
|
|
#endif
|
|
|
|
/* FIXME bugzilla.eazel.com 5382:
|
|
* Increase or remove this limit?
|
|
*/
|
|
/* FIXME bugzilla.eazel.com 5603:
|
|
* This limit is not actually "hard", which can lead to some minor UI problems.
|
|
*/
|
|
#define NAUTILUS_DIRECTORY_FILE_LIST_HARD_LIMIT 4000
|
|
|
|
typedef struct NautilusDirectoryDetails NautilusDirectoryDetails;
|
|
|
|
typedef struct
|
|
{
|
|
GtkObject object;
|
|
NautilusDirectoryDetails *details;
|
|
} NautilusDirectory;
|
|
|
|
typedef void (*NautilusDirectoryCallback) (NautilusDirectory *directory,
|
|
GList *files,
|
|
gpointer callback_data);
|
|
|
|
typedef struct
|
|
{
|
|
GtkObjectClass parent_class;
|
|
|
|
/*** Notification signals for clients to connect to. ***/
|
|
|
|
/* The files_added signal is emitted as the directory model
|
|
* discovers new files.
|
|
*/
|
|
void (* files_added) (NautilusDirectory *directory,
|
|
GList *added_files);
|
|
|
|
/* The files_changed signal is emitted as changes occur to
|
|
* existing files that are noticed by the synchronization framework,
|
|
* including when an old file has been deleted. When an old file
|
|
* has been deleted, this is the last chance to forget about these
|
|
* file objects, which are about to be unref'd. Use a call to
|
|
* nautilus_file_is_gone () to test for this case.
|
|
*/
|
|
void (* files_changed) (NautilusDirectory *directory,
|
|
GList *changed_files);
|
|
|
|
/* The done_loading signal is emitted when a directory load
|
|
* request completes. This is needed because, at least in the
|
|
* case where the directory is empty, the caller will receive
|
|
* no kind of notification at all when a directory load
|
|
* initiated by `nautilus_directory_file_monitor_add' completes.
|
|
*/
|
|
void (* done_loading) (NautilusDirectory *directory);
|
|
|
|
void (* load_error) (NautilusDirectory *directory);
|
|
|
|
/*** Virtual functions for subclasses to override. ***/
|
|
gboolean (* contains_file) (NautilusDirectory *directory,
|
|
NautilusFile *file);
|
|
void (* call_when_ready) (NautilusDirectory *directory,
|
|
GList *file_attributes,
|
|
NautilusDirectoryCallback callback,
|
|
gpointer callback_data);
|
|
void (* cancel_callback) (NautilusDirectory *directory,
|
|
NautilusDirectoryCallback callback,
|
|
gpointer callback_data);
|
|
void (* file_monitor_add) (NautilusDirectory *directory,
|
|
gconstpointer client,
|
|
gboolean monitor_hidden_files,
|
|
gboolean monitor_backup_files,
|
|
GList *monitor_attributes);
|
|
void (* file_monitor_remove) (NautilusDirectory *directory,
|
|
gconstpointer client);
|
|
void (* force_reload) (NautilusDirectory *directory);
|
|
gboolean (* are_all_files_seen) (NautilusDirectory *directory);
|
|
gboolean (* is_not_empty) (NautilusDirectory *directory);
|
|
char * (* get_name_for_self_as_new_file) (NautilusDirectory *directory);
|
|
} NautilusDirectoryClass;
|
|
|
|
/* Basic GtkObject requirements. */
|
|
GtkType nautilus_directory_get_type (void);
|
|
|
|
/* Get a directory given a uri.
|
|
* Creates the appropriate subclass given the uri mappings.
|
|
* Returns a referenced object, not a floating one. Unref when finished.
|
|
* If two windows are viewing the same uri, the directory object is shared.
|
|
*/
|
|
NautilusDirectory *nautilus_directory_get (const char *uri);
|
|
|
|
/* Covers for gtk_object_ref and gtk_object_unref that provide two conveniences:
|
|
* 1) You don't have to cast to GtkObject *, so using these is type safe.
|
|
* 2) You are allowed to call these with NULL,
|
|
*/
|
|
void nautilus_directory_ref (NautilusDirectory *directory);
|
|
void nautilus_directory_unref (NautilusDirectory *directory);
|
|
|
|
/* Access to a URI. */
|
|
char * nautilus_directory_get_uri (NautilusDirectory *directory);
|
|
|
|
/* Is this file still alive and in this directory? */
|
|
gboolean nautilus_directory_contains_file (NautilusDirectory *directory,
|
|
NautilusFile *file);
|
|
|
|
/* Get the uri of the file in the directory, NULL if not found */
|
|
char * nautilus_directory_get_file_uri (NautilusDirectory *directory,
|
|
const char *file_name);
|
|
|
|
/* Get (and ref) a NautilusFile object for this directory. */
|
|
NautilusFile * nautilus_directory_get_corresponding_file (NautilusDirectory *directory);
|
|
|
|
|
|
/* Waiting for data that's read asynchronously.
|
|
* The file attribute and metadata keys are for files in the directory.
|
|
* If any file attributes or metadata keys are passed, it won't call
|
|
* until all the files are seen.
|
|
*/
|
|
void nautilus_directory_call_when_ready (NautilusDirectory *directory,
|
|
GList *file_attributes,
|
|
NautilusDirectoryCallback callback,
|
|
gpointer callback_data);
|
|
void nautilus_directory_cancel_callback (NautilusDirectory *directory,
|
|
NautilusDirectoryCallback callback,
|
|
gpointer callback_data);
|
|
|
|
|
|
/* Monitor the files in a directory. */
|
|
void nautilus_directory_file_monitor_add (NautilusDirectory *directory,
|
|
gconstpointer client,
|
|
gboolean monitor_hidden_files,
|
|
gboolean monitor_backup_files,
|
|
GList *attributes);
|
|
void nautilus_directory_file_monitor_remove (NautilusDirectory *directory,
|
|
gconstpointer client);
|
|
void nautilus_directory_force_reload (NautilusDirectory *directory);
|
|
|
|
/* Return true if the directory has information about all the files.
|
|
* This will be false until the directory has been read at least once.
|
|
*/
|
|
gboolean nautilus_directory_are_all_files_seen (NautilusDirectory *directory);
|
|
|
|
/* Return true if the directory is local. */
|
|
gboolean nautilus_directory_is_local (NautilusDirectory *directory);
|
|
|
|
/* Return false if directory contains anything besides a Nautilus metafile.
|
|
* Only valid if directory is monitored. Used by the Trash monitor.
|
|
*/
|
|
gboolean nautilus_directory_is_not_empty (NautilusDirectory *directory);
|
|
gboolean nautilus_directory_file_list_length_reached (NautilusDirectory *directory);
|
|
|
|
char * nautilus_directory_make_uri_canonical (const char *uri);
|
|
|
|
#endif /* NAUTILUS_DIRECTORY_H */
|