]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkfilesystem.h
Revert the patch to #137520, as 2.4.1 is for conservative bug fixes only.
[~andy/gtk] / gtk / gtkfilesystem.h
index ad388aa6e6cbbe63b1fd0b8d7f525ddb3dfb38be..1124fc9f52f1587c761f4cdab701f03962624c2a 100644 (file)
 #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 <glib-object.h>
-#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gtk/gtkwidget.h>     /* For icon handling */
 
 G_BEGIN_DECLS
 
 typedef gint64 GtkFileTime;
 
-typedef struct _GtkFileFolder      GtkFileFolder;
-typedef struct _GtkFileFolderIface GtkFileFolderIface;
-typedef struct _GtkFileInfo        GtkFileInfo;
-typedef struct _GtkFileSystem      GtkFileSystem;
-typedef struct _GtkFileSystemIface GtkFileSystemIface;
+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 _GtkFilePath        GtkFilePath;
 
 /* Mask of information about a file, for monitoring and
  * gtk_file_system_get_info()
@@ -44,7 +55,7 @@ typedef enum {
   GTK_FILE_INFO_MIME_TYPE         = 1 << 3,
   GTK_FILE_INFO_MODIFICATION_TIME = 1 << 4,
   GTK_FILE_INFO_SIZE              = 1 << 5,
-  GTK_FILE_INFO_ICON              = 1 << 6
+  GTK_FILE_INFO_ALL               = (1 << 6) - 1
 } GtkFileInfoType;
 
 /* GError enumeration for GtkFileSystem
@@ -54,11 +65,12 @@ typedef enum {
 
 typedef enum
 {
-  GTK_FILE_SYSTEM_ERROR_NONEXISTANT,
+  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);
@@ -93,9 +105,6 @@ void                  gtk_file_info_set_modification_time (GtkFileInfo       *in
 gint64                gtk_file_info_get_size              (const GtkFileInfo *info);
 void                  gtk_file_info_set_size              (GtkFileInfo       *info,
                                                           gint64             size);
-GdkPixbuf *           gtk_file_info_get_icon              (const GtkFileInfo *info);
-void                  gtk_file_info_set_icon              (GtkFileInfo       *info,
-                                                          GdkPixbuf         *icon);
 
 /* The base GtkFileSystem interface
  */
@@ -110,71 +119,162 @@ struct _GtkFileSystemIface
 
   /* Methods
    */
-  GSList *           (*list_roots)     (GtkFileSystem *file_system);
-
-  GtkFileInfo *      (*get_root_info)  (GtkFileSystem   *file_system,
-                                       const gchar     *uri,
-                                       GtkFileInfoType  types,
-                                       GError         **error);
-  
-  GtkFileFolder *    (*get_folder)     (GtkFileSystem  *file_system,
-                                       const gchar    *uri,
-                                       GtkFileInfoType types,
-                                       GError        **error);
-  gboolean           (*create_folder)  (GtkFileSystem  *file_system,
-                                       const gchar    *uri,
-                                       GError        **error);
-
-  /* URI Manipulation
+  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 gchar    *uri,
-                                       gchar         **parent,
-                                       GError        **error);
-  gchar *            (*make_uri)       (GtkFileSystem  *file_system,
-                                       const gchar    *base_uri,
-                                       const gchar    *display_name,
-                                       GError        **error);                                 
-  gboolean           (*parse)          (GtkFileSystem  *file_system,
-                                       const gchar    *base_uri,
-                                       const gchar    *str,
-                                       gchar         **folder,
-                                       gchar         **file_part,
-                                       GError        **error);
+  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);
+
   /* Signals
    */
-  void (*roots_changed) (GtkFileSystem *file_system);
+  void (*volumes_changed)   (GtkFileSystem *file_system);
+  void (*bookmarks_changed) (GtkFileSystem *file_system);
 };
 
 GType             gtk_file_system_get_type       (void);
 
-GSList *          gtk_file_system_list_roots     (GtkFileSystem    *file_system);
-GtkFileInfo *     gtk_file_system_get_root_info  (GtkFileSystem    *file_system,
-                                                 const gchar      *uri,
-                                                 GtkFileInfoType   types,
-                                                 GError          **error);
-  
-gboolean          gtk_file_system_get_parent     (GtkFileSystem    *file_system,
-                                                 const gchar      *uri,
-                                                 gchar           **parent,
-                                                 GError          **error);
-GtkFileFolder    *gtk_file_system_get_folder     (GtkFileSystem    *file_system,
-                                                 const gchar      *uri,
-                                                 GtkFileInfoType   types,
-                                                 GError          **error);
-gboolean          gtk_file_system_create_folder  (GtkFileSystem    *file_system,
-                                                 const gchar      *uri,
-                                                 GError          **error);
-gchar *           gtk_file_system_make_uri       (GtkFileSystem    *file_system,
-                                                 const gchar      *base_uri,
-                                                 const gchar      *display_name,
-                                                 GError          **error);
-gboolean          gtk_file_system_parse          (GtkFileSystem    *file_system,
-                                                 const gchar      *base_uri,
-                                                 const gchar      *str,
-                                                 gchar           **folder,
-                                                 gchar           **file_part,
-                                                 GError          **error);
+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
  */
@@ -189,33 +289,68 @@ struct _GtkFileFolderIface
 
   /* Methods
    */
-  GtkFileInfo *      (*get_info)       (GtkFileFolder  *folder,
-                                       const gchar    *uri,
-                                       GError        **error);
-  gboolean           (*list_children)  (GtkFileFolder  *folder,
-                                       GSList        **children,
-                                       GError        **error);
+  GtkFileInfo *      (*get_info)       (GtkFileFolder     *folder,
+                                       const GtkFilePath *path,
+                                       GError           **error);
+  gboolean           (*list_children)  (GtkFileFolder     *folder,
+                                       GSList           **children,
+                                       GError           **error);
 
   /* ??? refresh() ??? */
 
   /* Signals
    */
-  void (*deleted)      (GtkFileFolder *monitor);
+  void (*deleted)       (GtkFileFolder *monitor);
   void (*files_added)   (GtkFileFolder *monitor,
-                        GSList        *uris);
-  void (*file_changed) (GtkFileFolder *monitor,
-                       const gchar   *uri);
-  void (*file_removed) (GtkFileFolder *monitor,
-                       const gchar   *uri);
+                        GSList        *paths);
+  void (*files_changed) (GtkFileFolder *monitor,
+                        GSList        *paths);
+  void (*files_removed) (GtkFileFolder *monitor,
+                        GSList        *paths);
 };
 
 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 gchar      *uri,
-                                           GError          **error);
+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);
 
 G_END_DECLS