Last active
April 29, 2021 12:05
-
-
Save bbidulock/5fe3d829b8210e50a606dc9cfd145962 to your computer and use it in GitHub Desktop.
PKGBUILD for libunique
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Maintainer: Brian Bidulock <[email protected]> | |
# | |
pkgname=libunique | |
pkgver=1.1.6 | |
pkgrel=9 | |
pkgdesc="Library for writing single instance applications" | |
arch=('i686' 'x86_64') | |
license=('LGPL') | |
depends=('gtk2') | |
makedepends=('gtk-doc' 'gobject-introspection') | |
url="http://live.gnome.org/LibUnique" | |
source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.1/${pkgname}-${pkgver}.tar.bz2 | |
unique-gdbus.patch | |
remove_G_CONST_RETURN.patch) | |
sha256sums=('e5c8041cef8e33c55732f06a292381cb345db946cf792a4ae18aa5c66cdd4fbb' | |
'bf99ddbf9104502ea498a6812ec2d700f61f4dbbaa2471cd52174b0b27070769' | |
'194ebfcc4c9297c44bbcfe5d45474310983121cdad881b72265d79cf4ec44235') | |
prepare() { | |
cd $pkgname-$pkgver | |
patch -Np1 -i "${srcdir}/unique-gdbus.patch" | |
patch -Np1 -i "${srcdir}/remove_G_CONST_RETURN.patch" | |
} | |
build() { | |
cd $pkgname-$pkgver | |
autoreconf -fi | |
./configure --prefix=/usr --sysconfdir=/etc \ | |
--localstatedir=/var --disable-static \ | |
--disable-dbus \ | |
--disable-maintainer-flags | |
# Fight unused direct deps | |
sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ func_append compile_command " -Wl,-O1,--as-needed"\n\0/' libtool | |
make | |
} | |
package() { | |
cd $pkgname-$pkgver | |
make DESTDIR="${pkgdir}" install | |
# Remove documentation, provided by libunique3 | |
rm -r "$pkgdir/usr/share/gtk-doc" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -Nur libunique-1.1.6.orig/unique/uniqueapp.c libunique-1.1.6/unique/uniqueapp.c | |
--- libunique-1.1.6.orig/unique/uniqueapp.c 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniqueapp.c 2011-12-01 07:39:59.132319788 +0000 | |
@@ -781,7 +781,7 @@ | |
} | |
-G_CONST_RETURN gchar * | |
+const gchar * | |
unique_command_to_string (UniqueApp *app, | |
gint command) | |
{ | |
@@ -863,7 +863,7 @@ | |
return retval; | |
} | |
-G_CONST_RETURN gchar * | |
+const gchar * | |
unique_response_to_string (UniqueResponse response) | |
{ | |
GEnumClass *enum_class; | |
diff -Nur libunique-1.1.6.orig/unique/uniquebackend.c libunique-1.1.6/unique/uniquebackend.c | |
--- libunique-1.1.6.orig/unique/uniquebackend.c 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniquebackend.c 2011-12-01 07:39:24.418677950 +0000 | |
@@ -111,7 +111,7 @@ | |
* | |
* Return value: FIXME | |
*/ | |
-G_CONST_RETURN gchar * | |
+const gchar * | |
unique_backend_get_name (UniqueBackend *backend) | |
{ | |
g_return_val_if_fail (UNIQUE_IS_BACKEND (backend), NULL); | |
@@ -154,7 +154,7 @@ | |
* | |
* Return value: FIXME | |
*/ | |
-G_CONST_RETURN gchar * | |
+const gchar * | |
unique_backend_get_startup_id (UniqueBackend *backend) | |
{ | |
g_return_val_if_fail (UNIQUE_IS_BACKEND (backend), NULL); | |
diff -Nur libunique-1.1.6.orig/unique/uniquebackend.h libunique-1.1.6/unique/uniquebackend.h | |
--- libunique-1.1.6.orig/unique/uniquebackend.h 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniquebackend.h 2011-12-01 07:42:13.833467492 +0000 | |
@@ -94,10 +94,10 @@ | |
UniqueBackend * unique_backend_create (void); | |
-G_CONST_RETURN gchar *unique_backend_get_name (UniqueBackend *backend); | |
+const gchar *unique_backend_get_name (UniqueBackend *backend); | |
void unique_backend_set_name (UniqueBackend *backend, | |
const gchar *name); | |
-G_CONST_RETURN gchar *unique_backend_get_startup_id (UniqueBackend *backend); | |
+const gchar *unique_backend_get_startup_id (UniqueBackend *backend); | |
void unique_backend_set_startup_id (UniqueBackend *backend, | |
const gchar *startup_id); | |
GdkScreen * unique_backend_get_screen (UniqueBackend *backend); | |
diff -Nur libunique-1.1.6.orig/unique/uniqueinternals.h libunique-1.1.6/unique/uniqueinternals.h | |
--- libunique-1.1.6.orig/unique/uniqueinternals.h 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniqueinternals.h 2011-12-01 07:41:17.142977914 +0000 | |
@@ -44,11 +44,11 @@ | |
* and then back into an id | |
*/ | |
UniqueResponse unique_response_from_string (const gchar *response); | |
-G_CONST_RETURN gchar *unique_response_to_string (UniqueResponse response); | |
+const gchar *unique_response_to_string (UniqueResponse response); | |
gint unique_command_from_string (UniqueApp *app, | |
const gchar *command); | |
-G_CONST_RETURN gchar *unique_command_to_string (UniqueApp *app, | |
+const gchar *unique_command_to_string (UniqueApp *app, | |
gint command); | |
G_END_DECLS | |
diff -Nur libunique-1.1.6.orig/unique/uniquemessage.c libunique-1.1.6/unique/uniquemessage.c | |
--- libunique-1.1.6.orig/unique/uniquemessage.c 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniquemessage.c 2011-12-01 07:41:45.743225713 +0000 | |
@@ -185,7 +185,7 @@ | |
* | |
* Since: 1.0.2 | |
*/ | |
-G_CONST_RETURN guchar * | |
+const guchar * | |
unique_message_data_get (UniqueMessageData *message_data, | |
gsize *length) | |
{ | |
@@ -525,7 +525,7 @@ | |
* owned by the #UniqueMessageData structure and should not be | |
* modified or freed | |
*/ | |
-G_CONST_RETURN gchar * | |
+const gchar * | |
unique_message_data_get_startup_id (UniqueMessageData *message_data) | |
{ | |
g_return_val_if_fail (message_data != NULL, NULL); | |
diff -Nur libunique-1.1.6.orig/unique/uniquemessage.h libunique-1.1.6/unique/uniquemessage.h | |
--- libunique-1.1.6.orig/unique/uniquemessage.h 2011-12-01 07:38:17.748122298 +0000 | |
+++ libunique-1.1.6/unique/uniquemessage.h 2011-12-01 07:40:47.576064565 +0000 | |
@@ -48,7 +48,7 @@ | |
void unique_message_data_set (UniqueMessageData *message_data, | |
const guchar *data, | |
gsize length); | |
-G_CONST_RETURN guchar *unique_message_data_get (UniqueMessageData *message_data, | |
+const guchar *unique_message_data_get (UniqueMessageData *message_data, | |
gsize *length); | |
gboolean unique_message_data_set_text (UniqueMessageData *message_data, | |
@@ -63,7 +63,7 @@ | |
gchar * unique_message_data_get_filename (UniqueMessageData *message_data); | |
GdkScreen * unique_message_data_get_screen (UniqueMessageData *message_data); | |
-G_CONST_RETURN gchar * unique_message_data_get_startup_id (UniqueMessageData *message_data); | |
+const gchar * unique_message_data_get_startup_id (UniqueMessageData *message_data); | |
guint unique_message_data_get_workspace (UniqueMessageData *message_data); | |
G_END_DECLS |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 01066039529c0181f231325476bb4823c16a2aea Mon Sep 17 00:00:00 2001 | |
From: Christian Persch <[email protected]> | |
Date: Sat, 15 May 2010 17:47:45 +0000 | |
Subject: Add GDBus backend | |
Add backend using GDBus, the new D-BUS binding in GIO 2.25. | |
Bug #618723. | |
--- | |
diff --git a/configure.ac b/configure.ac | |
index bc3163a..b6a4221 100644 | |
--- a/configure.ac | |
+++ b/configure.ac | |
@@ -116,6 +116,19 @@ AS_IF([test "x$have_dbus" = "xyes"], | |
AM_CONDITIONAL([HAVE_DBUS], [test "x$have_dbus" = "xyes"]) | |
+dnl GDBus backend | |
+dnl This is the default backend if GIO is recent enough | |
+m4_define([gdbus_gio_required],[2.25.7]) | |
+PKG_CHECK_MODULES([GDBUS],[gio-2.0 >= gdbus_gio_required],[have_gdbus=yes],[have_gdbus=no]) | |
+ | |
+AS_IF([test "x$have_gdbus" = "xyes"], | |
+ [ | |
+ AC_DEFINE([HAVE_GDBUS],[1],[Define if GDBus backend is enabled]) | |
+ ] | |
+ ) | |
+ | |
+AM_CONDITIONAL([HAVE_GDBUS],[test "$have_gdbus" = "yes"]) | |
+ | |
dnl Bacon backend | |
dnl This is the fallback backend, so we *need* these headers and functions | |
dnl even if we end up using D-Bus | |
@@ -146,7 +159,13 @@ AM_CONDITIONAL([HAVE_BACON], [test "x$have_bacon" = "xyes"]) | |
dnl Choose the default backend | |
AC_MSG_CHECKING([for default IPC mechanism]) | |
-AS_IF([test "x$have_dbus" = "xyes"], | |
+AS_IF([test "x$have_gdbus" = "xyes"], | |
+ [ | |
+ UNIQUE_DEFAULT_BACKEND=gdbus | |
+ AC_MSG_RESULT([GDBus]) | |
+ ], | |
+ | |
+ [test "x$have_dbus" = "xyes"], | |
[ | |
UNIQUE_DEFAULT_BACKEND=dbus | |
AC_MSG_RESULT([D-Bus]) | |
@@ -243,6 +262,7 @@ AC_CONFIG_FILES([ | |
unique/uniqueversion.h | |
unique/bacon/Makefile | |
unique/dbus/Makefile | |
+ unique/gdbus/Makefile | |
tests/Makefile | |
po/Makefile.in | |
]) | |
@@ -261,6 +281,7 @@ Configuration: | |
Backends: | |
Unix Domain Socket: $have_bacon | |
D-BUS: $have_dbus | |
+ GDBus: $have_gdbus | |
Default backend: $UNIQUE_DEFAULT_BACKEND | |
" | |
diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am | |
index 3172588..2c1dbf4 100644 | |
--- a/doc/reference/Makefile.am | |
+++ b/doc/reference/Makefile.am | |
@@ -50,7 +50,8 @@ IGNORE_HFILES = \ | |
uniquemarshal.h \ | |
stamp-uniquemarshal.h \ | |
bacon \ | |
- dbus | |
+ dbus \ | |
+ gdbus | |
EXTRA_HFILES = | |
diff --git a/unique/Makefile.am b/unique/Makefile.am | |
index 6475a87..8f0b7ba 100644 | |
--- a/unique/Makefile.am | |
+++ b/unique/Makefile.am | |
@@ -12,7 +12,11 @@ if HAVE_DBUS | |
SUBDIRS += dbus | |
endif | |
-DIST_SUBDIRS = bacon dbus | |
+if HAVE_GDBUS | |
+SUBDIRS += gdbus | |
+endif | |
+ | |
+DIST_SUBDIRS = bacon dbus gdbus | |
INCLUDES = -I$(top_srcdir) | |
@@ -72,6 +76,10 @@ if HAVE_DBUS | |
unique_backend_libs += $(top_builddir)/unique/dbus/libunique-dbus.la | |
endif | |
+if HAVE_GDBUS | |
+unique_backend_libs += $(top_builddir)/unique/gdbus/libunique-gdbus.la | |
+endif | |
+ | |
uniquedir = $(includedir)/unique-1.0/unique | |
unique_HEADERS = \ | |
$(unique_sources_h) \ | |
diff --git a/unique/gdbus/.gitignore b/unique/gdbus/.gitignore | |
new file mode 100644 | |
index 0000000..c7e22c3 | |
--- /dev/null | |
+++ b/unique/gdbus/.gitignore | |
@@ -0,0 +1,2 @@ | |
+libunique_gdbus_la-uniquebackend-gdbus.lo | |
+libunique-gdbus.la | |
diff --git a/unique/gdbus/Makefile.am b/unique/gdbus/Makefile.am | |
new file mode 100644 | |
index 0000000..e10637d | |
--- /dev/null | |
+++ b/unique/gdbus/Makefile.am | |
@@ -0,0 +1,24 @@ | |
+include $(top_srcdir)/build/autotools/Makefile.am.silent | |
+ | |
+noinst_LTLIBRARIES = libunique-gdbus.la | |
+ | |
+libunique_gdbus_la_SOURCES = \ | |
+ uniquebackend-gdbus.h \ | |
+ uniquebackend-gdbus.c | |
+ | |
+libunique_gdbus_la_PPCFLAGS = \ | |
+ -DG_LOG_DOMAIN=\"Unique-GDBus\" \ | |
+ -DG_DISABLE_SINGLE_INCLUDES \ | |
+ -I$(top_srcdir) \ | |
+ $(AM_CPPFLAGS) | |
+ | |
+libunique_gdbus_la_CFLAGS = \ | |
+ $(UNIQUE_CFLAGS) \ | |
+ $(UNIQUE_DEBUG_CFLAGS) \ | |
+ $(MAINTAINER_CFLAGS) \ | |
+ $(GDBUS_CFLAGS) \ | |
+ $(AM_CFLAGS) | |
+ | |
+libunique_gdbus_la_LIBADD = \ | |
+ $(UNIQUE_LIBS) \ | |
+ $(GDBUS_LIBS) | |
diff --git a/unique/gdbus/uniquebackend-gdbus.c b/unique/gdbus/uniquebackend-gdbus.c | |
new file mode 100644 | |
index 0000000..14d54a9 | |
--- /dev/null | |
+++ b/unique/gdbus/uniquebackend-gdbus.c | |
@@ -0,0 +1,303 @@ | |
+/* Unique - Single Instance application library | |
+ * uniquebackend-gdbus.c: GDBus implementation of UniqueBackend | |
+ * | |
+ * Copyright (C) 2007 Emmanuele Bassi <[email protected]> | |
+ * Copyright © 2010 Christian Persch | |
+ * | |
+ * This library is free software; you can redistribute it and/or | |
+ * modify it under the terms of the GNU Lesser General Public | |
+ * License as published by the Free Software Foundation; either | |
+ * version 2.1 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 | |
+ * Lesser General Public License for more details. | |
+ * | |
+ * You should have received a copy of the GNU Lesser 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 <gio/gio.h> | |
+#include <gdk/gdk.h> | |
+ | |
+#include "../uniqueinternals.h" | |
+#include "uniquebackend-gdbus.h" | |
+ | |
+struct _UniqueBackendGDBus | |
+{ | |
+ UniqueBackend parent_instance; | |
+ | |
+ GDBusConnection *connection; | |
+ guint registration_id; | |
+ guint owner_id; | |
+ gboolean owns_name; | |
+ GMainLoop *loop; | |
+}; | |
+ | |
+struct _UniqueBackendGDBusClass | |
+{ | |
+ UniqueBackendClass parent_class; | |
+ GDBusNodeInfo *introspection_data; | |
+}; | |
+ | |
+G_DEFINE_TYPE (UniqueBackendGDBus, unique_backend_gdbus, UNIQUE_TYPE_BACKEND); | |
+ | |
+static const char introspection_xml[] = | |
+ "<node name='/'>" | |
+ "<interface name='org.gtk.UniqueApp'>" | |
+ "<method name='SendMessage'>" | |
+ "<arg name='command' type='s' direction='in'/>" | |
+ "<arg name='message' type='(suuus)' direction='in'/>" | |
+ "<arg name='time' type='u' direction='in'/>" | |
+ "<arg name='response' type='s' direction='out'/>" | |
+ "</method>" | |
+ "</interface>" | |
+ "</node>"; | |
+ | |
+static void | |
+method_call_cb (GDBusConnection *connection, | |
+ const gchar *sender, | |
+ const gchar *object_path, | |
+ const gchar *interface_name, | |
+ const gchar *method_name, | |
+ GVariant *parameters, | |
+ GDBusMethodInvocation *invocation, | |
+ gpointer user_data) | |
+{ | |
+ if (g_strcmp0 (interface_name, "org.gtk.UniqueApp") != 0 || | |
+ g_strcmp0 (object_path, "/Factory") != 0) | |
+ return; | |
+ | |
+ if (g_strcmp0 (method_name, "SendMessage") == 0) | |
+ { | |
+ UniqueBackend *backend = UNIQUE_BACKEND (user_data); | |
+ const gchar *command_str, *data, *startup_id; | |
+ guint len, screen_num, workspace, time_; | |
+ UniqueMessageData message_data; | |
+ gint command; | |
+ UniqueResponse response; | |
+ GdkDisplay *display; | |
+ | |
+ g_variant_get (parameters, | |
+ "(&s(&suuu&s)u)", | |
+ &command_str, | |
+ &data, &len, &screen_num, &workspace, &startup_id, | |
+ &time_); | |
+ | |
+ command = unique_command_from_string (backend->parent, command_str); | |
+ if (command == 0) | |
+ { | |
+ g_dbus_method_invocation_return_error (invocation, | |
+ G_DBUS_ERROR, | |
+ G_DBUS_ERROR_INVALID_ARGS, | |
+ "Invalid command `%s' received", | |
+ command_str); | |
+ return; | |
+ } | |
+ | |
+ display = gdk_display_get_default (); | |
+ | |
+ message_data.data = len > 0 ? (guchar *) data : NULL; | |
+ message_data.length = (gint) len; | |
+ message_data.workspace = workspace; | |
+ message_data.startup_id = (char *) startup_id; | |
+ if (screen_num >= 0 && screen_num < gdk_display_get_n_screens (display)) | |
+ message_data.screen = gdk_display_get_screen (display, screen_num); | |
+ else | |
+ message_data.screen = gdk_screen_get_default (); | |
+ | |
+ response = unique_app_emit_message_received (backend->parent, command, &message_data, time_); | |
+ | |
+ g_dbus_method_invocation_return_value (invocation, | |
+ g_variant_new ("(s)", unique_response_to_string (response))); | |
+ return; | |
+ } | |
+} | |
+ | |
+static void | |
+name_acquired_cb (GDBusConnection *connection, | |
+ const gchar *name, | |
+ gpointer user_data) | |
+{ | |
+ UniqueBackendGDBus *backend_gdbus = UNIQUE_BACKEND_GDBUS (user_data); | |
+ | |
+ backend_gdbus->owns_name = TRUE; | |
+ if (backend_gdbus->loop && g_main_loop_is_running (backend_gdbus->loop)) | |
+ g_main_loop_quit (backend_gdbus->loop); | |
+} | |
+ | |
+static void | |
+name_lost_cb (GDBusConnection *connection, | |
+ const gchar *name, | |
+ gpointer user_data) | |
+{ | |
+ UniqueBackendGDBus *backend_gdbus = UNIQUE_BACKEND_GDBUS (user_data); | |
+ | |
+ backend_gdbus->owns_name = FALSE; | |
+ if (backend_gdbus->loop && g_main_loop_is_running (backend_gdbus->loop)) | |
+ g_main_loop_quit (backend_gdbus->loop); | |
+} | |
+ | |
+static const GDBusInterfaceVTable interface_vtable = { | |
+ method_call_cb, | |
+ NULL, | |
+ NULL | |
+}; | |
+ | |
+static gboolean | |
+unique_backend_gdbus_request_name (UniqueBackend *backend) | |
+{ | |
+ UniqueBackendGDBus *backend_gdbus = UNIQUE_BACKEND_GDBUS (backend); | |
+ UniqueBackendGDBusClass *klass = UNIQUE_BACKEND_GDBUS_GET_CLASS (backend); | |
+ GError *error; | |
+ | |
+ error = NULL; | |
+ backend_gdbus->connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); | |
+ if (!backend_gdbus->connection) | |
+ { | |
+ g_warning ("Unable to open a connection to the session bus: %s", | |
+ error->message); | |
+ g_error_free (error); | |
+ | |
+ return FALSE; | |
+ } | |
+ | |
+ backend_gdbus->registration_id = | |
+ g_dbus_connection_register_object (backend_gdbus->connection, | |
+ "/Factory", | |
+ klass->introspection_data->interfaces[0], | |
+ &interface_vtable, | |
+ backend, NULL, | |
+ &error); | |
+ if (backend_gdbus->registration_id == 0) | |
+ { | |
+ g_warning ("Unable to register object with the session bus: %s", | |
+ error->message); | |
+ g_error_free (error); | |
+ | |
+ return FALSE; | |
+ } | |
+ | |
+ backend_gdbus->owns_name = FALSE; | |
+ | |
+ backend_gdbus->owner_id = | |
+ g_bus_own_name_on_connection (backend_gdbus->connection, | |
+ unique_backend_get_name (backend), | |
+ G_BUS_NAME_OWNER_FLAGS_NONE, | |
+ name_acquired_cb, | |
+ name_lost_cb, | |
+ backend, NULL); | |
+ | |
+ backend_gdbus->loop = g_main_loop_new (NULL, FALSE); | |
+ g_main_loop_run (backend_gdbus->loop); | |
+ g_main_loop_unref (backend_gdbus->loop); | |
+ backend_gdbus->loop = NULL; | |
+ | |
+ return backend_gdbus->owns_name; | |
+} | |
+ | |
+static UniqueResponse | |
+unique_backend_gdbus_send_message (UniqueBackend *backend, | |
+ gint command, | |
+ UniqueMessageData *message_data, | |
+ guint time_) | |
+{ | |
+ UniqueBackendGDBus *backend_gdbus = UNIQUE_BACKEND_GDBUS (backend); | |
+ GVariantBuilder builder; | |
+ GVariant *result; | |
+ const gchar *command_str, *resp; | |
+ UniqueResponse response; | |
+ GError *error; | |
+ | |
+ command_str = unique_command_to_string (backend->parent, command); | |
+ | |
+ g_variant_builder_init (&builder, G_VARIANT_TYPE ("(s(suuus)u)")); | |
+ g_variant_builder_add (&builder, "s", command_str ? command_str : ""); | |
+ g_variant_builder_open (&builder, G_VARIANT_TYPE ("(suuus)")); | |
+ g_variant_builder_add (&builder, "s", message_data->data ? (char *) message_data->data : ""); | |
+ g_variant_builder_add (&builder, "u", (guint) message_data->length); | |
+ g_variant_builder_add (&builder, "u", (guint) gdk_screen_get_number (message_data->screen)); | |
+ g_variant_builder_add (&builder, "u", (guint) message_data->workspace); | |
+ g_variant_builder_add (&builder, "s", message_data->startup_id ? message_data->startup_id : ""); | |
+ g_variant_builder_close (&builder); | |
+ g_variant_builder_add (&builder, "u", time_); | |
+ | |
+ error = NULL; | |
+ result = g_dbus_connection_call_sync (backend_gdbus->connection, | |
+ unique_backend_get_name (backend), | |
+ "/Factory", | |
+ "org.gtk.UniqueApp", | |
+ "SendMessage", | |
+ g_variant_builder_end (&builder), | |
+ G_VARIANT_TYPE ("(s)"), | |
+ G_DBUS_CALL_FLAGS_NO_AUTO_START, | |
+ -1, | |
+ NULL, | |
+ &error); | |
+ if (error) | |
+ { | |
+ g_warning ("Error while sending message: %s", error->message); | |
+ g_error_free (error); | |
+ | |
+ return UNIQUE_RESPONSE_INVALID; | |
+ } | |
+ | |
+ g_variant_get (result, "(&s)", &resp); | |
+ response = unique_response_from_string (resp); | |
+ g_variant_unref (result); | |
+ | |
+ return response; | |
+} | |
+ | |
+static void | |
+unique_backend_gdbus_dispose (GObject *gobject) | |
+{ | |
+ UniqueBackendGDBus *backend_gdbus = UNIQUE_BACKEND_GDBUS (gobject); | |
+ | |
+ if (backend_gdbus->owner_id != 0) | |
+ { | |
+ g_bus_unown_name (backend_gdbus->owner_id); | |
+ backend_gdbus->owner_id = 0; | |
+ } | |
+ if (backend_gdbus->registration_id != 0) | |
+ { | |
+ g_assert (backend_gdbus->connection != NULL); | |
+ g_dbus_connection_unregister_object (backend_gdbus->connection, | |
+ backend_gdbus->registration_id); | |
+ backend_gdbus->registration_id = 0; | |
+ } | |
+ if (backend_gdbus->connection) | |
+ { | |
+ g_object_unref (backend_gdbus->connection); | |
+ backend_gdbus->connection = NULL; | |
+ } | |
+ | |
+ G_OBJECT_CLASS (unique_backend_gdbus_parent_class)->dispose (gobject); | |
+} | |
+ | |
+static void | |
+unique_backend_gdbus_class_init (UniqueBackendGDBusClass *klass) | |
+{ | |
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); | |
+ UniqueBackendClass *backend_class = UNIQUE_BACKEND_CLASS (klass); | |
+ | |
+ gobject_class->dispose = unique_backend_gdbus_dispose; | |
+ | |
+ backend_class->request_name = unique_backend_gdbus_request_name; | |
+ backend_class->send_message = unique_backend_gdbus_send_message; | |
+ | |
+ klass->introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); | |
+ g_assert (klass->introspection_data != NULL); | |
+} | |
+ | |
+static void | |
+unique_backend_gdbus_init (UniqueBackendGDBus *backend) | |
+{ | |
+} | |
diff --git a/unique/gdbus/uniquebackend-gdbus.h b/unique/gdbus/uniquebackend-gdbus.h | |
new file mode 100644 | |
index 0000000..41eb6e5 | |
--- /dev/null | |
+++ b/unique/gdbus/uniquebackend-gdbus.h | |
@@ -0,0 +1,43 @@ | |
+/* Unique - Single Instance application library | |
+ * uniquebackend-gdbus.c: GDBus implementation of UniqueBackend | |
+ * | |
+ * Copyright (C) 2007 Emmanuele Bassi <[email protected]> | |
+ * | |
+ * This library is free software; you can redistribute it and/or | |
+ * modify it under the terms of the GNU Lesser General Public | |
+ * License as published by the Free Software Foundation; either | |
+ * version 2.1 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 | |
+ * Lesser General Public License for more details. | |
+ * | |
+ * You should have received a copy of the GNU Lesser 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 | |
+ */ | |
+ | |
+#ifndef __UNIQUE_BACKEND_GDBUS_H__ | |
+#define __UNIQUE_BACKEND_GDBUS_H__ | |
+ | |
+#include <unique/uniquebackend.h> | |
+ | |
+G_BEGIN_DECLS | |
+ | |
+#define UNIQUE_TYPE_BACKEND_GDBUS (unique_backend_gdbus_get_type ()) | |
+#define UNIQUE_BACKEND_GDBUS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), UNIQUE_TYPE_BACKEND_GDBUS, UniqueBackendGDBus)) | |
+#define UNIQUE_IS_BACKEND_GDBUS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), UNIQUE_TYPE_BACKEND_GDBUS)) | |
+#define UNIQUE_BACKEND_GDBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), UNIQUE_TYPE_BACKEND_GDBUS, UniqueBackendGDBusClass)) | |
+#define UNIQUE_IS_BACKEND_GDBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), UNIQUE_TYPE_BACKEND_GDBUS)) | |
+#define UNIQUE_BACKEND_GDBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), UNIQUE_TYPE_BACKEND_GDBUS, UniqueBackendGDBusClass)) | |
+ | |
+typedef struct _UniqueBackendGDBus UniqueBackendGDBus; | |
+typedef struct _UniqueBackendGDBusClass UniqueBackendGDBusClass; | |
+ | |
+GType unique_backend_gdbus_get_type (void) G_GNUC_CONST; | |
+ | |
+G_END_DECLS | |
+ | |
+#endif /* __UNIQUE_BACKEND_GDBUS_H__ */ | |
diff --git a/unique/uniquebackend.c b/unique/uniquebackend.c | |
index 18a0c45..a76e42e 100644 | |
--- a/unique/uniquebackend.c | |
+++ b/unique/uniquebackend.c | |
@@ -298,6 +298,9 @@ unique_backend_send_message (UniqueBackend *backend, | |
#ifdef HAVE_DBUS | |
#include "dbus/uniquebackend-dbus.h" | |
#endif | |
+#ifdef HAVE_GDBUS | |
+#include "gdbus/uniquebackend-gdbus.h" | |
+#endif | |
/** | |
* unique_backend_create: | |
@@ -329,6 +332,10 @@ unique_backend_create (void) | |
if (strcmp (backend_name, "dbus") == 0) | |
backend_gtype = unique_backend_dbus_get_type (); | |
#endif /* HAVE_DBUS */ | |
+#ifdef HAVE_GDBUS | |
+ if (strcmp (backend_name, "gdbus") == 0) | |
+ backend_gtype = unique_backend_gdbus_get_type (); | |
+#endif /* HAVE_GDBUS */ | |
#if !defined(HAVE_BACON) && !defined(HAVE_DBUS) | |
#error Need either bacon or dbus | |
#endif | |
-- | |
cgit v0.8.3.1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment