[Xfce4-commits] r29956 - in libexo/trunk: . exo-thumbnailers
Jannis Pohlmann
jannis at xfce.org
Thu May 14 16:42:26 CEST 2009
Author: jannis
Date: 2009-05-14 14:42:26 +0000 (Thu, 14 May 2009)
New Revision: 29956
Added:
libexo/trunk/exo-thumbnailers/
libexo/trunk/exo-thumbnailers/Makefile.am
libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.c
libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.h
libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-dbus.xml
libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-main.c
libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.c
libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.h
libexo/trunk/exo-thumbnailers/org.xfce.ExoThumbnailer.service.in
Modified:
libexo/trunk/AUTHORS
libexo/trunk/ChangeLog
libexo/trunk/Makefile.am
libexo/trunk/configure.in.in
Log:
* configure.in.in, Makefile.am, exo-thumbnailers/Makefile.am,
exo-thumbnailers/exo-generic-thumbnailer.{c,h},
exo-thumbnailers/exo-thumbnailer-service-dbus.xml,
exo-thumbnailers/exu-thumbnailer-service-main.c,
exo-thumbnailers/exo-thumbnailer-service.{c,h}: Initial import of a
raw skeleton for the implementation of the Thumbnailer Specification.
ExoGenericThumbnailer implements org.freedesktop.thumbnailer.Generic and
ExoThumbnailerService is the D-Bus service that establishes the D-Bus
connection and makes sure the thumbnailer service always runs only once.
There seems to be something wrong right now, though. I can't get the
service to be recognized by D-Bus properly at all ...
Modified: libexo/trunk/AUTHORS
===================================================================
--- libexo/trunk/AUTHORS 2009-05-14 14:24:16 UTC (rev 29955)
+++ libexo/trunk/AUTHORS 2009-05-14 14:42:26 UTC (rev 29956)
@@ -1,4 +1,5 @@
Benedikt Meurer <benny at xfce.org>
+Jannis Pohlmann <jannis at xfce.org>
Parts of this library are based on code from libegg, Gtk+, the GNOME project
and the ROX Filer.
Modified: libexo/trunk/ChangeLog
===================================================================
--- libexo/trunk/ChangeLog 2009-05-14 14:24:16 UTC (rev 29955)
+++ libexo/trunk/ChangeLog 2009-05-14 14:42:26 UTC (rev 29956)
@@ -1,3 +1,17 @@
+2009-05-14 Jannis Pohlmann <jannis at xfce.org>
+
+ * configure.in.in, Makefile.am, exo-thumbnailers/Makefile.am,
+ exo-thumbnailers/exo-generic-thumbnailer.{c,h},
+ exo-thumbnailers/exo-thumbnailer-service-dbus.xml,
+ exo-thumbnailers/exu-thumbnailer-service-main.c,
+ exo-thumbnailers/exo-thumbnailer-service.{c,h}: Initial import of a
+ raw skeleton for the implementation of the Thumbnailer Specification.
+ ExoGenericThumbnailer implements org.freedesktop.thumbnailer.Generic and
+ ExoThumbnailerService is the D-Bus service that establishes the D-Bus
+ connection and makes sure the thumbnailer service always runs only once.
+ There seems to be something wrong right now, though. I can't get the
+ service to be recognized by D-Bus properly at all ...
+
2009-05-12 Jannis Pohlmann <jannis at xfce.org>
* docs/reference/exo-sections.txt, docs/reference/tmpl/exo-job.sgml:
Modified: libexo/trunk/Makefile.am
===================================================================
--- libexo/trunk/Makefile.am 2009-05-14 14:24:16 UTC (rev 29955)
+++ libexo/trunk/Makefile.am 2009-05-14 14:42:26 UTC (rev 29956)
@@ -18,6 +18,7 @@
exo-mount \
$(EXO_MOUNT_NOTIFY_SUBDIR) \
exo-open \
+ exo-thumbnailers \
docs \
icons \
pixmaps \
Modified: libexo/trunk/configure.in.in
===================================================================
--- libexo/trunk/configure.in.in 2009-05-14 14:24:16 UTC (rev 29955)
+++ libexo/trunk/configure.in.in 2009-05-14 14:42:26 UTC (rev 29956)
@@ -146,6 +146,8 @@
dnl ***********************************
dnl *** Check for required packages ***
dnl ***********************************
+XDT_CHECK_PACKAGE([DBUS], [dbus-1], [1.0.0])
+XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.72])
XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.16.0])
XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.16.0])
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.14.0])
@@ -426,6 +428,7 @@
exo-mount-notify/Makefile
exo-open/Makefile
exo-support/Makefile
+exo-thumbnailers/Makefile
icons/Makefile
icons/24x24/Makefile
icons/48x48/Makefile
Added: libexo/trunk/exo-thumbnailers/Makefile.am
===================================================================
--- libexo/trunk/exo-thumbnailers/Makefile.am (rev 0)
+++ libexo/trunk/exo-thumbnailers/Makefile.am 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,77 @@
+INCLUDES = \
+ -I$(top_srcdir) \
+ -DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
+ -DEXO_COMPILATION
+
+libexec_PROGRAMS = \
+ exo-thumbnailer-service
+
+exo_thumbnailer_service_built_sources = \
+ exo-generic-thumbnailer-dbus-bindings.h
+
+exo_thumbnailer_service_SOURCES = \
+ exo-generic-thumbnailer.c \
+ exo-generic-thumbnailer.h \
+ exo-thumbnailer-service.c \
+ exo-thumbnailer-service.h \
+ exo-thumbnailer-service-main.c \
+ $(exo_thumbnailer_service_built_sources)
+
+exo_thumbnailer_service_CFLAGS = \
+ -DG_LOG_DOMAIN=\"exo-thumbnailer-service\" \
+ $(DBUS_CFLAGS) \
+ $(DBUS_GLIB_CFLAGS) \
+ $(GLIB_CFLAGS) \
+ $(GTHREAD_CFLAGS) \
+ $(GTK_CFLAGS) \
+ $(LIBXFCE4UTIL_CFLAGS)
+
+exo_thumbnailer_service_LDFLAGS = \
+ -no-undefined
+
+exo_thumbnailer_service_LDADD = \
+ $(DBUS_LIBS) \
+ $(DBUS_GLIB_LIBS) \
+ $(GLIB_LIBS) \
+ $(GTHREAD_LIBS) \
+ $(LIBXFCE4UTIL_LIBS) \
+ $(top_builddir)/exo/libexo-$(LIBEXO_VERSION_MAJOR).$(LIBEXO_VERSION_MINOR).la
+
+servicedir = $(datadir)/dbus-1/services
+service_in_files = org.xfce.ExoThumbnailer.service.in
+service_DATA = $(service_in_files:.service.in=.service)
+
+%.service: %.service.in
+ sed -e "s,\@libexecdir\@,$(libexecdir),g" < $< > $@
+
+CLEANFILES = \
+ $(service_DATA)
+
+EXTRA_DIST = \
+ $(service_in_files)
+
+##
+## Rules to auto-generate built sources
+##
+## This is a bit tricky with automake, and non-trivial to implement. The
+## rules below seem to work fine and don't seem to break the build, but
+## they are only enabled in maintainer mode, so arbitrary users don't get
+## trapped in automake's oddities. Therefore we ship the autogenerated
+## files as part of the dist tarball.
+##
+if MAINTAINER_MODE
+
+DISTCLEANFILES = \
+ $(exo_thumbnailer_service_built_sources)
+
+BUILT_SOURCES = \
+ $(exo_thumbnailer_service_built_sources)
+
+exo-generic-thumbnailer-dbus-bindings.h: exo-thumbnailer-service-dbus.xml Makefile
+ dbus-binding-tool --mode=glib-server --prefix=exo_generic_thumbnailer $< > $@
+endif
+
+EXTRADIST = \
+ exo-thumbnailer-service-dbus.xml
+
+# vi:set ts=8 sw=8 noet ai nocindent syntax=automake:
Added: libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.c
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.c (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.c 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,234 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; 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 <glib-object.h>
+
+#include <exo-thumbnailers/exo-generic-thumbnailer.h>
+#include <exo-thumbnailers/exo-generic-thumbnailer-dbus-bindings.h>
+
+
+
+#define EXO_GENERIC_THUMBNAILER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EXO_TYPE_GENERIC_THUMBNAILER, ExoGenericThumbnailerPrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+ PROP_0,
+};
+
+
+
+static void exo_generic_thumbnailer_class_init (ExoGenericThumbnailerClass *klass);
+static void exo_generic_thumbnailer_init (ExoGenericThumbnailer *thumbnailer);
+static void exo_generic_thumbnailer_constructed (GObject *object);
+static void exo_generic_thumbnailer_finalize (GObject *object);
+static void exo_generic_thumbnailer_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void exo_generic_thumbnailer_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+
+
+struct _ExoGenericThumbnailerClass
+{
+ GObjectClass __parent__;
+};
+
+struct _ExoGenericThumbnailer
+{
+ GObject __parent__;
+
+ ExoGenericThumbnailerPrivate *priv;
+};
+
+struct _ExoGenericThumbnailerPrivate
+{
+ gint placeholder;
+};
+
+
+
+static GObjectClass *exo_generic_thumbnailer_parent_class = NULL;
+
+
+
+GType
+exo_generic_thumbnailer_get_type (void)
+{
+ static GType type = G_TYPE_INVALID;
+
+ if (G_UNLIKELY (type == G_TYPE_INVALID))
+ {
+ type = g_type_register_static_simple (G_TYPE_OBJECT,
+ "ExoGenericThumbnailer",
+ sizeof (ExoGenericThumbnailerClass),
+ (GClassInitFunc) exo_generic_thumbnailer_class_init,
+ sizeof (ExoGenericThumbnailer),
+ (GInstanceInitFunc) exo_generic_thumbnailer_init,
+ 0);
+ }
+
+ return type;
+}
+
+
+
+static void
+exo_generic_thumbnailer_class_init (ExoGenericThumbnailerClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ g_type_class_add_private (klass, sizeof (ExoGenericThumbnailerPrivate));
+
+ /* Determine the parent type class */
+ exo_generic_thumbnailer_parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->constructed = exo_generic_thumbnailer_constructed;
+ gobject_class->finalize = exo_generic_thumbnailer_finalize;
+ gobject_class->get_property = exo_generic_thumbnailer_get_property;
+ gobject_class->set_property = exo_generic_thumbnailer_set_property;
+
+ dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
+ &dbus_glib_exo_generic_thumbnailer_object_info);
+}
+
+
+
+static void
+exo_generic_thumbnailer_init (ExoGenericThumbnailer *thumbnailer)
+{
+ thumbnailer->priv = EXO_GENERIC_THUMBNAILER_GET_PRIVATE (thumbnailer);
+}
+
+
+
+static void
+exo_generic_thumbnailer_constructed (GObject *object)
+{
+}
+
+
+
+static void
+exo_generic_thumbnailer_finalize (GObject *object)
+{
+ (*G_OBJECT_CLASS (exo_generic_thumbnailer_parent_class)->finalize) (object);
+}
+
+
+
+static void
+exo_generic_thumbnailer_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+exo_generic_thumbnailer_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+ExoGenericThumbnailer *
+exo_generic_thumbnailer_get_default (void)
+{
+ static ExoGenericThumbnailer *thumbnailer = NULL;
+
+ if (G_UNLIKELY (thumbnailer == NULL))
+ {
+ thumbnailer = g_object_new (EXO_TYPE_GENERIC_THUMBNAILER, NULL);
+ g_object_add_weak_pointer (G_OBJECT (thumbnailer), (gpointer) &thumbnailer);
+ }
+ else
+ {
+ g_object_ref (thumbnailer);
+ }
+
+ return thumbnailer;
+}
+
+
+
+gboolean
+exo_generic_thumbnailer_queue (ExoGenericThumbnailer *thumbnailer,
+ const gchar **uris,
+ const gchar **mime_hints,
+ guint32 unqueue_handle,
+ guint32 *handle,
+ GError **error)
+{
+ gint n;
+
+ g_debug ("exo_generic_thumbnailer_queue:");
+
+ return TRUE;
+
+ g_debug (" uris = ");
+ for (n = 0; uris[n] != NULL; ++n)
+ g_debug (" %s", uris[n]);
+
+ g_debug (" mime_hints = ");
+ for (n = 0; mime_hints[n] != NULL; ++n)
+ g_debug (" %s", mime_hints[n]);
+
+ return TRUE;
+}
+
+
+
+gboolean
+exo_generic_thumbnailer_test (ExoGenericThumbnailer *thumbnailer,
+ GError **error)
+{
+ g_debug ("Test");
+ return TRUE;
+}
Added: libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.h
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.h (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-generic-thumbnailer.h 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,53 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __EXO_GENERIC_THUMBNAILER_H__
+#define __EXO_GENERIC_THUMBNAILER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+#define EXO_TYPE_GENERIC_THUMBNAILER (exo_generic_thumbnailer_get_type ())
+#define EXO_GENERIC_THUMBNAILER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_GENERIC_THUMBNAILER, ExoGenericThumbnailer))
+#define EXO_GENERIC_THUMBNAILER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_GENERIC_THUMBNAILER, ExoGenericThumbnailerClass))
+#define EXO_IS_GENERIC_THUMBNAILER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_GENERIC_THUMBNAILER))
+#define EXO_IS_GENERIC_THUMBNAILER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_GENERIC_THUMBNAILER)
+#define EXO_GENERIC_THUMBNAILER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_GENERIC_THUMBNAILER, ExoGenericThumbnailerClass))
+
+typedef struct _ExoGenericThumbnailerPrivate ExoGenericThumbnailerPrivate;
+typedef struct _ExoGenericThumbnailerClass ExoGenericThumbnailerClass;
+typedef struct _ExoGenericThumbnailer ExoGenericThumbnailer;
+
+GType exo_generic_thumbnailer_get_type (void) G_GNUC_CONST;
+
+ExoGenericThumbnailer *exo_generic_thumbnailer_get_default (void) G_GNUC_WARN_UNUSED_RESULT;
+gboolean exo_generic_thumbnailer_queue (ExoGenericThumbnailer *thumbnailer,
+ const gchar **uris,
+ const gchar **mime_hints,
+ guint32 unqueue_handle,
+ guint32 *handle,
+ GError **error);
+gboolean exo_generic_thumbnailer_test (ExoGenericThumbnailer *thumbnailer,
+ GError **error);
+
+G_END_DECLS;
+
+#endif /* !__EXO_GENERIC_THUMBNAILER_H__ */
Added: libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-dbus.xml
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-dbus.xml (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-dbus.xml 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/org/freedesktop/Thumbnailer">
+ <interface name="org.freedesktop.thumbnailer.Generic">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="exo_generic_thumbnailer"/>
+ <annotation name="org.freedesktop.DBus.GLib.ClientCSymbol" value="exo_thumbnailer_proxy"/>
+
+ <method name="Queue">
+ <arg type="as" name="uris" direction="in" />
+ <arg type="as" name="mime_hints" direction="in" />
+ <arg type="u" name="handle_to_unqueue" direction="in" />
+ <arg type="u" name="handle" direction="out" />
+ </method>
+
+ <method name="Test">
+ </method>
+ </interface>
+</node>
Added: libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-main.c
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-main.c (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-thumbnailer-service-main.c 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,76 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; 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
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <glib.h>
+
+#include <libxfce4util/libxfce4util.h>
+
+#include <exo-thumbnailers/exo-thumbnailer-service.h>
+
+
+
+int
+main (int argc,
+ char **argv)
+{
+ ExoThumbnailerService *service;
+ GMainLoop *main_loop;
+ GError *error = NULL;
+
+ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+ g_set_application_name (_("Exo Thumbnailer Service"));
+
+#ifdef G_ENABLE_DEBUG
+ g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING);
+#endif
+
+ /* initialize the type system */
+ g_type_init ();
+
+ /* initialize the threading system */
+ if (!g_thread_supported ())
+ g_thread_init (NULL);
+
+ service = exo_thumbnailer_service_new_unique (&error);
+ if (G_UNLIKELY (service == NULL))
+ {
+ g_critical (_("Failed to start the exo thumbnailer service: %s"), error->message);
+ g_error_free (error);
+ return EXIT_FAILURE;
+ }
+
+ main_loop = g_main_loop_new (NULL, FALSE);
+
+ g_main_loop_run (main_loop);
+
+ g_object_unref (service);
+ g_main_loop_unref (main_loop);
+
+ return EXIT_SUCCESS;
+}
Added: libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.c
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.c (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.c 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,275 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; 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 <glib-object.h>
+
+#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
+
+#include <exo/exo-private.h>
+#include <exo-thumbnailers/exo-generic-thumbnailer.h>
+#include <exo-thumbnailers/exo-thumbnailer-service.h>
+
+
+
+#define EXO_THUMBNAILER_SERVICE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EXO_TYPE_THUMBNAILER_SERVICE, ExoThumbnailerServicePrivate))
+
+
+
+/* Property identifiers */
+enum
+{
+ PROP_0,
+};
+
+
+
+static void exo_thumbnailer_service_class_init (ExoThumbnailerServiceClass *klass);
+static void exo_thumbnailer_service_init (ExoThumbnailerService *service);
+static void exo_thumbnailer_service_constructed (GObject *object);
+static void exo_thumbnailer_service_finalize (GObject *object);
+static void exo_thumbnailer_service_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void exo_thumbnailer_service_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static gboolean exo_thumbnailer_service_start (ExoThumbnailerService *service,
+ GError **error);
+static DBusHandlerResult exo_thumbnailer_service_handle_dbus_disconnect (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data);
+
+
+
+struct _ExoThumbnailerServiceClass
+{
+ GObjectClass __parent__;
+};
+
+struct _ExoThumbnailerService
+{
+ GObject __parent__;
+
+ ExoThumbnailerServicePrivate *priv;
+};
+
+struct _ExoThumbnailerServicePrivate
+{
+ DBusGConnection *connection;
+ ExoGenericThumbnailer *thumbnailer;
+};
+
+
+
+static GObjectClass *exo_thumbnailer_service_parent_class = NULL;
+
+
+
+GType
+exo_thumbnailer_service_get_type (void)
+{
+ static GType type = G_TYPE_INVALID;
+
+ if (G_UNLIKELY (type == G_TYPE_INVALID))
+ {
+ type = g_type_register_static_simple (G_TYPE_OBJECT,
+ "ExoThumbnailerService",
+ sizeof (ExoThumbnailerServiceClass),
+ (GClassInitFunc) exo_thumbnailer_service_class_init,
+ sizeof (ExoThumbnailerService),
+ (GInstanceInitFunc) exo_thumbnailer_service_init,
+ 0);
+ }
+
+ return type;
+}
+
+
+
+static void
+exo_thumbnailer_service_class_init (ExoThumbnailerServiceClass *klass)
+{
+ GObjectClass *gobject_class;
+
+ g_type_class_add_private (klass, sizeof (ExoThumbnailerServicePrivate));
+
+ /* Determine the parent type class */
+ exo_thumbnailer_service_parent_class = g_type_class_peek_parent (klass);
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->constructed = exo_thumbnailer_service_constructed;
+ gobject_class->finalize = exo_thumbnailer_service_finalize;
+ gobject_class->get_property = exo_thumbnailer_service_get_property;
+ gobject_class->set_property = exo_thumbnailer_service_set_property;
+}
+
+
+
+static void
+exo_thumbnailer_service_init (ExoThumbnailerService *service)
+{
+ service->priv = EXO_THUMBNAILER_SERVICE_GET_PRIVATE (service);
+ service->priv->connection = NULL;
+ service->priv->thumbnailer = exo_generic_thumbnailer_get_default ();
+}
+
+
+
+static void
+exo_thumbnailer_service_constructed (GObject *object)
+{
+}
+
+
+
+static void
+exo_thumbnailer_service_finalize (GObject *object)
+{
+ ExoThumbnailerService *service = EXO_THUMBNAILER_SERVICE (object);
+
+ g_object_unref (service->priv->thumbnailer);
+
+ if (service->priv->connection != NULL)
+ dbus_g_connection_unref (service->priv->connection);
+
+ (*G_OBJECT_CLASS (exo_thumbnailer_service_parent_class)->finalize) (object);
+}
+
+
+
+static void
+exo_thumbnailer_service_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static void
+exo_thumbnailer_service_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (prop_id)
+ {
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
+
+static gboolean
+exo_thumbnailer_service_start (ExoThumbnailerService *service,
+ GError **error)
+{
+ DBusError dbus_error;
+ gint result;
+
+ _exo_return_val_if_fail (EXO_IS_THUMBNAILER_SERVICE (service), FALSE);
+ _exo_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ service->priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, error);
+ if (G_UNLIKELY (service->priv->connection == NULL))
+ return FALSE;
+
+ dbus_g_connection_register_g_object (service->priv->connection, "/org/freedesktop/Thumbnailer",
+ G_OBJECT (service->priv->thumbnailer));
+
+ dbus_connection_add_filter (dbus_g_connection_get_connection (service->priv->connection),
+ exo_thumbnailer_service_handle_dbus_disconnect,
+ service, NULL);
+
+ dbus_error_init (&dbus_error);
+
+ result = dbus_bus_request_name (dbus_g_connection_get_connection (service->priv->connection),
+ "org.freedesktop.thumbnailer.Generic",
+ DBUS_NAME_FLAG_DO_NOT_QUEUE, &dbus_error);
+
+ if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
+ {
+ if (dbus_error_is_set (&dbus_error))
+ {
+ if (error != NULL)
+ dbus_set_g_error (error, &dbus_error);
+
+ dbus_error_free (&dbus_error);
+ }
+ else if (error != NULL)
+ {
+ g_set_error (error, DBUS_GERROR, DBUS_GERROR_FAILED,
+ _("Another org.freedesktop.thumbnailer.Generic is already running"));
+ }
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+
+static DBusHandlerResult
+exo_thumbnailer_service_handle_dbus_disconnect (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ g_debug ("disconnect");
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+
+
+ExoThumbnailerService *
+exo_thumbnailer_service_new_unique (GError **error)
+{
+ ExoThumbnailerService *service = NULL;
+
+ _exo_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ service = g_object_new (EXO_TYPE_THUMBNAILER_SERVICE, NULL);
+
+ if (!exo_thumbnailer_service_start (service, error))
+ {
+ g_object_unref (service);
+ return NULL;
+ }
+
+ return service;
+}
Added: libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.h
===================================================================
--- libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.h (rev 0)
+++ libexo/trunk/exo-thumbnailers/exo-thumbnailer-service.h 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,45 @@
+/* vi:set et ai sw=2 sts=2 ts=2: */
+/*-
+ * Copyright (c) 2009 Jannis Pohlmann <jannis at xfce.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef __EXO_THUMBNAILER_SERVICE_H__
+#define __EXO_THUMBNAILER_SERVICE_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS;
+
+#define EXO_TYPE_THUMBNAILER_SERVICE (exo_thumbnailer_service_get_type ())
+#define EXO_THUMBNAILER_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_THUMBNAILER_SERVICE, ExoThumbnailerService))
+#define EXO_THUMBNAILER_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_THUMBNAILER_SERVICE, ExoThumbnailerServiceClass))
+#define EXO_IS_THUMBNAILER_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_THUMBNAILER_SERVICE))
+#define EXO_IS_THUMBNAILER_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_THUMBNAILER_SERVICE)
+#define EXO_THUMBNAILER_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_THUMBNAILER_SERVICE, ExoThumbnailerServiceClass))
+
+typedef struct _ExoThumbnailerServicePrivate ExoThumbnailerServicePrivate;
+typedef struct _ExoThumbnailerServiceClass ExoThumbnailerServiceClass;
+typedef struct _ExoThumbnailerService ExoThumbnailerService;
+
+GType exo_thumbnailer_service_get_type (void) G_GNUC_CONST;
+
+ExoThumbnailerService *exo_thumbnailer_service_new_unique (GError **error) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
+
+G_END_DECLS;
+
+#endif /* !__EXO_THUMBNAILER_SERVICE_H__ */
Added: libexo/trunk/exo-thumbnailers/org.xfce.ExoThumbnailer.service.in
===================================================================
--- libexo/trunk/exo-thumbnailers/org.xfce.ExoThumbnailer.service.in (rev 0)
+++ libexo/trunk/exo-thumbnailers/org.xfce.ExoThumbnailer.service.in 2009-05-14 14:42:26 UTC (rev 29956)
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.freedesktop.thumbnailer
+Exec=@libexecdir@/exo-thumbnailer-service
More information about the Xfce4-commits
mailing list