X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkfilesystem.h;h=03782d6f7f5cfaa13b44012366c6034c4f48960e;hb=fd51c8f5e9d6fb68c8e81b9b1e2ab80931f963f0;hp=1124fc9f52f1587c761f4cdab701f03962624c2a;hpb=da83c1cbf3b0b9bdcd0cb9c076aaab08c4fd0faf;p=~andy%2Fgtk diff --git a/gtk/gtkfilesystem.h b/gtk/gtkfilesystem.h index 1124fc9f5..03782d6f7 100644 --- a/gtk/gtkfilesystem.h +++ b/gtk/gtkfilesystem.h @@ -1,5 +1,5 @@ /* GTK - The GIMP Toolkit - * gtkfilesystem.h: Abstract file system interfaces + * gtkfilesystem.h: Filesystem abstraction functions. * Copyright (C) 2003, Red Hat, Inc. * * This library is free software; you can redistribute it and/or @@ -13,344 +13,123 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . */ #ifndef __GTK_FILE_SYSTEM_H__ #define __GTK_FILE_SYSTEM_H__ -/* This is a "semi-private" header; it is meant only for - * alternate GtkFileChooser backend modules; no stability guarantees - * are made at this point - */ -#ifndef GTK_FILE_SYSTEM_ENABLE_UNSUPPORTED -#error "GtkFileSystem is not supported API for general use" -#endif - -#include +#include #include /* For icon handling */ G_BEGIN_DECLS -typedef gint64 GtkFileTime; +#define GTK_TYPE_FILE_SYSTEM (_gtk_file_system_get_type ()) +#define GTK_FILE_SYSTEM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GTK_TYPE_FILE_SYSTEM, GtkFileSystem)) +#define GTK_FILE_SYSTEM_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GTK_TYPE_FILE_SYSTEM, GtkFileSystemClass)) +#define GTK_IS_FILE_SYSTEM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GTK_TYPE_FILE_SYSTEM)) +#define GTK_IS_FILE_SYSTEM_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), GTK_TYPE_FILE_SYSTEM)) +#define GTK_FILE_SYSTEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GTK_TYPE_FILE_SYSTEM, GtkFileSystemClass)) -typedef struct _GtkFileFolder GtkFileFolder; -typedef struct _GtkFileFolderIface GtkFileFolderIface; -typedef struct _GtkFileInfo GtkFileInfo; -typedef struct _GtkFileSystem GtkFileSystem; -typedef struct _GtkFileSystemIface GtkFileSystemIface; -typedef struct _GtkFileSystemVolume GtkFileSystemVolume; +typedef struct GtkFileSystem GtkFileSystem; +typedef struct GtkFileSystemPrivate GtkFileSystemPrivate; +typedef struct GtkFileSystemClass GtkFileSystemClass; -typedef struct _GtkFilePath GtkFilePath; -/* Mask of information about a file, for monitoring and - * gtk_file_system_get_info() - */ -typedef enum { - GTK_FILE_INFO_DISPLAY_NAME = 1 << 0, - GTK_FILE_INFO_IS_FOLDER = 1 << 1, - GTK_FILE_INFO_IS_HIDDEN = 1 << 2, - GTK_FILE_INFO_MIME_TYPE = 1 << 3, - GTK_FILE_INFO_MODIFICATION_TIME = 1 << 4, - GTK_FILE_INFO_SIZE = 1 << 5, - GTK_FILE_INFO_ALL = (1 << 6) - 1 -} GtkFileInfoType; +typedef struct GtkFileSystemVolume GtkFileSystemVolume; /* opaque struct */ +typedef struct GtkFileSystemBookmark GtkFileSystemBookmark; /* opaque struct */ -/* GError enumeration for GtkFileSystem - */ -#define GTK_FILE_SYSTEM_ERROR (gtk_file_system_error_quark ()) - -typedef enum +struct GtkFileSystem { - GTK_FILE_SYSTEM_ERROR_NONEXISTENT, - GTK_FILE_SYSTEM_ERROR_NOT_FOLDER, - GTK_FILE_SYSTEM_ERROR_INVALID_URI, - GTK_FILE_SYSTEM_ERROR_BAD_FILENAME, - GTK_FILE_SYSTEM_ERROR_FAILED, - GTK_FILE_SYSTEM_ERROR_ALREADY_EXISTS -} GtkFileSystemError; - -GQuark gtk_file_system_error_quark (void); - -/* Boxed-type for gtk_file_folder_get_info() results - */ -#define GTK_TYPE_FILE_INFO (gtk_file_info_get_type ()) - -GType gtk_file_info_get_type (void); - -GtkFileInfo *gtk_file_info_new (void); -GtkFileInfo *gtk_file_info_copy (GtkFileInfo *info); -void gtk_file_info_free (GtkFileInfo *info); - - -G_CONST_RETURN gchar *gtk_file_info_get_display_name (const GtkFileInfo *info); -G_CONST_RETURN gchar *gtk_file_info_get_display_key (const GtkFileInfo *info); -void gtk_file_info_set_display_name (GtkFileInfo *info, - const gchar *display_name); -gboolean gtk_file_info_get_is_folder (const GtkFileInfo *info); -void gtk_file_info_set_is_folder (GtkFileInfo *info, - gboolean is_folder); -gboolean gtk_file_info_get_is_hidden (const GtkFileInfo *info); -void gtk_file_info_set_is_hidden (GtkFileInfo *info, - gboolean is_hidden); -G_CONST_RETURN gchar *gtk_file_info_get_mime_type (const GtkFileInfo *info); -void gtk_file_info_set_mime_type (GtkFileInfo *info, - const gchar *mime_type); -GtkFileTime gtk_file_info_get_modification_time (const GtkFileInfo *info); -void gtk_file_info_set_modification_time (GtkFileInfo *info, - GtkFileTime modification_time); -gint64 gtk_file_info_get_size (const GtkFileInfo *info); -void gtk_file_info_set_size (GtkFileInfo *info, - gint64 size); - -/* The base GtkFileSystem interface - */ -#define GTK_TYPE_FILE_SYSTEM (gtk_file_system_get_type ()) -#define GTK_FILE_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_SYSTEM, GtkFileSystem)) -#define GTK_IS_FILE_SYSTEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_SYSTEM)) -#define GTK_FILE_SYSTEM_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_SYSTEM, GtkFileSystemIface)) - -struct _GtkFileSystemIface -{ - GTypeInterface base_iface; - - /* Methods - */ - GSList * (*list_volumes) (GtkFileSystem *file_system); - GtkFileSystemVolume * (*get_volume_for_path) (GtkFileSystem *file_system, - const GtkFilePath *path); - - GtkFileFolder * (*get_folder) (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkFileInfoType types, - GError **error); - gboolean (*create_folder) (GtkFileSystem *file_system, - const GtkFilePath *path, - GError **error); - - /* Volumes - */ - - void (*volume_free) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); - GtkFilePath * (*volume_get_base_path) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); - gboolean (*volume_get_is_mounted) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); - gboolean (*volume_mount) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume, - GError **error); - char * (*volume_get_display_name) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); - GdkPixbuf * (*volume_render_icon) (GtkFileSystem *file_system, - GtkFileSystemVolume *volume, - GtkWidget *widget, - gint pixel_size, - GError **error); - - /* Path Manipulation - */ - gboolean (*get_parent) (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkFilePath **parent, - GError **error); - GtkFilePath * (*make_path) (GtkFileSystem *file_system, - const GtkFilePath *base_path, - const gchar *display_name, - GError **error); - gboolean (*parse) (GtkFileSystem *file_system, - const GtkFilePath *base_path, - const gchar *str, - GtkFilePath **folder, - gchar **file_part, - GError **error); - gchar * (*path_to_uri) (GtkFileSystem *file_system, - const GtkFilePath *path); - gchar * (*path_to_filename) (GtkFileSystem *file_system, - const GtkFilePath *path); - GtkFilePath *(*uri_to_path) (GtkFileSystem *file_system, - const gchar *uri); - GtkFilePath *(*filename_to_path) (GtkFileSystem *file_system, - const gchar *path); - - /* Icons */ - - GdkPixbuf * (*render_icon) (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkWidget *widget, - gint pixel_size, - GError **error); - - /* Bookmarks */ - - gboolean (*insert_bookmark) (GtkFileSystem *file_system, - const GtkFilePath *path, - gint position, - GError **error); - gboolean (*remove_bookmark) (GtkFileSystem *file_system, - const GtkFilePath *path, - GError **error); - GSList * (*list_bookmarks) (GtkFileSystem *file_system); + GObject parent_object; - /* Signals - */ - void (*volumes_changed) (GtkFileSystem *file_system); - void (*bookmarks_changed) (GtkFileSystem *file_system); + GtkFileSystemPrivate *priv; }; -GType gtk_file_system_get_type (void); - -GSList * gtk_file_system_list_volumes (GtkFileSystem *file_system); - -GtkFileSystemVolume *gtk_file_system_get_volume_for_path (GtkFileSystem *file_system, - const GtkFilePath *path); - -void gtk_file_system_volume_free (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); -GtkFilePath * gtk_file_system_volume_get_base_path (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); -gboolean gtk_file_system_volume_get_is_mounted (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); -gboolean gtk_file_system_volume_mount (GtkFileSystem *file_system, - GtkFileSystemVolume *volume, - GError **error); -char * gtk_file_system_volume_get_display_name (GtkFileSystem *file_system, - GtkFileSystemVolume *volume); -GdkPixbuf * gtk_file_system_volume_render_icon (GtkFileSystem *file_system, - GtkFileSystemVolume *volume, - GtkWidget *widget, - gint pixel_size, - GError **error); - -gboolean gtk_file_system_get_parent (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkFilePath **parent, - GError **error); -GtkFileFolder *gtk_file_system_get_folder (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkFileInfoType types, - GError **error); -gboolean gtk_file_system_create_folder (GtkFileSystem *file_system, - const GtkFilePath *path, - GError **error); -GtkFilePath * gtk_file_system_make_path (GtkFileSystem *file_system, - const GtkFilePath *base_path, - const gchar *display_name, - GError **error); -gboolean gtk_file_system_parse (GtkFileSystem *file_system, - const GtkFilePath *base_path, - const gchar *str, - GtkFilePath **folder, - gchar **file_part, - GError **error); - -gchar * gtk_file_system_path_to_uri (GtkFileSystem *file_system, - const GtkFilePath *path); -gchar * gtk_file_system_path_to_filename (GtkFileSystem *file_system, - const GtkFilePath *path); -GtkFilePath *gtk_file_system_uri_to_path (GtkFileSystem *file_system, - const gchar *uri); -GtkFilePath *gtk_file_system_filename_to_path (GtkFileSystem *file_system, - const gchar *filename); - -gboolean gtk_file_system_path_is_local (GtkFileSystem *filesystem, - const GtkFilePath *path); - -GdkPixbuf *gtk_file_system_render_icon (GtkFileSystem *file_system, - const GtkFilePath *path, - GtkWidget *widget, - gint pixel_size, - GError **error); - -gboolean gtk_file_system_insert_bookmark (GtkFileSystem *file_system, - const GtkFilePath *path, - gint position, - GError **error); -gboolean gtk_file_system_remove_bookmark (GtkFileSystem *file_system, - const GtkFilePath *path, - GError **error); -GSList *gtk_file_system_list_bookmarks (GtkFileSystem *file_system); - - -/* - * Detailed information about a particular folder - */ -#define GTK_TYPE_FILE_FOLDER (gtk_file_folder_get_type ()) -#define GTK_FILE_FOLDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_FOLDER, GtkFileFolder)) -#define GTK_IS_FILE_FOLDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_FOLDER)) -#define GTK_FILE_FOLDER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GTK_TYPE_FILE_FOLDER, GtkFileFolderIface)) - -struct _GtkFileFolderIface +struct GtkFileSystemClass { - GTypeInterface base_iface; - - /* Methods - */ - GtkFileInfo * (*get_info) (GtkFileFolder *folder, - const GtkFilePath *path, - GError **error); - gboolean (*list_children) (GtkFileFolder *folder, - GSList **children, - GError **error); + GObjectClass parent_class; - /* ??? refresh() ??? */ - - /* Signals - */ - void (*deleted) (GtkFileFolder *monitor); - void (*files_added) (GtkFileFolder *monitor, - GSList *paths); - void (*files_changed) (GtkFileFolder *monitor, - GSList *paths); - void (*files_removed) (GtkFileFolder *monitor, - GSList *paths); + void (*bookmarks_changed) (GtkFileSystem *file_system); + void (*volumes_changed) (GtkFileSystem *file_system); }; -GType gtk_file_folder_get_type (void); -gboolean gtk_file_folder_list_children (GtkFileFolder *folder, - GSList **children, - GError **error); -GtkFileInfo *gtk_file_folder_get_info (GtkFileFolder *folder, - const GtkFilePath *path, - GError **error); - - -/* GtkFilePath */ -#define GTK_TYPE_FILE_PATH (gtk_file_path_get_type ()) -#define GTK_FILE_PATH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_FILE_PATH, GtkFilePath)) -#define GTK_IS_FILE_PATH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_FILE_PATH)) - -GType gtk_file_path_get_type (void); -#ifdef __GNUC__ -#define gtk_file_path_new_dup(str) \ - ({ const gchar *__s = (str); (GtkFilePath *)g_strdup(__s); }) -#define gtk_file_path_new_steal(str) \ - ({ gchar *__s = (str); (GtkFilePath *)__s; }) -#define gtk_file_path_get_string(path) \ - ({ const GtkFilePath *__p = (path); (const gchar *)__p; }) -#define gtk_file_path_free(path) \ - ({ GtkFilePath *__p = (path); g_free (__p); }) -#else /* __GNUC__ */ -#define gtk_file_path_new_dup(str) ((GtkFilePath *)g_strdup(str)) -#define gtk_file_path_new_steal(str) ((GtkFilePath *)(str)) -#define gtk_file_path_get_string(str) ((const gchar *)(str)) -#define gtk_file_path_free(path) g_free (path) -#endif/* __GNUC__ */ - -#define gtk_file_path_copy(path) gtk_file_path_new_dup (gtk_file_path_get_string(path)) -#define gtk_file_path_compare(path1,path2) strcmp (gtk_file_path_get_string (path1), \ - gtk_file_path_get_string (path2)) - -GSList *gtk_file_paths_sort (GSList *paths); -GSList *gtk_file_paths_copy (GSList *paths); -void gtk_file_paths_free (GSList *paths); - -/* GtkFileSystem modules support */ -GtkFileSystem *_gtk_file_system_create (const char *file_system_name); +typedef void (* GtkFileSystemGetInfoCallback) (GCancellable *cancellable, + GFileInfo *file_info, + const GError *error, + gpointer data); +typedef void (* GtkFileSystemVolumeMountCallback) (GCancellable *cancellable, + GtkFileSystemVolume *volume, + const GError *error, + gpointer data); + +/* GtkFileSystem methods */ +GType _gtk_file_system_get_type (void) G_GNUC_CONST; + +GtkFileSystem * _gtk_file_system_new (void); + +GSList * _gtk_file_system_list_volumes (GtkFileSystem *file_system); +GSList * _gtk_file_system_list_bookmarks (GtkFileSystem *file_system); + +GCancellable * _gtk_file_system_get_info (GtkFileSystem *file_system, + GFile *file, + const gchar *attributes, + GtkFileSystemGetInfoCallback callback, + gpointer data); +GCancellable * _gtk_file_system_mount_volume (GtkFileSystem *file_system, + GtkFileSystemVolume *volume, + GMountOperation *mount_operation, + GtkFileSystemVolumeMountCallback callback, + gpointer data); +GCancellable * _gtk_file_system_mount_enclosing_volume (GtkFileSystem *file_system, + GFile *file, + GMountOperation *mount_operation, + GtkFileSystemVolumeMountCallback callback, + gpointer data); + +gboolean _gtk_file_system_insert_bookmark (GtkFileSystem *file_system, + GFile *file, + gint position, + GError **error); +gboolean _gtk_file_system_remove_bookmark (GtkFileSystem *file_system, + GFile *file, + GError **error); + +gchar * _gtk_file_system_get_bookmark_label (GtkFileSystem *file_system, + GFile *file); +void _gtk_file_system_set_bookmark_label (GtkFileSystem *file_system, + GFile *file, + const gchar *label); + +GtkFileSystemVolume * _gtk_file_system_get_volume_for_file (GtkFileSystem *file_system, + GFile *file); + +/* GtkFileSystemVolume methods */ +gchar * _gtk_file_system_volume_get_display_name (GtkFileSystemVolume *volume); +gboolean _gtk_file_system_volume_is_mounted (GtkFileSystemVolume *volume); +GFile * _gtk_file_system_volume_get_root (GtkFileSystemVolume *volume); +GdkPixbuf * _gtk_file_system_volume_render_icon (GtkFileSystemVolume *volume, + GtkWidget *widget, + gint icon_size, + GError **error); + +GtkFileSystemVolume *_gtk_file_system_volume_ref (GtkFileSystemVolume *volume); +void _gtk_file_system_volume_unref (GtkFileSystemVolume *volume); + +/* GtkFileSystemBookmark methods */ +void _gtk_file_system_bookmark_free (GtkFileSystemBookmark *bookmark); + +/* GFileInfo helper functions */ +GdkPixbuf * _gtk_file_info_render_icon (GFileInfo *info, + GtkWidget *widget, + gint icon_size); + +gboolean _gtk_file_info_consider_as_directory (GFileInfo *info); + +/* GFile helper functions */ +gboolean _gtk_file_has_native_path (GFile *file); G_END_DECLS