[gimp] app: change GimpImageFile and GimpDocumentList to speak GFile



commit 3f528288969dc35369c0f27e2d34c03022b89510
Author: Michael Natterer <mitch gimp org>
Date:   Sat Jul 5 12:51:54 2014 +0200

    app: change GimpImageFile and GimpDocumentList to speak GFile

 app/core/gimp-gui.c              |   14 ++++++------
 app/core/gimp-gui.h              |    8 +++---
 app/core/gimpdocumentlist.c      |   19 ++++++++++------
 app/core/gimpdocumentlist.h      |    4 +-
 app/core/gimpimagefile.c         |   44 ++++++++++++++++++++++++-------------
 app/core/gimpimagefile.h         |    2 +-
 app/core/gimpprogress.c          |    1 +
 app/core/gimptaggedcontainer.c   |    2 +-
 app/file/file-open.c             |   12 +++++++--
 app/file/file-save.c             |    9 +++++--
 app/file/file-utils.c            |    6 ++++-
 app/gegl/gimp-gegl.c             |    1 +
 app/gui/gui-vtable.c             |   32 ++++++++++++++++++---------
 app/operations/gimp-operations.c |    1 +
 14 files changed, 99 insertions(+), 56 deletions(-)
---
diff --git a/app/core/gimp-gui.c b/app/core/gimp-gui.c
index 71ff90c..8403a5e 100644
--- a/app/core/gimp-gui.c
+++ b/app/core/gimp-gui.c
@@ -62,7 +62,7 @@ gimp_gui_init (Gimp *gimp)
   gimp->gui.progress_free         = NULL;
   gimp->gui.pdb_dialog_set        = NULL;
   gimp->gui.pdb_dialog_close      = NULL;
-  gimp->gui.recent_list_add_uri   = NULL;
+  gimp->gui.recent_list_add_file  = NULL;
   gimp->gui.recent_list_load      = NULL;
 }
 
@@ -471,15 +471,15 @@ gimp_pdb_dialog_close (Gimp          *gimp,
 }
 
 gboolean
-gimp_recent_list_add_uri (Gimp        *gimp,
-                          const gchar *uri,
-                          const gchar *mime_type)
+gimp_recent_list_add_file (Gimp        *gimp,
+                           GFile       *file,
+                           const gchar *mime_type)
 {
   g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
-  g_return_val_if_fail (uri != NULL, FALSE);
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
 
-  if (gimp->gui.recent_list_add_uri)
-    return gimp->gui.recent_list_add_uri (gimp, uri, mime_type);
+  if (gimp->gui.recent_list_add_file)
+    return gimp->gui.recent_list_add_file (gimp, file, mime_type);
 
   return FALSE;
 }
diff --git a/app/core/gimp-gui.h b/app/core/gimp-gui.h
index 9d371f2..4c275a0 100644
--- a/app/core/gimp-gui.h
+++ b/app/core/gimp-gui.h
@@ -88,8 +88,8 @@ struct _GimpGui
   gboolean       (* pdb_dialog_close)      (Gimp                *gimp,
                                             GimpContainer       *container,
                                             const gchar         *callback_name);
-  gboolean       (* recent_list_add_uri)   (Gimp                *gimp,
-                                            const gchar         *uri,
+  gboolean       (* recent_list_add_file)  (Gimp                *gimp,
+                                            GFile               *file,
                                             const gchar         *mime_type);
   void           (* recent_list_load)      (Gimp                *gimp);
 
@@ -166,8 +166,8 @@ gboolean       gimp_pdb_dialog_set        (Gimp                *gimp,
 gboolean       gimp_pdb_dialog_close      (Gimp                *gimp,
                                            GimpContainer       *container,
                                            const gchar         *callback_name);
-gboolean       gimp_recent_list_add_uri   (Gimp                *gimp,
-                                           const gchar         *uri,
+gboolean       gimp_recent_list_add_file  (Gimp                *gimp,
+                                           GFile               *file,
                                            const gchar         *mime_type);
 void           gimp_recent_list_load      (Gimp                *gimp);
 
diff --git a/app/core/gimpdocumentlist.c b/app/core/gimpdocumentlist.c
index a794304..7b515da 100644
--- a/app/core/gimpdocumentlist.c
+++ b/app/core/gimpdocumentlist.c
@@ -63,31 +63,36 @@ gimp_document_list_new (Gimp *gimp)
 }
 
 GimpImagefile *
-gimp_document_list_add_uri (GimpDocumentList *document_list,
-                            const gchar      *uri,
-                            const gchar      *mime_type)
+gimp_document_list_add_file (GimpDocumentList *document_list,
+                             GFile            *file,
+                             const gchar      *mime_type)
 {
   Gimp          *gimp;
   GimpImagefile *imagefile;
   GimpContainer *container;
+  gchar         *uri;
 
   g_return_val_if_fail (GIMP_IS_DOCUMENT_LIST (document_list), NULL);
-  g_return_val_if_fail (uri != NULL, NULL);
+  g_return_val_if_fail (G_IS_FILE (file), NULL);
+
+  container = GIMP_CONTAINER (document_list);
 
   gimp = document_list->gimp;
 
-  container = GIMP_CONTAINER (document_list);
+  uri = g_file_get_uri (file);
 
   imagefile = (GimpImagefile *) gimp_container_get_child_by_name (container,
                                                                   uri);
 
+  g_free (uri);
+
   if (imagefile)
     {
       gimp_container_reorder (container, GIMP_OBJECT (imagefile), 0);
     }
   else
     {
-      imagefile = gimp_imagefile_new (gimp, uri);
+      imagefile = gimp_imagefile_new (gimp, file);
       gimp_container_add (container, GIMP_OBJECT (imagefile));
       g_object_unref (imagefile);
     }
@@ -95,7 +100,7 @@ gimp_document_list_add_uri (GimpDocumentList *document_list,
   gimp_imagefile_set_mime_type (imagefile, mime_type);
 
   if (gimp->config->save_document_history)
-    gimp_recent_list_add_uri (gimp, uri, mime_type);
+    gimp_recent_list_add_file (gimp, file, mime_type);
 
   return imagefile;
 }
diff --git a/app/core/gimpdocumentlist.h b/app/core/gimpdocumentlist.h
index f36aa94..dc58e21 100644
--- a/app/core/gimpdocumentlist.h
+++ b/app/core/gimpdocumentlist.h
@@ -46,8 +46,8 @@ struct _GimpDocumentListClass
 GType           gimp_document_list_get_type (void) G_GNUC_CONST;
 GimpContainer * gimp_document_list_new      (Gimp             *gimp);
 
-GimpImagefile * gimp_document_list_add_uri  (GimpDocumentList *document_list,
-                                             const gchar      *uri,
+GimpImagefile * gimp_document_list_add_file (GimpDocumentList *document_list,
+                                             GFile            *file,
                                              const gchar      *mime_type);
 
 
diff --git a/app/core/gimpimagefile.c b/app/core/gimpimagefile.c
index f39459e..ff49e76 100644
--- a/app/core/gimpimagefile.c
+++ b/app/core/gimpimagefile.c
@@ -65,6 +65,7 @@ struct _GimpImagefilePrivate
 {
   Gimp          *gimp;
 
+  GFile         *file;
   GimpThumbnail *thumbnail;
   GIcon         *icon;
   GCancellable  *icon_cancellable;
@@ -215,23 +216,34 @@ gimp_imagefile_finalize (GObject *object)
       private->icon = NULL;
     }
 
+  if (private->file)
+    {
+      g_object_unref (private->file);
+      private->file = NULL;
+    }
+
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 GimpImagefile *
-gimp_imagefile_new (Gimp        *gimp,
-                    const gchar *uri)
+gimp_imagefile_new (Gimp  *gimp,
+                    GFile *file)
 {
   GimpImagefile *imagefile;
 
   g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
+  g_return_val_if_fail (file == NULL || G_IS_FILE (file), NULL);
 
   imagefile = g_object_new (GIMP_TYPE_IMAGEFILE, NULL);
 
   GET_PRIVATE (imagefile)->gimp = gimp;
 
-  if (uri)
-    gimp_object_set_name (GIMP_OBJECT (imagefile), uri);
+  if (file)
+    {
+      gimp_object_take_name (GIMP_OBJECT (imagefile), g_file_get_uri (file));
+
+      /* file member gets created by gimp_imagefile_name_changed() */
+    }
 
   return imagefile;
 }
@@ -258,20 +270,14 @@ gimp_imagefile_get_gicon (GimpImagefile *imagefile)
 
   if (! private->icon_cancellable)
     {
-      GFile *file;
-
-      file = g_file_new_for_uri (gimp_object_get_name (imagefile));
-
       private->icon_cancellable = g_cancellable_new ();
 
-      g_file_query_info_async (file, "standard::icon",
+      g_file_query_info_async (private->file, "standard::icon",
                                G_FILE_QUERY_INFO_NONE,
                                G_PRIORITY_DEFAULT,
                                private->icon_cancellable,
                                gimp_imagefile_icon_callback,
                                imagefile);
-
-      g_object_unref (file);
     }
 
   return NULL;
@@ -481,17 +487,18 @@ gimp_imagefile_create_thumbnail_weak (GimpImagefile *imagefile,
   if (! uri)
     return;
 
-  local = gimp_imagefile_new (private->gimp, uri);
+  local = gimp_imagefile_new (private->gimp, private->file);
 
   g_object_add_weak_pointer (G_OBJECT (imagefile), (gpointer) &imagefile);
 
   if (! gimp_imagefile_create_thumbnail (local, context, progress, size, replace,
                                          NULL))
     {
-      /* The weak version works on a local copy so the thumbnail status
-       * of the actual image is not properly updated in case of creation
-       * failure, thus it would end up in a generic GIMP_THUMB_STATE_NOT_FOUND,
-       * which is less informative. */
+      /* The weak version works on a local copy so the thumbnail
+       * status of the actual image is not properly updated in case of
+       * creation failure, thus it would end up in a generic
+       * GIMP_THUMB_STATE_NOT_FOUND, which is less informative.
+       */
       g_object_set (private->thumbnail,
                     "thumb-state", GIMP_THUMB_STATE_FAILED,
                     NULL);
@@ -581,6 +588,11 @@ gimp_imagefile_name_changed (GimpObject *object)
     GIMP_OBJECT_CLASS (parent_class)->name_changed (object);
 
   gimp_thumbnail_set_uri (private->thumbnail, gimp_object_get_name (object));
+
+  if (private->file)
+    g_object_unref (private->file);
+
+  private->file = g_file_new_for_uri (gimp_object_get_name (object));
 }
 
 static void
diff --git a/app/core/gimpimagefile.h b/app/core/gimpimagefile.h
index 7e76c63..9063883 100644
--- a/app/core/gimpimagefile.h
+++ b/app/core/gimpimagefile.h
@@ -56,7 +56,7 @@ struct _GimpImagefileClass
 GType           gimp_imagefile_get_type              (void) G_GNUC_CONST;
 
 GimpImagefile * gimp_imagefile_new                   (Gimp           *gimp,
-                                                      const gchar    *uri);
+                                                      GFile          *file);
 
 GimpThumbnail * gimp_imagefile_get_thumbnail         (GimpImagefile  *imagefile);
 GIcon         * gimp_imagefile_get_gicon             (GimpImagefile  *imagefile);
diff --git a/app/core/gimpprogress.c b/app/core/gimpprogress.c
index 2510769..c91eca9 100644
--- a/app/core/gimpprogress.c
+++ b/app/core/gimpprogress.c
@@ -22,6 +22,7 @@
 
 #include <string.h>
 
+#include <gio/gio.h>
 #include <gegl.h>
 
 #include "core-types.h"
diff --git a/app/core/gimptaggedcontainer.c b/app/core/gimptaggedcontainer.c
index 4161914..75fc047 100644
--- a/app/core/gimptaggedcontainer.c
+++ b/app/core/gimptaggedcontainer.c
@@ -20,7 +20,7 @@
 
 #include "config.h"
 
-#include <glib-object.h>
+#include <gio/gio.h>
 
 #include "core-types.h"
 
diff --git a/app/file/file-open.c b/app/file/file-open.c
index 5634b62..2a34c71 100644
--- a/app/file/file-open.c
+++ b/app/file/file-open.c
@@ -497,8 +497,11 @@ file_open_with_proc_and_display (Gimp                *gimp,
           GimpDocumentList *documents = GIMP_DOCUMENT_LIST (gimp->documents);
           GimpImagefile    *imagefile;
           const gchar      *any_uri;
+          GFile            *file;
 
-          imagefile = gimp_document_list_add_uri (documents, uri, mime_type);
+          file = g_file_new_for_uri (uri);
+          imagefile = gimp_document_list_add_file (documents, file, mime_type);
+          g_object_unref (file);
 
           /*  can only create a thumbnail if the passed uri and the
            *  resulting image's uri match. Use any_uri() here so we
@@ -578,12 +581,15 @@ file_open_layers (Gimp                *gimp,
       if (layers)
         {
           gchar *basename = file_utils_uri_display_basename (uri);
+          GFile *file;
 
           file_open_convert_items (dest_image, basename, layers);
           g_free (basename);
 
-          gimp_document_list_add_uri (GIMP_DOCUMENT_LIST (gimp->documents),
-                                      uri, mime_type);
+          file = g_file_new_for_uri (uri);
+          gimp_document_list_add_file (GIMP_DOCUMENT_LIST (gimp->documents),
+                                       file, mime_type);
+          g_object_unref (file);
         }
       else
         {
diff --git a/app/file/file-save.c b/app/file/file-save.c
index 6006ec2..62ad4db 100644
--- a/app/file/file-save.c
+++ b/app/file/file-save.c
@@ -166,6 +166,7 @@ file_save (Gimp                *gimp,
     {
       GimpDocumentList *documents;
       GimpImagefile    *imagefile;
+      GFile            *file;
 
       if (change_saved_state)
         {
@@ -215,9 +216,11 @@ file_save (Gimp                *gimp,
         gimp_image_saved (image, uri);
 
       documents = GIMP_DOCUMENT_LIST (image->gimp->documents);
-      imagefile = gimp_document_list_add_uri (documents,
-                                              uri,
-                                              file_proc->mime_type);
+
+      file = g_file_new_for_uri (uri);
+      imagefile = gimp_document_list_add_file (documents, file,
+                                               file_proc->mime_type);
+      g_object_unref (file);
 
       /* only save a thumbnail if we are saving as XCF, see bug #25272 */
       if (GIMP_PROCEDURE (file_proc)->proc_type == GIMP_INTERNAL)
diff --git a/app/file/file-utils.c b/app/file/file-utils.c
index 284f932..d1b9754 100644
--- a/app/file/file-utils.c
+++ b/app/file/file-utils.c
@@ -462,8 +462,12 @@ file_utils_save_thumbnail (GimpImage   *image,
           if ( ! strcmp (uri, image_uri))
             {
               GimpImagefile *imagefile;
+              GFile         *file;
+
+              file = g_file_new_for_uri (uri);
+              imagefile = gimp_imagefile_new (image->gimp, file);
+              g_object_unref (file);
 
-              imagefile = gimp_imagefile_new (image->gimp, uri);
               success = gimp_imagefile_save_thumbnail (imagefile, NULL, image,
                                                        NULL);
               g_object_unref (imagefile);
diff --git a/app/gegl/gimp-gegl.c b/app/gegl/gimp-gegl.c
index eaef90c..0574ab0 100644
--- a/app/gegl/gimp-gegl.c
+++ b/app/gegl/gimp-gegl.c
@@ -20,6 +20,7 @@
 
 #include "config.h"
 
+#include <gio/gio.h>
 #include <gegl.h>
 
 #include "gimp-gegl-types.h"
diff --git a/app/gui/gui-vtable.c b/app/gui/gui-vtable.c
index b6580a4..5463294 100644
--- a/app/gui/gui-vtable.c
+++ b/app/gui/gui-vtable.c
@@ -137,8 +137,8 @@ static gboolean       gui_pdb_dialog_set        (Gimp                *gimp,
 static gboolean       gui_pdb_dialog_close      (Gimp                *gimp,
                                                  GimpContainer       *container,
                                                  const gchar         *callback_name);
-static gboolean       gui_recent_list_add_uri   (Gimp                *gimp,
-                                                 const gchar         *uri,
+static gboolean       gui_recent_list_add_file  (Gimp                *gimp,
+                                                 GFile               *file,
                                                  const gchar         *mime_type);
 static void           gui_recent_list_load      (Gimp                *gimp);
 
@@ -174,7 +174,7 @@ gui_vtable_init (Gimp *gimp)
   gimp->gui.pdb_dialog_new        = gui_pdb_dialog_new;
   gimp->gui.pdb_dialog_set        = gui_pdb_dialog_set;
   gimp->gui.pdb_dialog_close      = gui_pdb_dialog_close;
-  gimp->gui.recent_list_add_uri   = gui_recent_list_add_uri;
+  gimp->gui.recent_list_add_file  = gui_recent_list_add_file;
   gimp->gui.recent_list_load      = gui_recent_list_load;
 }
 
@@ -641,15 +641,17 @@ gui_pdb_dialog_close (Gimp          *gimp,
 }
 
 static gboolean
-gui_recent_list_add_uri (Gimp        *gimp,
-                         const gchar *uri,
-                         const gchar *mime_type)
+gui_recent_list_add_file (Gimp        *gimp,
+                          GFile       *file,
+                          const gchar *mime_type)
 {
   GtkRecentData  recent;
   const gchar   *groups[2] = { "Graphics", NULL };
+  gchar         *uri;
+  gboolean       success;
 
   g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
-  g_return_val_if_fail (uri != NULL, FALSE);
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
 
   /* use last part of the URI */
   recent.display_name = NULL;
@@ -663,8 +665,14 @@ gui_recent_list_add_uri (Gimp        *gimp,
   recent.groups       = (gchar **) groups;
   recent.is_private   = FALSE;
 
-  return gtk_recent_manager_add_full (gtk_recent_manager_get_default (),
-                                      uri, &recent);
+  uri = g_file_get_uri (file);
+
+  success = gtk_recent_manager_add_full (gtk_recent_manager_get_default (),
+                                         uri, &recent);
+
+  g_free (uri);
+
+  return success;
 }
 
 static gint
@@ -704,9 +712,11 @@ gui_recent_list_load (Gimp *gimp)
                                                 mime_type))
             {
               GimpImagefile *imagefile;
+              GFile         *file;
 
-              imagefile = gimp_imagefile_new (gimp,
-                                              gtk_recent_info_get_uri (info));
+              file = g_file_new_for_uri (gtk_recent_info_get_uri (info));
+              imagefile = gimp_imagefile_new (gimp, file);
+              g_object_unref (file);
 
               gimp_imagefile_set_mime_type (imagefile, mime_type);
 
diff --git a/app/operations/gimp-operations.c b/app/operations/gimp-operations.c
index 6b35ec9..4f2a4e2 100644
--- a/app/operations/gimp-operations.c
+++ b/app/operations/gimp-operations.c
@@ -19,6 +19,7 @@
 
 #include "config.h"
 
+#include <gio/gio.h>
 #include <gegl.h>
 
 #include "operations-types.h"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]