[gimp] libgimp: add gimp_file_procedure_set_handles_uri()



commit cd836e9d96dad56b9ffa5a2b6892f612ad05d8c2
Author: Michael Natterer <mitch gimp org>
Date:   Sun Aug 11 12:46:48 2019 +0200

    libgimp: add gimp_file_procedure_set_handles_uri()
    
    Implementing a shiny new GimpFileProcedure doesn't mean the libraries
    we use to load/save files are automatically capable of handling remote
    files, so we still need this flag.

 libgimp/gimpfileprocedure.c         | 55 +++++++++++++++++++++++++++++++++----
 libgimp/gimpfileprocedure.h         | 36 +++++++++++++-----------
 libgimp/gimploadprocedure.c         |  3 +-
 libgimp/gimpsaveprocedure.c         |  3 +-
 plug-ins/common/file-desktop-link.c |  2 --
 plug-ins/common/file-pat.c          |  2 ++
 6 files changed, 76 insertions(+), 25 deletions(-)
---
diff --git a/libgimp/gimpfileprocedure.c b/libgimp/gimpfileprocedure.c
index 3c2f426f9d..80bbf53523 100644
--- a/libgimp/gimpfileprocedure.c
+++ b/libgimp/gimpfileprocedure.c
@@ -26,11 +26,12 @@
 
 struct _GimpFileProcedurePrivate
 {
-  gchar *mime_types;
-  gchar *extensions;
-  gchar *prefixes;
-  gchar *magics;
-  gint   priority;
+  gchar    *mime_types;
+  gchar    *extensions;
+  gchar    *prefixes;
+  gchar    *magics;
+  gint      priority;
+  gboolean  handles_uri;
 };
 
 
@@ -280,3 +281,47 @@ gimp_file_procedure_get_priority (GimpFileProcedure *procedure)
 
   return procedure->priv->priority;
 }
+
+/**
+ * gimp_file_procedure_set_handles_uri:
+ * @procedure:   A #GimpFileProcedure.
+ * @handles_uri: The procedure's handles uri flag.
+ *
+ * Registers a file procedure as capable of handling arbitrary URIs
+ * via GIO.
+ *
+ * When @handles_uri is set to %TRUE, the procedure will get a #GFile
+ * passed that can point to a remote file.
+ *
+ * When @handles_uri is set to %FALSE, the procedure will get a local
+ * #GFile passed and can use g_file_get_path() to get to a filename
+ * that can be used with whatever non-GIO means of dealing with the
+ * file.
+ *
+ * Since: 3.0
+ **/
+void
+gimp_file_procedure_set_handles_uri (GimpFileProcedure *procedure,
+                                     gint               handles_uri)
+{
+  g_return_if_fail (GIMP_IS_FILE_PROCEDURE (procedure));
+
+  procedure->priv->handles_uri = handles_uri;
+}
+
+/**
+ * gimp_file_procedure_get_handles_uri:
+ * @procedure: A #GimpFileProcedure.
+ *
+ * Returns: The procedure's handles uri flag as set with
+ *          gimp_file_procedure_set_handles_uri().
+ *
+ * Since: 3.0
+ **/
+gint
+gimp_file_procedure_get_handles_uri (GimpFileProcedure *procedure)
+{
+  g_return_val_if_fail (GIMP_IS_FILE_PROCEDURE (procedure), 0);
+
+  return procedure->priv->handles_uri;
+}
diff --git a/libgimp/gimpfileprocedure.h b/libgimp/gimpfileprocedure.h
index bb554ea479..318f439b20 100644
--- a/libgimp/gimpfileprocedure.h
+++ b/libgimp/gimpfileprocedure.h
@@ -54,27 +54,31 @@ struct _GimpFileProcedureClass
 };
 
 
-GType           gimp_file_procedure_get_type       (void) G_GNUC_CONST;
+GType           gimp_file_procedure_get_type        (void) G_GNUC_CONST;
 
-void            gimp_file_procedure_set_mime_types (GimpFileProcedure *procedure,
-                                                    const gchar       *mime_types);
-const gchar   * gimp_file_procedure_get_mime_types (GimpFileProcedure *procedure);
+void            gimp_file_procedure_set_mime_types  (GimpFileProcedure *procedure,
+                                                     const gchar       *mime_types);
+const gchar   * gimp_file_procedure_get_mime_types  (GimpFileProcedure *procedure);
 
-void            gimp_file_procedure_set_extensions (GimpFileProcedure *procedure,
-                                                    const gchar       *extensions);
-const gchar   * gimp_file_procedure_get_extensions (GimpFileProcedure *procedure);
+void            gimp_file_procedure_set_extensions  (GimpFileProcedure *procedure,
+                                                     const gchar       *extensions);
+const gchar   * gimp_file_procedure_get_extensions  (GimpFileProcedure *procedure);
 
-void            gimp_file_procedure_set_prefixes   (GimpFileProcedure *procedure,
-                                                    const gchar       *prefixes);
-const gchar   * gimp_file_procedure_get_prefixes   (GimpFileProcedure *procedure);
+void            gimp_file_procedure_set_prefixes    (GimpFileProcedure *procedure,
+                                                     const gchar       *prefixes);
+const gchar   * gimp_file_procedure_get_prefixes    (GimpFileProcedure *procedure);
 
-void            gimp_file_procedure_set_magics     (GimpFileProcedure *procedure,
-                                                    const gchar       *magics);
-const gchar   * gimp_file_procedure_get_magics     (GimpFileProcedure *procedure);
+void            gimp_file_procedure_set_magics      (GimpFileProcedure *procedure,
+                                                     const gchar       *magics);
+const gchar   * gimp_file_procedure_get_magics      (GimpFileProcedure *procedure);
 
-void            gimp_file_procedure_set_priority   (GimpFileProcedure *procedure,
-                                                    gint               priority);
-gint            gimp_file_procedure_get_priority   (GimpFileProcedure *procedure);
+void            gimp_file_procedure_set_priority    (GimpFileProcedure *procedure,
+                                                     gint               priority);
+gint            gimp_file_procedure_get_priority    (GimpFileProcedure *procedure);
+
+void            gimp_file_procedure_set_handles_uri (GimpFileProcedure *procedure,
+                                                     gboolean           handles_uri);
+gboolean        gimp_file_procedure_get_handles_uri (GimpFileProcedure *procedure);
 
 
 G_END_DECLS
diff --git a/libgimp/gimploadprocedure.c b/libgimp/gimploadprocedure.c
index 34c72fa5b3..3479b71ce5 100644
--- a/libgimp/gimploadprocedure.c
+++ b/libgimp/gimploadprocedure.c
@@ -135,7 +135,8 @@ gimp_load_procedure_install (GimpProcedure *procedure)
                                   gimp_file_procedure_get_prefixes (file_proc));
     }
 
-  gimp_register_file_handler_uri (gimp_procedure_get_name (procedure));
+  if (gimp_file_procedure_get_handles_uri (file_proc))
+    gimp_register_file_handler_uri (gimp_procedure_get_name (procedure));
 
   mime_types = gimp_file_procedure_get_mime_types (file_proc);
   if (mime_types)
diff --git a/libgimp/gimpsaveprocedure.c b/libgimp/gimpsaveprocedure.c
index 1eb7380145..616c84a850 100644
--- a/libgimp/gimpsaveprocedure.c
+++ b/libgimp/gimpsaveprocedure.c
@@ -128,7 +128,8 @@ gimp_save_procedure_install (GimpProcedure *procedure)
                               gimp_file_procedure_get_extensions (file_proc),
                               gimp_file_procedure_get_prefixes (file_proc));
 
-  gimp_register_file_handler_uri (gimp_procedure_get_name (procedure));
+  if (gimp_file_procedure_get_handles_uri (file_proc))
+    gimp_register_file_handler_uri (gimp_procedure_get_name (procedure));
 
   mime_types = gimp_file_procedure_get_mime_types (file_proc);
   if (mime_types)
diff --git a/plug-ins/common/file-desktop-link.c b/plug-ins/common/file-desktop-link.c
index 617eaebead..dcf2d588b2 100644
--- a/plug-ins/common/file-desktop-link.c
+++ b/plug-ins/common/file-desktop-link.c
@@ -173,8 +173,6 @@ load_image (GFile        *file,
   GError   *error    = NULL;
 
   filename = g_file_get_path (file);
-  if (! filename)
-    goto out;
 
   if (! g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, &error))
     goto out;
diff --git a/plug-ins/common/file-pat.c b/plug-ins/common/file-pat.c
index 0071656d8e..d8da79e50f 100644
--- a/plug-ins/common/file-pat.c
+++ b/plug-ins/common/file-pat.c
@@ -127,6 +127,8 @@ pat_create_procedure (GimpPlugIn  *plug_in,
                                           "image/x-gimp-pat");
       gimp_file_procedure_set_extensions (GIMP_FILE_PROCEDURE (procedure),
                                           "pat");
+      gimp_file_procedure_set_handles_uri (GIMP_FILE_PROCEDURE (procedure),
+                                           TRUE);
 
       gimp_procedure_add_argument (procedure,
                                    gimp_param_spec_string ("description",


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