[Xfce4-commits] [apps/ristretto] 01/01: Port to GDBus
noreply at xfce.org
noreply at xfce.org
Mon Jul 10 01:35:17 CEST 2017
This is an automated email from the git hooks/post-receive script.
f 2 4 0 4 p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository apps/ristretto.
commit d2376833f85ce9836f8aa7d5cf74faa5b0434124
Author: Eric Koegel <eric.koegel at gmail.com>
Date: Wed Jun 21 08:56:51 2017 +0300
Port to GDBus
With xfconf 4.13.1, ristretto was failing to compile due to
DBUS_GLIB_CFLAGS + LIBS not being in the src/Makefile.am file.
Instead of adding that simple fix, this patch goes one step
further and just ports it to GDBus.
Signed-off-by: Igor <f2404 at yandex.ru>
---
.gitignore | 1 +
configure.ac.in | 1 -
src/Makefile.am | 15 ++++-
src/main_window.c | 49 +++++++-------
src/thumbnailer.c | 149 ++++++++++++++++++-------------------------
src/tumbler-service-dbus.xml | 55 ++++++++++++++++
6 files changed, 157 insertions(+), 113 deletions(-)
diff --git a/.gitignore b/.gitignore
index 4be0c37..a58b67f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ Makefile.in
src/.deps
src/ristretto
src/marshal.[ch]
+src/tumbler.[ch]
src/main_window_ui.h
src/stamp-marshal.h
autom4te.cache
diff --git a/configure.ac.in b/configure.ac.in
index 8de673c..7c6acf3 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -58,7 +58,6 @@ XDT_CHECK_PACKAGE([GTHREAD], [gthread-2.0], [2.24.0])
XDT_CHECK_PACKAGE([GOBJECT], [gobject-2.0], [2.24.0])
XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.18.0])
XDT_CHECK_PACKAGE([GIO_UNIX], [gio-unix-2.0], [2.18.0])
-XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.34])
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.10.0])
XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0])
diff --git a/src/Makefile.am b/src/Makefile.am
index 36a31dc..e6d41e0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -14,6 +14,7 @@ ristretto_SOURCES = \
gnome_wallpaper_manager.c gnome_wallpaper_manager.h \
app_menu_item.c app_menu_item.h \
thumbnailer.c thumbnailer.h \
+ tumbler.c tumbler.h \
marshal.c marshal.h \
file.c file.h \
privacy_dialog.h privacy_dialog.c \
@@ -65,7 +66,9 @@ if MAINTAINER_MODE
ristretto_built_sources = \
marshal.h \
- marshal.c
+ marshal.c \
+ tumbler.c \
+ tumbler.h
BUILT_SOURCES = \
$(ristretto_built_sources) \
@@ -102,10 +105,18 @@ marshal.c: marshal.list Makefile
&& rm -f xgen-tmc \
)
+tumbler.c tumbler.h : $(srcdir)/tumbler-service-dbus.xml Makefile.am
+ gdbus-codegen \
+ --c-namespace=Tumbler \
+ --interface-prefix=org.freedesktop.thumbnails. \
+ --generate-c-code=tumbler \
+ $(srcdir)/tumbler-service-dbus.xml
+
DISTCLEANFILES += \
stamp-marshal.h
endif
EXTRA_DIST = \
- main_window_ui.xml
+ main_window_ui.xml \
+ tumbler-service-dbus.xml
diff --git a/src/main_window.c b/src/main_window.c
index a960ac2..78c0be2 100644
--- a/src/main_window.c
+++ b/src/main_window.c
@@ -28,8 +28,6 @@
#include <libxfce4ui/libxfce4ui.h>
#include <libexif/exif-data.h>
-#include <dbus/dbus-glib.h>
-
#include <cairo/cairo.h>
#include "settings.h"
@@ -78,8 +76,7 @@ struct _RsttoMainWindowPriv
RsttoMimeDB *db;
- DBusGConnection *connection;
- DBusGProxy *filemanager_proxy;
+ GDBusProxy *filemanager_proxy;
guint show_fs_toolbar_timeout_id;
gint window_save_geometry_timer_id;
@@ -808,16 +805,15 @@ rstto_main_window_init (RsttoMainWindow *window)
/* D-Bus stuff */
- window->priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
- if (window->priv->connection)
- {
- window->priv->filemanager_proxy =
- dbus_g_proxy_new_for_name(
- window->priv->connection,
- "org.xfce.FileManager",
- "/org/xfce/FileManager",
- "org.xfce.FileManager");
- }
+ window->priv->filemanager_proxy =
+ g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.xfce.FileManager",
+ "/org/xfce/FileManager",
+ "org.xfce.FileManager",
+ NULL,
+ NULL);
desktop_type = rstto_settings_get_string_property (window->priv->settings_manager, "desktop-type");
if (desktop_type)
@@ -1242,6 +1238,8 @@ rstto_main_window_dispose(GObject *object)
window->priv->action_group = NULL;
}
+ g_clear_object (&window->priv->filemanager_proxy);
+
g_free (window->priv);
window->priv = NULL;
}
@@ -3390,6 +3388,8 @@ cb_rstto_main_window_properties (GtkWidget *widget, RsttoMainWindow *window)
*/
if ( TRUE == use_thunar_properties )
{
+ GVariant *unused = NULL;
+
/* Get the file-uri */
uri = rstto_file_get_uri(file);
@@ -3397,14 +3397,17 @@ cb_rstto_main_window_properties (GtkWidget *widget, RsttoMainWindow *window)
* interface. If it fails, fall back to the
* internal properties-dialog.
*/
- if(dbus_g_proxy_call(window->priv->filemanager_proxy,
- "DisplayFileProperties",
- &error,
- G_TYPE_STRING, uri,
- G_TYPE_STRING, gdk_display_get_name(display),
- G_TYPE_STRING, "",
- G_TYPE_INVALID,
- G_TYPE_INVALID) == FALSE)
+ unused = g_dbus_proxy_call_sync (window->priv->filemanager_proxy,
+ "DisplayFileProperties",
+ g_variant_new ("(sss)",
+ uri,
+ gdk_display_get_name(display),
+ ""),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (error != NULL)
{
g_warning("DBUS CALL FAILED: '%s'", error->message);
@@ -3417,6 +3420,8 @@ cb_rstto_main_window_properties (GtkWidget *widget, RsttoMainWindow *window)
/* Cleanup the file-properties dialog */
gtk_widget_destroy(dialog);
+ } else {
+ g_variant_unref (unused);
}
}
else
diff --git a/src/thumbnailer.c b/src/thumbnailer.c
index 22e669a..ba7be67 100644
--- a/src/thumbnailer.c
+++ b/src/thumbnailer.c
@@ -23,7 +23,6 @@
#include <glib.h>
#include <gio/gio.h>
-#include <dbus/dbus-glib.h>
#include <libexif/exif-data.h>
@@ -34,6 +33,7 @@
#include "settings.h"
#include "thumbnailer.h"
#include "marshal.h"
+#include "tumbler.h"
static void
rstto_thumbnailer_init (GObject *);
@@ -60,14 +60,14 @@ rstto_thumbnailer_get_property (
static void
cb_rstto_thumbnailer_request_finished (
- DBusGProxy *proxy,
- gint handle,
+ TumblerThumbnailer1 *proxy,
+ guint arg_handle,
gpointer data);
static void
cb_rstto_thumbnailer_thumbnail_ready (
- DBusGProxy *proxy,
- gint handle,
- const gchar **uri,
+ TumblerThumbnailer1 *proxy,
+ guint handle,
+ const gchar *const *uri,
gpointer data);
static gboolean
@@ -122,18 +122,18 @@ rstto_thumbnailer_get_type (void)
struct _RsttoThumbnailerPriv
{
- DBusGConnection *connection;
- DBusGProxy *proxy;
- RsttoSettings *settings;
+ GDBusConnection *connection;
+ TumblerThumbnailer1 *proxy;
+ RsttoSettings *settings;
- GSList *queue;
+ GSList *queue;
- GSList *in_process_queue;
- gint handle;
+ GSList *in_process_queue;
+ gint handle;
- gboolean show_missing_thumbnailer_error;
+ gboolean show_missing_thumbnailer_error;
- gint request_timer_id;
+ gint request_timer_id;
};
static void
@@ -142,7 +142,7 @@ rstto_thumbnailer_init (GObject *object)
RsttoThumbnailer *thumbnailer = RSTTO_THUMBNAILER (object);
thumbnailer->priv = g_new0 (RsttoThumbnailerPriv, 1);
- thumbnailer->priv->connection = dbus_g_bus_get(DBUS_BUS_SESSION, NULL);
+ thumbnailer->priv->connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL);
thumbnailer->priv->settings = rstto_settings_new();
thumbnailer->priv->show_missing_thumbnailer_error =
@@ -153,43 +153,22 @@ rstto_thumbnailer_init (GObject *object)
if (thumbnailer->priv->connection)
{
- thumbnailer->priv->proxy = dbus_g_proxy_new_for_name (
+ thumbnailer->priv->proxy = tumbler_thumbnailer1_proxy_new_sync (
thumbnailer->priv->connection,
+ G_DBUS_PROXY_FLAGS_NONE,
"org.freedesktop.thumbnails.Thumbnailer1",
"/org/freedesktop/thumbnails/Thumbnailer1",
- "org.freedesktop.thumbnails.Thumbnailer1");
-
- dbus_g_object_register_marshaller (
- (GClosureMarshal) _rstto_marshal_VOID__UINT_BOXED,
- G_TYPE_NONE,
- G_TYPE_UINT,
- G_TYPE_STRV,
- G_TYPE_INVALID);
-
- dbus_g_proxy_add_signal (
- thumbnailer->priv->proxy,
- "Finished",
- G_TYPE_UINT,
- G_TYPE_INVALID);
- dbus_g_proxy_add_signal (
- thumbnailer->priv->proxy,
- "Ready",
- G_TYPE_UINT,
- G_TYPE_STRV,
- G_TYPE_INVALID);
-
- dbus_g_proxy_connect_signal (
- thumbnailer->priv->proxy,
- "Finished",
- G_CALLBACK (cb_rstto_thumbnailer_request_finished),
- thumbnailer,
- NULL);
- dbus_g_proxy_connect_signal (
- thumbnailer->priv->proxy,
- "Ready",
- G_CALLBACK(cb_rstto_thumbnailer_thumbnail_ready),
- thumbnailer,
+ NULL,
NULL);
+
+ g_signal_connect(thumbnailer->priv->proxy,
+ "finished",
+ G_CALLBACK (cb_rstto_thumbnailer_request_finished),
+ thumbnailer);
+ g_signal_connect(thumbnailer->priv->proxy,
+ "ready",
+ G_CALLBACK(cb_rstto_thumbnailer_thumbnail_ready),
+ thumbnailer);
}
}
@@ -234,20 +213,11 @@ rstto_thumbnailer_dispose (GObject *object)
if (thumbnailer->priv)
{
- if (thumbnailer->priv->settings)
- {
- g_object_unref (thumbnailer->priv->settings);
- thumbnailer->priv->settings = NULL;
- }
+ g_clear_object (&thumbnailer->priv->settings);
+ g_clear_object (&thumbnailer->priv->proxy);
+ g_clear_object (&thumbnailer->priv->connection);
- if (thumbnailer->priv->proxy)
- {
- g_object_unref (thumbnailer->priv->proxy);
- thumbnailer->priv->proxy = NULL;
- }
-
- g_free (thumbnailer->priv);
- thumbnailer->priv = NULL;
+ g_clear_pointer (&thumbnailer->priv, g_free);
}
}
@@ -327,12 +297,14 @@ rstto_thumbnailer_queue_file (
g_source_remove (thumbnailer->priv->request_timer_id);
if (thumbnailer->priv->handle)
{
- if(dbus_g_proxy_call(thumbnailer->priv->proxy,
- "Dequeue",
- NULL,
- G_TYPE_UINT, thumbnailer->priv->handle,
- G_TYPE_INVALID) == FALSE)
+ if(tumbler_thumbnailer1_call_dequeue_sync(
+ thumbnailer->priv->proxy,
+ thumbnailer->priv->handle,
+ NULL,
+ NULL) == FALSE)
{
+ /* If this fails it usually means there's a thumbnail already
+ * being processed, no big deal */
}
thumbnailer->priv->handle = 0;
}
@@ -370,12 +342,14 @@ rstto_thumbnailer_dequeue_file (
if (thumbnailer->priv->handle)
{
- if(dbus_g_proxy_call(thumbnailer->priv->proxy,
- "Dequeue",
+ if(tumbler_thumbnailer1_call_dequeue_sync(
+ thumbnailer->priv->proxy,
+ thumbnailer->priv->handle,
NULL,
- G_TYPE_UINT, thumbnailer->priv->handle,
- G_TYPE_INVALID) == FALSE)
+ NULL) == FALSE)
{
+ /* If this fails it usually means there's a thumbnail already
+ * being processed, no big deal */
}
thumbnailer->priv->handle = 0;
g_slist_foreach (thumbnailer->priv->in_process_queue, (GFunc)g_object_unref, NULL);
@@ -437,23 +411,22 @@ rstto_thumbnailer_queue_request_timer (
i++;
}
- if(dbus_g_proxy_call(thumbnailer->priv->proxy,
- "Queue",
- &error,
- G_TYPE_STRV, uris,
- G_TYPE_STRV, mimetypes,
- G_TYPE_STRING, "normal",
- G_TYPE_STRING, "default",
- G_TYPE_UINT, 0,
- G_TYPE_INVALID,
- G_TYPE_UINT, &thumbnailer->priv->handle,
- G_TYPE_INVALID) == FALSE)
+ if(tumbler_thumbnailer1_call_queue_sync(
+ thumbnailer->priv->proxy,
+ (const gchar * const*)uris,
+ (const gchar * const*)mimetypes,
+ "normal",
+ "default",
+ 0,
+ &thumbnailer->priv->handle,
+ NULL,
+ &error) == FALSE)
{
if (NULL != error)
{
g_warning("DBUS-call failed:%s", error->message);
- if ((error->domain == DBUS_GERROR) &&
- (error->code == DBUS_GERROR_SERVICE_UNKNOWN) &&
+ if ((error->domain == G_DBUS_ERROR) &&
+ (error->code == G_DBUS_ERROR_SERVICE_UNKNOWN) &&
thumbnailer->priv->show_missing_thumbnailer_error == TRUE)
{
GDK_THREADS_ENTER();
@@ -508,8 +481,8 @@ rstto_thumbnailer_queue_request_timer (
static void
cb_rstto_thumbnailer_request_finished (
- DBusGProxy *proxy,
- gint handle,
+ TumblerThumbnailer1 *proxy,
+ guint arg_handle,
gpointer data)
{
RsttoThumbnailer *thumbnailer = RSTTO_THUMBNAILER (data);
@@ -526,9 +499,9 @@ cb_rstto_thumbnailer_request_finished (
static void
cb_rstto_thumbnailer_thumbnail_ready (
- DBusGProxy *proxy,
- gint handle,
- const gchar **uri,
+ TumblerThumbnailer1 *proxy,
+ guint handle,
+ const gchar *const *uri,
gpointer data)
{
RsttoThumbnailer *thumbnailer = RSTTO_THUMBNAILER (data);
diff --git a/src/tumbler-service-dbus.xml b/src/tumbler-service-dbus.xml
new file mode 100644
index 0000000..9076691
--- /dev/null
+++ b/src/tumbler-service-dbus.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node name="/org/freedesktop/thumbnails/Thumbnailer1">
+ <interface name="org.freedesktop.thumbnails.Thumbnailer1">
+ <method name="Queue">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+ <arg type="as" name="uris" direction="in" />
+ <arg type="as" name="mime_types" direction="in" />
+ <arg type="s" name="flavor" direction="in" />
+ <arg type="s" name="scheduler" direction="in" />
+ <arg type="u" name="handle_to_unqueue" direction="in" />
+ <arg type="u" name="handle" direction="out" />
+ </method>
+
+ <method name="Dequeue">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+ <arg type="u" name="handle" direction="in" />
+ </method>
+
+ <method name="GetSupported">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
+ <arg type="as" name="uri_schemes" direction="out" />
+ <arg type="as" name="mime_types" direction="out" />
+ </method>
+
+ <method name="GetSchedulers">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
+ <arg type="as" name="schedulers" direction="out" />
+ </method>
+
+ <method name="GetFlavors">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value="true" />
+ <arg type="as" name="flavors" direction="out" />
+ </method>
+
+ <signal name="Started">
+ <arg type="u" name="handle" />
+ </signal>
+
+ <signal name="Finished">
+ <arg type="u" name="handle" />
+ </signal>
+
+ <signal name="Ready">
+ <arg type="u" name="handle" />
+ <arg type="as" name="uris" />
+ </signal>
+
+ <signal name="Error">
+ <arg type="u" name="handle" />
+ <arg type="as" name="failed_uris" />
+ <arg type="i" name="error_code" />
+ <arg type="s" name="message" />
+ </signal>
+ </interface>
+</node>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list