[Xfce4-commits] <tumbler:master> Always check for "file" and add it if necessary. Clearly the better way.

Jannis Pohlmann noreply at xfce.org
Wed Sep 30 15:12:01 CEST 2009


Updating branch refs/heads/master
         to fd8d82d61bf59129583dc2dab7edae54be214f31 (commit)
       from 7d6875461d59e7b7c558f5586ceb4df92b3c57a9 (commit)

commit fd8d82d61bf59129583dc2dab7edae54be214f31
Author: Jannis Pohlmann <jannis at xfce.org>
Date:   Wed Sep 30 15:09:16 2009 +0200

    Always check for "file" and add it if necessary. Clearly the better way.

 .../font-thumbnailer/font-thumbnailer-provider.c   |   21 +-----
 .../pixbuf-thumbnailer-provider.c                  |   42 ++++--------
 tumbler/Makefile.am                                |    4 +-
 tumbler/tumbler-util.c                             |   69 ++++++++++++++++++++
 .../{tumbler-glib-extensions.h => tumbler-util.h}  |   20 ++----
 tumbler/tumbler.h                                  |    1 +
 6 files changed, 95 insertions(+), 62 deletions(-)

diff --git a/plugins/font-thumbnailer/font-thumbnailer-provider.c b/plugins/font-thumbnailer/font-thumbnailer-provider.c
index 4e5b669..65158a5 100644
--- a/plugins/font-thumbnailer/font-thumbnailer-provider.c
+++ b/plugins/font-thumbnailer/font-thumbnailer-provider.c
@@ -111,27 +111,12 @@ font_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provider
     "application/x-font-type1",
     NULL,
   };
-  const gchar *const *supported_schemes;
   FontThumbnailer    *thumbnailer;
   GList              *thumbnailers = NULL;
   GStrv               uri_schemes;
-  guint               length;
-  guint               n;
-  GVfs               *vfs;
 
   /* determine the URI schemes supported by GIO */
-  vfs = g_vfs_get_default ();
-  supported_schemes = g_vfs_get_supported_uri_schemes (vfs);
-
-  /* copy the supported schemes array and add the file scheme, which for 
-   * some odd reason is not included by default. Bug filed on
-   * http://bugzilla.gnome.org/show_bug.cgi?id=596867 */
-  length = g_strv_length ((gchar **)supported_schemes);
-  uri_schemes = g_new0 (gchar *, length + 1);
-  uri_schemes[0] = (gchar *)"file";
-  for (n = 0; n < length; ++n)
-    uri_schemes[1+n] = (gchar *)supported_schemes[n];
-  uri_schemes[n] = NULL;
+  uri_schemes = tumbler_util_get_supported_uri_schemes ();
 
   /* create the pixbuf thumbnailer */
   thumbnailer = g_object_new (TYPE_FONT_THUMBNAILER, 
@@ -141,8 +126,8 @@ font_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provider
   /* add the thumbnailer to the list */
   thumbnailers = g_list_append (thumbnailers, thumbnailer);
 
-  /* free URI schemes array (not its contents) */
-  g_free (uri_schemes);
+  /* free URI schemes */
+  g_strfreev (uri_schemes);
 
   return thumbnailers;
 }
diff --git a/plugins/pixbuf-thumbnailer/pixbuf-thumbnailer-provider.c b/plugins/pixbuf-thumbnailer/pixbuf-thumbnailer-provider.c
index 320503a..6b4fc1e 100644
--- a/plugins/pixbuf-thumbnailer/pixbuf-thumbnailer-provider.c
+++ b/plugins/pixbuf-thumbnailer/pixbuf-thumbnailer-provider.c
@@ -103,34 +103,20 @@ pixbuf_thumbnailer_provider_init (PixbufThumbnailerProvider *provider)
 static GList *
 pixbuf_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provider)
 {
-  PixbufThumbnailer  *thumbnailer;
-  const gchar *const *supported_schemes;
-  GHashTable         *types;
-  GSList             *formats;
-  GSList             *fp;
-  GList              *keys;
-  GList              *lp;
-  GList              *thumbnailers = NULL;
-  GStrv               format_types;
-  GStrv               mime_types;
-  GStrv               uri_schemes;
-  GVfs               *vfs;
-  guint               length;
-  guint               n;
+  PixbufThumbnailer *thumbnailer;
+  GHashTable        *types;
+  GSList            *formats;
+  GSList            *fp;
+  GList             *keys;
+  GList             *lp;
+  GList             *thumbnailers = NULL;
+  GStrv              format_types;
+  GStrv              mime_types;
+  GStrv              uri_schemes;
+  guint              n;
 
   /* determine which URI schemes are supported by GIO */
-  vfs = g_vfs_get_default ();
-  supported_schemes = g_vfs_get_supported_uri_schemes (vfs);
-
-  /* copy the supported schemes array and add the file scheme, which for 
-   * some odd reason is not included by default. Bug filed on
-   * http://bugzilla.gnome.org/show_bug.cgi?id=596867 */
-  length = g_strv_length ((gchar **)supported_schemes);
-  uri_schemes = g_new0 (gchar *, length + 1);
-  uri_schemes[0] = (gchar *)"file";
-  for (n = 0; n < length; ++n)
-    uri_schemes[1+n] = (gchar *)supported_schemes[n];
-  uri_schemes[n] = NULL;
+  uri_schemes = tumbler_util_get_supported_uri_schemes ();
 
   /* create a hash table to collect unique MIME types */
   types = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
@@ -177,8 +163,8 @@ pixbuf_thumbnailer_provider_get_thumbnailers (TumblerThumbnailerProvider *provid
                               "uri-schemes", uri_schemes, "mime-types", mime_types, 
                               NULL);
 
-  /* free URI schemes array (not its contents) and MIME types */
-  g_free (uri_schemes);
+  /* free URI schemes and MIME types */
+  g_strfreev (uri_schemes);
   g_strfreev (mime_types);
 
   /* add the thumbnailer to the list */
diff --git a/tumbler/Makefile.am b/tumbler/Makefile.am
index 393e99e..e2023ce 100644
--- a/tumbler/Makefile.am
+++ b/tumbler/Makefile.am
@@ -42,6 +42,7 @@ libtumbler_headers =							\
 	tumbler-thumbnailer-provider.h					\
 	tumbler-thumbnailer.h						\
 	tumbler-thumbnail.h						\
+	tumbler-util.h							\
 	tumbler.h
 
 libtumbler_sources =							\
@@ -56,7 +57,8 @@ libtumbler_sources =							\
 	tumbler-provider-plugin.c					\
 	tumbler-thumbnailer-provider.c					\
 	tumbler-thumbnailer.c						\
-	tumbler-thumbnail.c
+	tumbler-thumbnail.c						\
+	tumbler-util.c
 
 libtumblerincludedir = $(includedir)/tumbler-$(TUMBLER_VERSION_API)/tumbler
 
diff --git a/tumbler/tumbler-util.c b/tumbler/tumbler-util.c
new file mode 100644
index 0000000..1d5910e
--- /dev/null
+++ b/tumbler/tumbler-util.c
@@ -0,0 +1,69 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
+ * GNU Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General 
+ * Public License along with this library; if not, write to the 
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <glib.h>
+#include <gio/gio.h>
+
+#include <tumbler/tumbler-util.h>
+
+
+
+GStrv
+tumbler_util_get_supported_uri_schemes (void)
+{
+  const gchar *const *vfs_schemes;
+  GStrv               uri_schemes;
+  gboolean            file_scheme_found = FALSE;
+  guint               length;
+  guint               n;
+  GVfs               *vfs;
+
+  /* determine the URI schemes supported by GIO */
+  vfs = g_vfs_get_default ();
+  vfs_schemes = g_vfs_get_supported_uri_schemes (vfs);
+
+  /* search for the "file" scheme */
+  for (n = 0; !file_scheme_found && vfs_schemes[n] != NULL; ++n)
+    if (g_strcmp0 (vfs_schemes[n], "file") == 0)
+      file_scheme_found = TRUE;
+
+  /* check if the "file" scheme is included */
+  if (file_scheme_found)
+    {
+      /* it is, so simply copy the array */
+      uri_schemes = g_strdupv ((GStrv) vfs_schemes);
+    }
+  else
+    {
+      /* it is not, so we need to copy the array and add "file" */
+      length = g_strv_length ((GStrv) vfs_schemes);
+      uri_schemes = g_new0 (gchar *, length + 1);
+      uri_schemes[0] = g_strdup ("file");
+      for (n = 0; n < length; ++n)
+        uri_schemes[1+n] = g_strdup (vfs_schemes[n]);
+      uri_schemes[n] = NULL;
+    }
+
+  return uri_schemes;
+}
diff --git a/tumbler/tumbler-glib-extensions.h b/tumbler/tumbler-util.h
similarity index 58%
copy from tumbler/tumbler-glib-extensions.h
copy to tumbler/tumbler-util.h
index 0b08aeb..d1e1846 100644
--- a/tumbler/tumbler-glib-extensions.h
+++ b/tumbler/tumbler-util.h
@@ -18,25 +18,15 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#if !defined (TUMBLER_INSIDE_TUMBLER_H) && !defined (TUMBLER_COMPILATION)
-#error "Only <tumbler/tumbler.h> may be included directly. This file might disappear or change contents."
-#endif
+#ifndef __TUMBLER_UTIL_H__
+#define __TUMBLER_UTIL_H__
 
-#ifndef __TUMBLER_GLIB_EXTENSIONS_H__
-#define __TUMBLER_GLIB_EXTENSIONS_H__
-
-#include <glib-object.h>
+#include <glib.h>
 
 G_BEGIN_DECLS
 
-#define TUMBLER_ADD_INTERFACE(TYPE_IFACE, iface_init) \
-{ \
-  static const GInterfaceInfo tumbler_add_interface_info = { \
-    (GInterfaceInitFunc) iface_init, NULL, NULL \
-  }; \
-  g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &tumbler_add_interface_info); \
-}
+GStrv tumbler_util_get_supported_uri_schemes (void) G_GNUC_MALLOC;
 
 G_END_DECLS
 
-#endif /* !__TUMBLER_GLIB_EXTENSIONS_H__ */
+#endif /* !__TUMBLER_UTIL_H__ */
diff --git a/tumbler/tumbler.h b/tumbler/tumbler.h
index b2f4429..98661a5 100644
--- a/tumbler/tumbler.h
+++ b/tumbler/tumbler.h
@@ -37,6 +37,7 @@
 #include <tumbler/tumbler-thumbnailer-provider.h>
 #include <tumbler/tumbler-thumbnailer.h>
 #include <tumbler/tumbler-thumbnail.h>
+#include <tumbler/tumbler-util.h>
 
 #undef TUMBLER_INSIDE_TUMBLER_H
 



More information about the Xfce4-commits mailing list