12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037 |
- Submitted By: Armin K. <krejzi at email dot com>
- Date: 2013-03-16
- Initial Package Version: 1.1.6
- Upstream Status: In Upstream VCS
- Origin: Upstream VCS
- Description: Varius fixes from upstream including build system fixes, compilation
- fixes and new GDBus backend.
- --- a/build/autotools/introspection.m4 2009-09-21 14:31:14.000000000 +0200
- +++ b/build/autotools/introspection.m4 2013-03-16 23:47:50.178671206 +0100
- @@ -59,12 +59,18 @@
- INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
- INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0`
- INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)"
- + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
- + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
- + INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
- fi
- AC_SUBST(INTROSPECTION_SCANNER)
- AC_SUBST(INTROSPECTION_COMPILER)
- AC_SUBST(INTROSPECTION_GENERATE)
- AC_SUBST(INTROSPECTION_GIRDIR)
- AC_SUBST(INTROSPECTION_TYPELIBDIR)
- + AC_SUBST(INTROSPECTION_CFLAGS)
- + AC_SUBST(INTROSPECTION_LIBS)
- + AC_SUBST(INTROSPECTION_MAKEFILE)
-
- AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
- ])
- --- a/build/autotools/Makefile.am 2009-11-01 18:52:21.000000000 +0100
- +++ b/build/autotools/Makefile.am 2013-03-16 23:47:50.178671206 +0100
- @@ -1,7 +1,4 @@
- EXTRA_DIST = \
- - shave-libtool.in \
- - shave.in \
- - shave.m4 \
- as-compiler-flag.m4 \
- introspection.m4 \
- Makefile.am.enums \
- --- a/build/autotools/Makefile.am.silent 2009-11-01 19:00:57.000000000 +0100
- +++ b/build/autotools/Makefile.am.silent 2013-03-16 23:47:50.178671206 +0100
- @@ -1,10 +1,5 @@
- # custom rules for quiet builds
-
- -if USE_SHAVE
- -QUIET_GEN = $(Q:@=@echo ' GEN '$@;)
- -QUIET_LN = $(Q:@=@echo ' LN '$@;)
- -QUIET_RM = $(Q:@=@echo ' RM '$@;)
- -else
- QUIET_GEN = $(AM_V_GEN)
-
- QUIET_LN = $(QUIET_LN_$(V))
- @@ -14,4 +9,3 @@
- QUIET_RM = $(QUIET_RM_$(V))
- QUIET_RM_ = $(QUIET_RM_$(AM_DEFAULT_VERBOSITY))
- QUIET_RM_0 = @echo ' RM '$@;
- -endif # USE_SHAVE
- --- a/build/autotools/shave.in 2009-09-21 14:31:14.000000000 +0200
- +++ b/build/autotools/shave.in 1970-01-01 01:00:00.000000000 +0100
- @@ -1,79 +0,0 @@
- -#!/bin/sh
- -
- -# we need sed
- -SED=@SED@
- -if test -z "$SED" ; then
- -SED=sed
- -fi
- -
- -lt_unmangle ()
- -{
- - last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
- -}
- -
- -# the tool to wrap (cc, cxx, ar, ranlib, ..)
- -tool="$1"
- -shift
- -
- -# the reel tool (to call)
- -REEL_TOOL="$1"
- -shift
- -
- -pass_through=0
- -preserved_args=
- -while test "$#" -gt 0; do
- - opt="$1"
- - shift
- -
- - case $opt in
- - --shave-mode=*)
- - mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
- - ;;
- - -o)
- - lt_output="$1"
- - preserved_args="$preserved_args $opt"
- - ;;
- - *)
- - preserved_args="$preserved_args $opt"
- - ;;
- - esac
- -done
- -
- -# mode=link is handled in the libtool wrapper
- -case "$mode,$tool" in
- -link,*)
- - pass_through=1
- - ;;
- -*,cxx)
- - Q=" CXX "
- - ;;
- -*,cc)
- - Q=" CC "
- - ;;
- -*,fc)
- - Q=" FC "
- - ;;
- -*,f77)
- - Q=" F77 "
- - ;;
- -*,objc)
- - Q=" OBJC "
- - ;;
- -*,*)
- - # should not happen
- - Q=" CC "
- - ;;
- -esac
- -
- -lt_unmangle "$lt_output"
- -output=$last_result
- -
- -if test -z $V; then
- - if test $pass_through -eq 0; then
- - echo "$Q$output"
- - fi
- - $REEL_TOOL $preserved_args
- -else
- - echo $REEL_TOOL $preserved_args
- - $REEL_TOOL $preserved_args
- -fi
- --- a/build/autotools/shave-libtool.in 2009-09-21 14:31:14.000000000 +0200
- +++ b/build/autotools/shave-libtool.in 1970-01-01 01:00:00.000000000 +0100
- @@ -1,69 +0,0 @@
- -#!/bin/sh
- -
- -# we need sed
- -SED=@SED@
- -if test -z "$SED" ; then
- -SED=sed
- -fi
- -
- -lt_unmangle ()
- -{
- - last_result=`echo $1 | $SED -e 's#.libs/##' -e 's#[0-9a-zA-Z_\-\.]*_la-##'`
- -}
- -
- -# the real libtool to use
- -LIBTOOL="$1"
- -shift
- -
- -# if 1, don't print anything, the underlaying wrapper will do it
- -pass_though=0
- -
- -# scan the arguments, keep the right ones for libtool, and discover the mode
- -preserved_args=
- -while test "$#" -gt 0; do
- - opt="$1"
- - shift
- -
- - case $opt in
- - --mode=*)
- - mode=`echo $opt | $SED -e 's/[-_a-zA-Z0-9]*=//'`
- - preserved_args="$preserved_args $opt"
- - ;;
- - -o)
- - lt_output="$1"
- - preserved_args="$preserved_args $opt"
- - ;;
- - *)
- - preserved_args="$preserved_args $opt"
- - ;;
- - esac
- -done
- -
- -case "$mode" in
- -compile)
- - # shave will be called and print the actual CC/CXX/LINK line
- - preserved_args="$preserved_args --shave-mode=$mode"
- - pass_though=1
- - ;;
- -link)
- - preserved_args="$preserved_args --shave-mode=$mode"
- - Q=" LINK "
- - ;;
- -*)
- - # let's u
- - # echo "*** libtool: Unimplemented mode: $mode, fill a bug report"
- - ;;
- -esac
- -
- -lt_unmangle "$lt_output"
- -output=$last_result
- -
- -if test -z $V; then
- - if test $pass_though -eq 0; then
- - echo "$Q$output"
- - fi
- - $LIBTOOL --silent $preserved_args
- -else
- - echo $LIBTOOL $preserved_args
- - $LIBTOOL $preserved_args
- -fi
- --- a/build/autotools/shave.m4 2009-09-21 14:31:14.000000000 +0200
- +++ b/build/autotools/shave.m4 1970-01-01 01:00:00.000000000 +0100
- @@ -1,77 +0,0 @@
- -dnl Make automake/libtool output more friendly to humans
- -dnl Damien Lespiau <damien.lespiau@gmail.com>
- -dnl
- -dnl SHAVE_INIT([shavedir],[default_mode])
- -dnl
- -dnl shavedir: the directory where the shave scripts are, it defaults to
- -dnl $(top_builddir)
- -dnl default_mode: (enable|disable) default shave mode. This parameter
- -dnl controls shave's behaviour when no option has been
- -dnl given to configure. It defaults to disable.
- -dnl
- -dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just
- -dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrites CC and
- -dnl LIBTOOL, you don't want the configure tests to have these variables
- -dnl re-defined.
- -dnl * This macro requires GNU make's -s option.
- -
- -AC_DEFUN([_SHAVE_ARG_ENABLE],
- -[
- - AC_ARG_ENABLE([shave],
- - AS_HELP_STRING(
- - [--enable-shave],
- - [use shave to make the build pretty [[default=$1]]]),,
- - [enable_shave=$1]
- - )
- -])
- -
- -AC_DEFUN([SHAVE_INIT],
- -[
- - dnl you can tweak the default value of enable_shave
- - m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
- -
- - if test x"$enable_shave" = xyes; then
- - dnl where can we find the shave scripts?
- - m4_if([$1],,
- - [shavedir="$ac_pwd"],
- - [shavedir="$ac_pwd/$1"])
- - AC_SUBST(shavedir)
- -
- - dnl make is now quiet
- - AC_SUBST([MAKEFLAGS], [-s])
- - AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`'])
- -
- - dnl we need sed
- - AC_CHECK_PROG(SED,sed,sed,false)
- -
- - dnl substitute libtool
- - SHAVE_SAVED_LIBTOOL=$LIBTOOL
- - LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
- - AC_SUBST(LIBTOOL)
- -
- - dnl substitute cc/cxx
- - SHAVE_SAVED_CC=$CC
- - SHAVE_SAVED_CXX=$CXX
- - SHAVE_SAVED_FC=$FC
- - SHAVE_SAVED_F77=$F77
- - SHAVE_SAVED_OBJC=$OBJC
- - CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
- - CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
- - FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
- - F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
- - OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
- - AC_SUBST(CC)
- - AC_SUBST(CXX)
- - AC_SUBST(FC)
- - AC_SUBST(F77)
- - AC_SUBST(OBJC)
- -
- - V=@
- - else
- - V=1
- - fi
- - Q='$(V:1=)'
- - AC_SUBST(V)
- - AC_SUBST(Q)
- -])
- -
- --- a/configure.ac 2009-11-12 14:57:39.000000000 +0100
- +++ b/configure.ac 2013-03-16 23:48:53.856423651 +0100
- @@ -14,7 +14,7 @@
- # This is the X.Y used in the protocol negotiation
- m4_define([unique_protocol_version], [1.0])
-
- -AC_PREREQ([2.59])
- +AC_PREREQ([2.63])
-
- AC_INIT([unique], [unique_version],
- [http://bugzilla.gnome.org/enter_bug.cgi?product=libunique],
- @@ -23,8 +23,20 @@
- AC_CONFIG_SRCDIR([unique/unique.h])
- AC_CONFIG_MACRO_DIR([build/autotools])
-
- -AM_INIT_AUTOMAKE([1.10])
- -AM_CONFIG_HEADER([config.h])
- +AM_INIT_AUTOMAKE([1.11 no-define -Wno-portability dist-bzip2])
- +AC_CONFIG_HEADERS([config.h])
- +
- +AM_SILENT_RULES([yes])
- +
- +AC_PROG_CC_C_O
- +
- +AM_PATH_GLIB_2_0
- +
- +LT_PREREQ([2.2])
- +LT_INIT([disable-static])
- +
- +# Honor aclocal flags
- +ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
-
- # version symbols
- UNIQUE_MAJOR_VERSION=unique_major_version
- @@ -49,21 +61,6 @@
- AC_SUBST(UNIQUE_LT_VERSION_INFO)
- AC_SUBST(UNIQUE_LT_CURRENT_MINUS_AGE)
-
- -AC_ISC_POSIX
- -AC_PROG_CC
- -AC_PROG_INSTALL
- -AC_PROG_MAKE_SET
- -AC_C_CONST
- -AC_PROG_LIBTOOL
- -AC_PATH_PROG(GLIB_MKENUMS, [glib-mkenums])
- -AC_PATH_PROG(GLIB_GENMARSHAL, [glib-genmarshal])
- -
- -AM_SANITY_CHECK
- -AM_PROG_CC_STDC
- -
- -# Honor aclocal flags
- -ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
- -
- m4_define([glib_required], [2.12.0])
- m4_define([gtk_required], [2.11.0])
- m4_define([dbus_required], [0.70])
- @@ -119,10 +116,22 @@
-
- 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
- -dnl D-Bus backend dependencies
- m4_define([have_bacon_default], [yes])
- AC_ARG_ENABLE([bacon],
- [AC_HELP_STRING([--enable-bacon=@<:@yes/no@:>@],
- @@ -150,7 +159,13 @@
-
- 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])
- @@ -178,9 +193,9 @@
- AS_IF([test "x$enable_maintainer_flags" = "xyes" && test "x$GCC" = "xyes"],
- [
- AS_COMPILER_FLAGS([MAINTAINER_CFLAGS],
- - ["-Werror -Wall -Wshadow -Wcast-align
- - -Wno-uninitialized -Wempty-body -Wformat-security
- - -Winit-self"])
- + ["-Wall -Wshadow -Wcast-align
- + -Wno-uninitialized -Wempty-body
- + -Wformat-security -Winit-self"])
- ]
- )
-
- @@ -230,27 +245,10 @@
- AM_GLIB_DEFINE_LOCALEDIR(UNIQUE_LOCALEDIR)
-
- # introspection
- -GOBJECT_INTROSPECTION_CHECK([0.6.3])
- +GOBJECT_INTROSPECTION_CHECK([0.6.7])
-
- # gtk-doc
- -GTK_DOC_CHECK([1.11])
- -
- -# nice builds
- -m4_ifdef([AM_SILENT_RULES],
- - [
- - AM_SILENT_RULES([yes])
- - use_shave=no
- - ],
- - [
- - SHAVE_INIT([build/autotools], [enable])
- - AC_CONFIG_FILES([
- - build/autotools/shave-libtool
- - build/autotools/shave
- - ])
- - use_shave=yes
- - ])
- -
- -AM_CONDITIONAL([USE_SHAVE], [test "x$use_shave" = "xyes"])
- +GTK_DOC_CHECK([1.13])
-
- AC_CONFIG_FILES([
- Makefile
- @@ -264,6 +262,7 @@
- unique/uniqueversion.h
- unique/bacon/Makefile
- unique/dbus/Makefile
- + unique/gdbus/Makefile
- tests/Makefile
- po/Makefile.in
- ])
- @@ -282,6 +281,7 @@
- Backends:
- Unix Domain Socket: $have_bacon
- D-BUS: $have_dbus
- + GDBus: $have_gdbus
-
- Default backend: $UNIQUE_DEFAULT_BACKEND
- "
- --- a/doc/reference/Makefile.am 2009-09-21 14:31:14.000000000 +0200
- +++ b/doc/reference/Makefile.am 2013-03-16 23:48:20.572522852 +0100
- @@ -50,7 +50,8 @@
- uniquemarshal.h \
- stamp-uniquemarshal.h \
- bacon \
- - dbus
- + dbus \
- + gdbus
-
- EXTRA_HFILES =
-
- --- a/unique/dbus/uniquebackend-dbus.c 2009-11-01 20:15:26.000000000 +0100
- +++ b/unique/dbus/uniquebackend-dbus.c 2013-03-16 23:48:03.088891381 +0100
- @@ -84,7 +84,6 @@
- static gboolean
- unique_backend_dbus_request_name (UniqueBackend *backend)
- {
- - UniqueBackendDBus *backend_dbus;
- const gchar *name;
- DBusGConnection *connection;
- DBusGProxy *proxy;
- @@ -97,8 +96,6 @@
- if (!connection)
- return FALSE;
-
- - backend_dbus = UNIQUE_BACKEND_DBUS (backend);
- -
- retval = TRUE;
- name = unique_backend_get_name (backend);
- g_assert (name != NULL);
- @@ -207,10 +204,14 @@
- cmd, data, time_,
- &resp,
- &error);
- - if (error)
- + if (!res)
- {
- - g_warning ("Error while sending message: %s", error->message);
- - g_error_free (error);
- + if (error)
- + {
- + g_warning ("Error while sending message: %s", error->message);
- + g_error_free (error);
- + }
- +
- g_free (cmd);
-
- return UNIQUE_RESPONSE_INVALID;
- --- a/unique/gdbus/.gitignore 1970-01-01 01:00:00.000000000 +0100
- +++ b/unique/gdbus/.gitignore 2013-03-16 23:48:20.572522852 +0100
- @@ -0,0 +1,2 @@
- +libunique_gdbus_la-uniquebackend-gdbus.lo
- +libunique-gdbus.la
- --- a/unique/gdbus/Makefile.am 1970-01-01 01:00:00.000000000 +0100
- +++ b/unique/gdbus/Makefile.am 2013-03-16 23:48:20.572522852 +0100
- @@ -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)
- --- a/unique/gdbus/uniquebackend-gdbus.c 1970-01-01 01:00:00.000000000 +0100
- +++ b/unique/gdbus/uniquebackend-gdbus.c 2013-03-16 23:48:20.575856242 +0100
- @@ -0,0 +1,303 @@
- +/* Unique - Single Instance application library
- + * uniquebackend-gdbus.c: GDBus implementation of UniqueBackend
- + *
- + * Copyright (C) 2007 Emmanuele Bassi <ebassi@o-hand.com>
- + * 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)
- +{
- +}
- --- a/unique/gdbus/uniquebackend-gdbus.h 1970-01-01 01:00:00.000000000 +0100
- +++ b/unique/gdbus/uniquebackend-gdbus.h 2013-03-16 23:48:20.575856242 +0100
- @@ -0,0 +1,43 @@
- +/* Unique - Single Instance application library
- + * uniquebackend-gdbus.c: GDBus implementation of UniqueBackend
- + *
- + * Copyright (C) 2007 Emmanuele Bassi <ebassi@o-hand.com>
- + *
- + * 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__ */
- --- a/unique/Makefile.am 2009-11-12 14:53:10.000000000 +0100
- +++ b/unique/Makefile.am 2013-03-16 23:48:20.572522852 +0100
- @@ -12,7 +12,11 @@
- 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 @@
- 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) \
- --- a/unique/uniqueapp.c 2009-11-01 19:33:13.000000000 +0100
- +++ b/unique/uniqueapp.c 2013-03-16 23:49:05.236617643 +0100
- @@ -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;
- --- a/unique/uniquebackend.c 2009-11-09 12:02:06.000000000 +0100
- +++ b/unique/uniquebackend.c 2013-03-16 23:49:05.236617643 +0100
- @@ -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);
- @@ -298,6 +298,9 @@
- #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 @@
- 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
- --- a/unique/uniquebackend.h 2009-09-21 14:31:14.000000000 +0200
- +++ b/unique/uniquebackend.h 2013-03-16 23:49:05.236617643 +0100
- @@ -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);
- --- a/unique/uniqueinternals.h 2009-09-21 14:31:14.000000000 +0200
- +++ b/unique/uniqueinternals.h 2013-03-16 23:49:05.236617643 +0100
- @@ -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
- --- a/unique/uniquemessage.c 2009-11-09 12:02:06.000000000 +0100
- +++ b/unique/uniquemessage.c 2013-03-16 23:49:05.236617643 +0100
- @@ -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);
- --- a/unique/uniquemessage.h 2009-09-21 14:31:14.000000000 +0200
- +++ b/unique/uniquemessage.h 2013-03-16 23:49:05.236617643 +0100
- @@ -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
|