[gimp] app: make GimpImageFile handle a NULL URI/GFile



commit ef539211331994f2e7a134bc2464784793318ed8
Author: Michael Natterer <mitch gimp org>
Date:   Wed Jul 9 20:10:58 2014 +0200

    app: make GimpImageFile handle a NULL URI/GFile
    
    and reorder its functions to be in the usual order.

 app/core/gimpimagefile.c |  189 +++++++++++++++++++++++----------------------
 1 files changed, 97 insertions(+), 92 deletions(-)
---
diff --git a/app/core/gimpimagefile.c b/app/core/gimpimagefile.c
index b70db12..d4330e6 100644
--- a/app/core/gimpimagefile.c
+++ b/app/core/gimpimagefile.c
@@ -83,14 +83,21 @@ static void        gimp_imagefile_finalize         (GObject        *object);
 
 static void        gimp_imagefile_name_changed     (GimpObject     *object);
 
-static void        gimp_imagefile_info_changed     (GimpImagefile  *imagefile);
-static void        gimp_imagefile_notify_thumbnail (GimpImagefile  *imagefile,
-                                                    GParamSpec     *pspec);
-
 static GdkPixbuf * gimp_imagefile_get_new_pixbuf   (GimpViewable   *viewable,
                                                     GimpContext    *context,
                                                     gint            width,
                                                     gint            height);
+static gchar     * gimp_imagefile_get_description  (GimpViewable   *viewable,
+                                                    gchar         **tooltip);
+
+static void        gimp_imagefile_info_changed     (GimpImagefile  *imagefile);
+static void        gimp_imagefile_notify_thumbnail (GimpImagefile  *imagefile,
+                                                    GParamSpec     *pspec);
+
+static void        gimp_imagefile_icon_callback    (GObject        *source_object,
+                                                    GAsyncResult   *result,
+                                                    gpointer        data);
+
 static GdkPixbuf * gimp_imagefile_load_thumb       (GimpImagefile  *imagefile,
                                                     gint            width,
                                                     gint            height);
@@ -100,13 +107,6 @@ static gboolean    gimp_imagefile_save_thumb       (GimpImagefile  *imagefile,
                                                     gboolean        replace,
                                                     GError        **error);
 
-static gchar     * gimp_imagefile_get_description  (GimpViewable   *viewable,
-                                                    gchar         **tooltip);
-
-static void        gimp_imagefile_icon_callback    (GObject        *source_object,
-                                                    GAsyncResult   *result,
-                                                    gpointer        data);
-
 static void     gimp_thumbnail_set_info_from_image (GimpThumbnail  *thumbnail,
                                                     const gchar    *mime_type,
                                                     GimpImage      *image);
@@ -224,6 +224,85 @@ gimp_imagefile_finalize (GObject *object)
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
+static void
+gimp_imagefile_name_changed (GimpObject *object)
+{
+  GimpImagefilePrivate *private = GET_PRIVATE (object);
+
+  if (GIMP_OBJECT_CLASS (parent_class)->name_changed)
+    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 = NULL;
+    }
+
+  if (gimp_object_get_name (object))
+    private->file = g_file_new_for_uri (gimp_object_get_name (object));
+}
+
+static GdkPixbuf *
+gimp_imagefile_get_new_pixbuf (GimpViewable *viewable,
+                               GimpContext  *context,
+                               gint          width,
+                               gint          height)
+{
+  GimpImagefile *imagefile = GIMP_IMAGEFILE (viewable);
+
+  if (! gimp_object_get_name (imagefile))
+    return NULL;
+
+  return gimp_imagefile_load_thumb (imagefile, width, height);
+}
+
+static gchar *
+gimp_imagefile_get_description (GimpViewable   *viewable,
+                                gchar         **tooltip)
+{
+  GimpImagefile        *imagefile = GIMP_IMAGEFILE (viewable);
+  GimpImagefilePrivate *private   = GET_PRIVATE (imagefile);
+  GimpThumbnail        *thumbnail = private->thumbnail;
+  gchar                *basename;
+
+  if (! private->file)
+    return NULL;
+
+  if (tooltip)
+    {
+      const gchar *name;
+      const gchar *desc;
+
+      name = gimp_file_get_utf8_name (private->file);
+      desc = gimp_imagefile_get_desc_string (imagefile);
+
+      if (desc)
+        *tooltip = g_strdup_printf ("%s\n%s", name, desc);
+      else
+        *tooltip = g_strdup (name);
+    }
+
+  basename = g_path_get_basename (gimp_file_get_utf8_name (private->file));
+
+  if (thumbnail->image_width > 0 && thumbnail->image_height > 0)
+    {
+      gchar *tmp = basename;
+
+      basename = g_strdup_printf ("%s (%d × %d)",
+                                  tmp,
+                                  thumbnail->image_width,
+                                  thumbnail->image_height);
+      g_free (tmp);
+    }
+
+  return basename;
+}
+
+
+/*  public functions  */
+
 GimpImagefile *
 gimp_imagefile_new (Gimp  *gimp,
                     GFile *file)
@@ -260,9 +339,10 @@ gimp_imagefile_set_file (GimpImagefile *imagefile,
                          GFile         *file)
 {
   g_return_if_fail (GIMP_IS_IMAGEFILE (imagefile));
-  g_return_if_fail (G_IS_FILE (file));
+  g_return_if_fail (file == NULL || G_IS_FILE (file));
 
-  gimp_object_take_name (GIMP_OBJECT (imagefile), g_file_get_uri (file));
+  gimp_object_take_name (GIMP_OBJECT (imagefile),
+                         file ? g_file_get_uri (file) : NULL);
 }
 
 GimpThumbnail *
@@ -285,7 +365,7 @@ gimp_imagefile_get_gicon (GimpImagefile *imagefile)
   if (private->icon)
     return private->icon;
 
-  if (! private->icon_cancellable)
+  if (private->file && ! private->icon_cancellable)
     {
       private->icon_cancellable = g_cancellable_new ();
 
@@ -483,7 +563,6 @@ gimp_imagefile_create_thumbnail_weak (GimpImagefile *imagefile,
 {
   GimpImagefilePrivate *private;
   GimpImagefile        *local;
-  const gchar          *uri;
 
   g_return_if_fail (GIMP_IS_IMAGEFILE (imagefile));
 
@@ -492,8 +571,7 @@ gimp_imagefile_create_thumbnail_weak (GimpImagefile *imagefile,
 
   private = GET_PRIVATE (imagefile);
 
-  uri = gimp_object_get_name (imagefile);
-  if (! uri)
+  if (! private->file)
     return;
 
   local = gimp_imagefile_new (private->gimp, private->file);
@@ -515,10 +593,9 @@ gimp_imagefile_create_thumbnail_weak (GimpImagefile *imagefile,
 
   if (imagefile)
     {
-      uri = gimp_object_get_name (imagefile);
+      GFile *file = gimp_imagefile_get_file (imagefile);
 
-      if (uri &&
-          strcmp (uri, gimp_object_get_name (local)) == 0)
+      if (file && g_file_equal (file, gimp_imagefile_get_file (local)))
         {
           gimp_imagefile_update (imagefile);
         }
@@ -589,22 +666,6 @@ gimp_imagefile_save_thumbnail (GimpImagefile  *imagefile,
 /*  private functions  */
 
 static void
-gimp_imagefile_name_changed (GimpObject *object)
-{
-  GimpImagefilePrivate *private = GET_PRIVATE (object);
-
-  if (GIMP_OBJECT_CLASS (parent_class)->name_changed)
-    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
 gimp_imagefile_info_changed (GimpImagefile *imagefile)
 {
   GimpImagefilePrivate *private = GET_PRIVATE (imagefile);
@@ -636,62 +697,6 @@ gimp_imagefile_notify_thumbnail (GimpImagefile *imagefile,
     }
 }
 
-static GdkPixbuf *
-gimp_imagefile_get_new_pixbuf (GimpViewable *viewable,
-                               GimpContext  *context,
-                               gint          width,
-                               gint          height)
-{
-  GimpImagefile *imagefile = GIMP_IMAGEFILE (viewable);
-
-  if (! gimp_object_get_name (imagefile))
-    return NULL;
-
-  return gimp_imagefile_load_thumb (imagefile, width, height);
-}
-
-static gchar *
-gimp_imagefile_get_description (GimpViewable   *viewable,
-                                gchar         **tooltip)
-{
-  GimpImagefile        *imagefile = GIMP_IMAGEFILE (viewable);
-  GimpImagefilePrivate *private   = GET_PRIVATE (imagefile);
-  GimpThumbnail        *thumbnail = private->thumbnail;
-  gchar                *basename;
-
-  if (! private->file)
-    return NULL;
-
-  if (tooltip)
-    {
-      const gchar *name;
-      const gchar *desc;
-
-      name = gimp_file_get_utf8_name (private->file);
-      desc = gimp_imagefile_get_desc_string (imagefile);
-
-      if (desc)
-        *tooltip = g_strdup_printf ("%s\n%s", name, desc);
-      else
-        *tooltip = g_strdup (name);
-    }
-
-  basename = g_path_get_basename (gimp_file_get_utf8_name (private->file));
-
-  if (thumbnail->image_width > 0 && thumbnail->image_height > 0)
-    {
-      gchar *tmp = basename;
-
-      basename = g_strdup_printf ("%s (%d × %d)",
-                                  tmp,
-                                  thumbnail->image_width,
-                                  thumbnail->image_height);
-      g_free (tmp);
-    }
-
-  return basename;
-}
-
 static void
 gimp_imagefile_icon_callback (GObject      *source_object,
                               GAsyncResult *result,


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