mirror of https://github.com/GNOME/gimp.git
Bug 622934 - Migrate from dbus-glib to glib's GDBus
Drop the glib-dbus dependency and port stuff to GDBus. Use it unconditionally if not on Windows or OSX. It seels to work just like before but I have no idea if everything is really correct.
This commit is contained in:
parent
564e6010fd
commit
c4460e846b
20
INSTALL
20
INSTALL
|
@ -57,10 +57,7 @@ header files installed.
|
||||||
and fontconfig 2.2.0 or newer. Older versions are known to have
|
and fontconfig 2.2.0 or newer. Older versions are known to have
|
||||||
bugs that seriously affect the stability of GIMP.
|
bugs that seriously affect the stability of GIMP.
|
||||||
|
|
||||||
7. We use dbus-glib if available. Grab it from
|
7. Access of remote files is implemented in the URI plug-in. There
|
||||||
http://dbus.freedesktop.org/releases/dbus-glib/
|
|
||||||
|
|
||||||
8. Access of remote files is implemented in the URI plug-in. There
|
|
||||||
are several possible implementations for this. The implementation
|
are several possible implementations for this. The implementation
|
||||||
used is determined when you configure GIMP. By default the
|
used is determined when you configure GIMP. By default the
|
||||||
GIO/GVfs backend is used. If you don't have GVfs support on your
|
GIO/GVfs backend is used. If you don't have GVfs support on your
|
||||||
|
@ -68,27 +65,27 @@ header files installed.
|
||||||
configure. The configure script will then try to detect another
|
configure. The configure script will then try to detect another
|
||||||
method for accessing remote files.
|
method for accessing remote files.
|
||||||
|
|
||||||
9. The file-compressor plug-in requires zlib, libbzip2, and liblzma to
|
8. The file-compressor plug-in requires zlib, libbzip2, and liblzma to
|
||||||
be installed. All these libraries are required dependencies.
|
be installed. All these libraries are required dependencies.
|
||||||
|
|
||||||
10. You may want to install other third party libraries or programs
|
9. You may want to install other third party libraries or programs
|
||||||
that are needed for some of the available plug-ins. We recommend to
|
that are needed for some of the available plug-ins. We recommend to
|
||||||
check that the following libraries are installed: lcms, libpng,
|
check that the following libraries are installed: lcms, libpng,
|
||||||
libjpeg, libpoppler, libtiff, webkit, libmng, librsvg, libwmf,
|
libjpeg, libpoppler, libtiff, webkit, libmng, librsvg, libwmf,
|
||||||
libgs (Ghostscript), libaa and libjasper.
|
libgs (Ghostscript), libaa and libjasper.
|
||||||
|
|
||||||
11. The Python extension requires Python development headers to be
|
10. The Python extension requires Python development headers to be
|
||||||
present. You will also need PyGTK and the respective development
|
present. You will also need PyGTK and the respective development
|
||||||
headers.
|
headers.
|
||||||
|
|
||||||
12. Configure GIMP by running the `configure' script. You may want
|
11. Configure GIMP by running the `configure' script. You may want
|
||||||
to pass some options to it, see below.
|
to pass some options to it, see below.
|
||||||
|
|
||||||
13. Build GIMP by running `make'. The use of GNU make is recommended.
|
12. Build GIMP by running `make'. The use of GNU make is recommended.
|
||||||
If you need to tweak the build to make it work with other flavours
|
If you need to tweak the build to make it work with other flavours
|
||||||
of make, we'd appreciate if you'd send us a patch with the changes.
|
of make, we'd appreciate if you'd send us a patch with the changes.
|
||||||
|
|
||||||
14. Install GIMP by running `make install'. In order to avoid clashes
|
13. Install GIMP by running `make install'. In order to avoid clashes
|
||||||
with other versions of GIMP, we install a binary called gimp-2.8.
|
with other versions of GIMP, we install a binary called gimp-2.8.
|
||||||
By default there's also a link created so that you can type 'gimp'
|
By default there's also a link created so that you can type 'gimp'
|
||||||
to start gimp-2.8.
|
to start gimp-2.8.
|
||||||
|
@ -204,9 +201,6 @@ These are:
|
||||||
--without-alsa. If you don't want to compile ALSA support into the
|
--without-alsa. If you don't want to compile ALSA support into the
|
||||||
MIDI input controller module, you can use the --without-alsa option.
|
MIDI input controller module, you can use the --without-alsa option.
|
||||||
|
|
||||||
--without-dbus. If you want to build without D-Bus support, you can
|
|
||||||
pass --without-dbus to the configure script.
|
|
||||||
|
|
||||||
--without-linux-input. If you don't want to compile the Linux Input
|
--without-linux-input. If you don't want to compile the Linux Input
|
||||||
controller module, you can use the --without-linux-input option.
|
controller module, you can use the --without-linux-input option.
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
/.deps
|
/.deps
|
||||||
/.libs
|
/.libs
|
||||||
/*.lo
|
/*.lo
|
||||||
/gimpdbusservice-glue.h
|
/gimpdbusservice-generated.c
|
||||||
|
/gimpdbusservice-generated.h
|
||||||
/libappgui.a
|
/libappgui.a
|
||||||
/libappgui.la
|
/libappgui.la
|
||||||
|
|
|
@ -9,6 +9,7 @@ INCLUDES = \
|
||||||
-I$(top_srcdir) \
|
-I$(top_srcdir) \
|
||||||
-I$(top_builddir)/app \
|
-I$(top_builddir)/app \
|
||||||
-I$(top_srcdir)/app \
|
-I$(top_srcdir)/app \
|
||||||
|
$(GIO_UNIX_CFLAGS) \
|
||||||
$(GEGL_CFLAGS) \
|
$(GEGL_CFLAGS) \
|
||||||
$(GTK_CFLAGS) \
|
$(GTK_CFLAGS) \
|
||||||
$(DBUS_GLIB_CFLAGS) \
|
$(DBUS_GLIB_CFLAGS) \
|
||||||
|
@ -41,7 +42,9 @@ libappgui_a_sources = \
|
||||||
ige-mac-menu.c \
|
ige-mac-menu.c \
|
||||||
ige-mac-menu.h
|
ige-mac-menu.h
|
||||||
|
|
||||||
libappgui_a_built_sources = gimpdbusservice-glue.h
|
libappgui_a_built_sources = \
|
||||||
|
gimpdbusservice-generated.c \
|
||||||
|
gimpdbusservice-generated.h
|
||||||
|
|
||||||
libappgui_a_SOURCES = $(libappgui_a_built_sources) $(libappgui_a_sources)
|
libappgui_a_SOURCES = $(libappgui_a_built_sources) $(libappgui_a_sources)
|
||||||
|
|
||||||
|
@ -52,10 +55,13 @@ EXTRA_DIST = \
|
||||||
# rules to generate built sources
|
# rules to generate built sources
|
||||||
#
|
#
|
||||||
# setup autogeneration dependencies
|
# setup autogeneration dependencies
|
||||||
gen_sources = gimpdbusservice-glue.h
|
gen_sources = $(libappgui_a_built_sources)
|
||||||
CLEANFILES = $(gen_sources)
|
CLEANFILES = $(gen_sources)
|
||||||
|
|
||||||
$(srcdir)/gimpdbusservice.c: gimpdbusservice-glue.h
|
$(srcdir)/gimpdbusservice.c: $(libappgui_a_built_sources)
|
||||||
|
|
||||||
gimpdbusservice-glue.h: $(srcdir)/dbus-service.xml
|
$(libappgui_a_built_sources): $(srcdir)/dbus-service.xml
|
||||||
$(DBUS_BINDING_TOOL) --mode=glib-server --prefix=gimp $< > $(@F)
|
$(GDBUS_CODEGEN) --interface-prefix org.gimp.GIMP. \
|
||||||
|
--generate-c-code gimpdbusservice-generated \
|
||||||
|
--c-namespace GimpDBusService \
|
||||||
|
$(srcdir)/dbus-service.xml
|
||||||
|
|
|
@ -1,12 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
<node name="/org/gimp/GIMP/UI">
|
<node>
|
||||||
|
|
||||||
<interface name="org.gimp.GIMP.UI">
|
<interface name="org.gimp.GIMP.UI">
|
||||||
|
|
||||||
<annotation name="org.freedesktop.DBus.GLib.CSymbol"
|
|
||||||
value="gimp_dbus_service" />
|
|
||||||
|
|
||||||
<method name="Open">
|
<method name="Open">
|
||||||
<arg type="s" name="uri" direction="in" />
|
<arg type="s" name="uri" direction="in" />
|
||||||
<arg type="b" name="success" direction="out" />
|
<arg type="b" name="success" direction="out" />
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
*
|
*
|
||||||
* GimpDBusService
|
* GimpDBusService
|
||||||
* Copyright (C) 2007, 2008 Sven Neumann <sven@gimp.org>
|
* Copyright (C) 2007, 2008 Sven Neumann <sven@gimp.org>
|
||||||
|
* Copyright (C) 2013 Michael Natterer <mitch@gimp.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,11 +21,8 @@
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#if HAVE_DBUS_GLIB
|
|
||||||
|
|
||||||
#include <gegl.h>
|
#include <gegl.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <dbus/dbus-glib.h>
|
|
||||||
|
|
||||||
#include "gui-types.h"
|
#include "gui-types.h"
|
||||||
|
|
||||||
|
@ -37,15 +35,8 @@
|
||||||
#include "display/gimpdisplayshell.h"
|
#include "display/gimpdisplayshell.h"
|
||||||
|
|
||||||
#include "gimpdbusservice.h"
|
#include "gimpdbusservice.h"
|
||||||
#include "gimpdbusservice-glue.h"
|
|
||||||
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
OPENED,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
gchar *uri;
|
gchar *uri;
|
||||||
|
@ -53,53 +44,51 @@ typedef struct
|
||||||
} OpenData;
|
} OpenData;
|
||||||
|
|
||||||
|
|
||||||
static void gimp_dbus_service_class_init (GimpDBusServiceClass *klass);
|
static void gimp_dbus_service_ui_iface_init (GimpDBusServiceUIIface *iface);
|
||||||
|
|
||||||
static void gimp_dbus_service_init (GimpDBusService *service);
|
static void gimp_dbus_service_dispose (GObject *object);
|
||||||
static void gimp_dbus_service_dispose (GObject *object);
|
static void gimp_dbus_service_finalize (GObject *object);
|
||||||
static void gimp_dbus_service_finalize (GObject *object);
|
|
||||||
|
|
||||||
static void gimp_dbus_service_gimp_opened (Gimp *gimp,
|
static gboolean gimp_dbus_service_activate (GimpDBusServiceUI *service,
|
||||||
const gchar *uri,
|
GDBusMethodInvocation *invocation);
|
||||||
GimpDBusService *service);
|
static gboolean gimp_dbus_service_open (GimpDBusServiceUI *service,
|
||||||
|
GDBusMethodInvocation *invocation,
|
||||||
|
const gchar *uri);
|
||||||
|
|
||||||
static gboolean gimp_dbus_service_queue_open (GimpDBusService *service,
|
static gboolean gimp_dbus_service_open_as_new (GimpDBusServiceUI *service,
|
||||||
const gchar *uri,
|
GDBusMethodInvocation *invocation,
|
||||||
gboolean as_new);
|
const gchar *uri);
|
||||||
|
|
||||||
static gboolean gimp_dbus_service_open_idle (GimpDBusService *service);
|
static void gimp_dbus_service_gimp_opened (Gimp *gimp,
|
||||||
static OpenData * gimp_dbus_service_open_data_new (GimpDBusService *service,
|
const gchar *uri,
|
||||||
const gchar *uri,
|
GimpDBusService *service);
|
||||||
gboolean as_new);
|
|
||||||
static void gimp_dbus_service_open_data_free (OpenData *data);
|
static gboolean gimp_dbus_service_queue_open (GimpDBusService *service,
|
||||||
|
const gchar *uri,
|
||||||
|
gboolean as_new);
|
||||||
|
|
||||||
|
static gboolean gimp_dbus_service_open_idle (GimpDBusService *service);
|
||||||
|
static OpenData * gimp_dbus_service_open_data_new (GimpDBusService *service,
|
||||||
|
const gchar *uri,
|
||||||
|
gboolean as_new);
|
||||||
|
static void gimp_dbus_service_open_data_free (OpenData *data);
|
||||||
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (GimpDBusService, gimp_dbus_service, G_TYPE_OBJECT)
|
G_DEFINE_TYPE_WITH_CODE (GimpDBusService, gimp_dbus_service,
|
||||||
|
GIMP_DBUS_SERVICE_TYPE_UI_SKELETON,
|
||||||
|
G_IMPLEMENT_INTERFACE (GIMP_DBUS_SERVICE_TYPE_UI,
|
||||||
|
gimp_dbus_service_ui_iface_init))
|
||||||
|
|
||||||
#define parent_class gimp_dbus_service_parent_class
|
#define parent_class gimp_dbus_service_parent_class
|
||||||
|
|
||||||
static guint gimp_dbus_service_signals[LAST_SIGNAL] = { 0 };
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_dbus_service_class_init (GimpDBusServiceClass *klass)
|
gimp_dbus_service_class_init (GimpDBusServiceClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
gimp_dbus_service_signals[OPENED] =
|
|
||||||
g_signal_new ("opened",
|
|
||||||
G_TYPE_FROM_CLASS (klass),
|
|
||||||
G_SIGNAL_RUN_FIRST,
|
|
||||||
G_STRUCT_OFFSET (GimpDBusServiceClass, opened),
|
|
||||||
NULL, NULL,
|
|
||||||
g_cclosure_marshal_VOID__STRING,
|
|
||||||
G_TYPE_NONE, 1, G_TYPE_STRING);
|
|
||||||
|
|
||||||
object_class->dispose = gimp_dbus_service_dispose;
|
object_class->dispose = gimp_dbus_service_dispose;
|
||||||
object_class->finalize = gimp_dbus_service_finalize;
|
object_class->finalize = gimp_dbus_service_finalize;
|
||||||
|
|
||||||
dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass),
|
|
||||||
&dbus_glib_gimp_object_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -108,6 +97,14 @@ gimp_dbus_service_init (GimpDBusService *service)
|
||||||
service->queue = g_queue_new ();
|
service->queue = g_queue_new ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_dbus_service_ui_iface_init (GimpDBusServiceUIIface *iface)
|
||||||
|
{
|
||||||
|
iface->handle_activate = gimp_dbus_service_activate;
|
||||||
|
iface->handle_open = gimp_dbus_service_open;
|
||||||
|
iface->handle_open_as_new = gimp_dbus_service_open_as_new;
|
||||||
|
}
|
||||||
|
|
||||||
GObject *
|
GObject *
|
||||||
gimp_dbus_service_new (Gimp *gimp)
|
gimp_dbus_service_new (Gimp *gimp)
|
||||||
{
|
{
|
||||||
|
@ -160,53 +157,55 @@ gimp_dbus_service_finalize (GObject *object)
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
gimp_dbus_service_open (GimpDBusService *service,
|
gimp_dbus_service_activate (GimpDBusServiceUI *service,
|
||||||
const gchar *uri,
|
GDBusMethodInvocation *invocation)
|
||||||
gboolean *success,
|
|
||||||
GError **dbus_error)
|
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (GIMP_IS_DBUS_SERVICE (service), FALSE);
|
Gimp *gimp = GIMP_DBUS_SERVICE (service)->gimp;
|
||||||
g_return_val_if_fail (uri != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (success != NULL, FALSE);
|
|
||||||
|
|
||||||
*success = gimp_dbus_service_queue_open (service, uri, FALSE);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
gimp_dbus_service_open_as_new (GimpDBusService *service,
|
|
||||||
const gchar *uri,
|
|
||||||
gboolean *success,
|
|
||||||
GError **dbus_error)
|
|
||||||
{
|
|
||||||
g_return_val_if_fail (GIMP_IS_DBUS_SERVICE (service), FALSE);
|
|
||||||
g_return_val_if_fail (uri != NULL, FALSE);
|
|
||||||
g_return_val_if_fail (success != NULL, FALSE);
|
|
||||||
|
|
||||||
*success = gimp_dbus_service_queue_open (service, uri, TRUE);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean
|
|
||||||
gimp_dbus_service_activate (GimpDBusService *service,
|
|
||||||
GError **dbus_error)
|
|
||||||
{
|
|
||||||
GimpObject *display;
|
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_DBUS_SERVICE (service), FALSE);
|
|
||||||
|
|
||||||
/* We want to be called again later in case that GIMP is not fully
|
/* We want to be called again later in case that GIMP is not fully
|
||||||
* started yet.
|
* started yet.
|
||||||
*/
|
*/
|
||||||
if (! gimp_is_restored (service->gimp))
|
if (gimp_is_restored (gimp))
|
||||||
return TRUE;
|
{
|
||||||
|
GimpObject *display;
|
||||||
|
|
||||||
display = gimp_container_get_first_child (service->gimp->displays);
|
display = gimp_container_get_first_child (gimp->displays);
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
gimp_display_shell_present (gimp_display_get_shell (GIMP_DISPLAY (display)));
|
gimp_display_shell_present (gimp_display_get_shell (GIMP_DISPLAY (display)));
|
||||||
|
}
|
||||||
|
|
||||||
|
gimp_dbus_service_ui_complete_activate (service, invocation);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
gimp_dbus_service_open (GimpDBusServiceUI *service,
|
||||||
|
GDBusMethodInvocation *invocation,
|
||||||
|
const gchar *uri)
|
||||||
|
{
|
||||||
|
gboolean success;
|
||||||
|
|
||||||
|
success = gimp_dbus_service_queue_open (GIMP_DBUS_SERVICE (service),
|
||||||
|
uri, FALSE);
|
||||||
|
|
||||||
|
gimp_dbus_service_ui_complete_open (service, invocation, success);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
gimp_dbus_service_open_as_new (GimpDBusServiceUI *service,
|
||||||
|
GDBusMethodInvocation *invocation,
|
||||||
|
const gchar *uri)
|
||||||
|
{
|
||||||
|
gboolean success;
|
||||||
|
|
||||||
|
success = gimp_dbus_service_queue_open (GIMP_DBUS_SERVICE (service),
|
||||||
|
uri, TRUE);
|
||||||
|
|
||||||
|
gimp_dbus_service_ui_complete_open_as_new (service, invocation, success);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -216,7 +215,7 @@ gimp_dbus_service_gimp_opened (Gimp *gimp,
|
||||||
const gchar *uri,
|
const gchar *uri,
|
||||||
GimpDBusService *service)
|
GimpDBusService *service)
|
||||||
{
|
{
|
||||||
g_signal_emit (service, gimp_dbus_service_signals[OPENED], 0, uri);
|
g_signal_emit_by_name (service, "opened", uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -297,6 +296,3 @@ gimp_dbus_service_open_data_free (OpenData *data)
|
||||||
g_free (data->uri);
|
g_free (data->uri);
|
||||||
g_slice_free (OpenData, data);
|
g_slice_free (OpenData, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_DBUS_GLIB */
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
*
|
*
|
||||||
* GimpDBusService
|
* GimpDBusService
|
||||||
* Copyright (C) 2007, 2008 Sven Neumann <sven@gimp.org>
|
* Copyright (C) 2007, 2008 Sven Neumann <sven@gimp.org>
|
||||||
|
* Copyright (C) 2013 Michael Natterer <mitch@gimp.org>
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,12 +22,16 @@
|
||||||
#ifndef __GIMP_DBUS_SERVICE_H__
|
#ifndef __GIMP_DBUS_SERVICE_H__
|
||||||
#define __GIMP_DBUS_SERVICE_H__
|
#define __GIMP_DBUS_SERVICE_H__
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
|
#include "gimpdbusservice-generated.h"
|
||||||
|
|
||||||
#define GIMP_DBUS_SERVICE_NAME "org.gimp.GIMP.UI"
|
/* service name and path should really be org.gimp.GIMP and
|
||||||
#define GIMP_DBUS_SERVICE_PATH "/org/gimp/GIMP/UI"
|
* /org/gimp/GIMP and only the interface be called UI.
|
||||||
#define GIMP_DBUS_SERVICE_INTERFACE "org.gimp.GIMP.UI"
|
*/
|
||||||
|
#define GIMP_DBUS_SERVICE_NAME "org.gimp.GIMP.UI"
|
||||||
|
#define GIMP_DBUS_SERVICE_PATH "/org/gimp/GIMP/UI"
|
||||||
|
#define GIMP_DBUS_INTERFACE_NAME "org.gimp.GIMP.UI"
|
||||||
|
#define GIMP_DBUS_INTERFACE_PATH "/org/gimp/GIMP/UI"
|
||||||
|
|
||||||
|
|
||||||
#define GIMP_TYPE_DBUS_SERVICE (gimp_dbus_service_get_type ())
|
#define GIMP_TYPE_DBUS_SERVICE (gimp_dbus_service_get_type ())
|
||||||
|
@ -42,7 +47,7 @@ typedef struct _GimpDBusServiceClass GimpDBusServiceClass;
|
||||||
|
|
||||||
struct _GimpDBusService
|
struct _GimpDBusService
|
||||||
{
|
{
|
||||||
GObject parent_instance;
|
GimpDBusServiceUISkeleton parent_instance;
|
||||||
|
|
||||||
Gimp *gimp;
|
Gimp *gimp;
|
||||||
GQueue *queue;
|
GQueue *queue;
|
||||||
|
@ -51,30 +56,13 @@ struct _GimpDBusService
|
||||||
|
|
||||||
struct _GimpDBusServiceClass
|
struct _GimpDBusServiceClass
|
||||||
{
|
{
|
||||||
GObjectClass parent_class;
|
GimpDBusServiceUISkeletonClass parent_class;
|
||||||
|
|
||||||
/* signals */
|
|
||||||
void (* opened) (GimpDBusService *service,
|
|
||||||
const gchar *uri);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
GType gimp_dbus_service_get_type (void) G_GNUC_CONST;
|
GType gimp_dbus_service_get_type (void) G_GNUC_CONST;
|
||||||
|
|
||||||
GObject * gimp_dbus_service_new (Gimp *gimp);
|
GObject * gimp_dbus_service_new (Gimp *gimp);
|
||||||
|
|
||||||
gboolean gimp_dbus_service_open (GimpDBusService *service,
|
|
||||||
const gchar *uri,
|
|
||||||
gboolean *success,
|
|
||||||
GError **dbus_error);
|
|
||||||
gboolean gimp_dbus_service_open_as_new (GimpDBusService *service,
|
|
||||||
const gchar *uri,
|
|
||||||
gboolean *success,
|
|
||||||
GError **dbus_error);
|
|
||||||
gboolean gimp_dbus_service_activate (GimpDBusService *service,
|
|
||||||
GError **dbus_error);
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __GIMP_DBUS_SERVICE_H__ */
|
#endif /* __GIMP_DBUS_SERVICE_H__ */
|
||||||
|
|
|
@ -29,12 +29,6 @@
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAVE_DBUS_GLIB
|
|
||||||
#define DBUS_API_SUBJECT_TO_CHANGE
|
|
||||||
#include <dbus/dbus-glib.h>
|
|
||||||
#include <dbus/dbus-glib-lowlevel.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gui/gui-types.h"
|
#include "gui/gui-types.h"
|
||||||
|
|
||||||
#include "core/gimp.h"
|
#include "core/gimp.h"
|
||||||
|
@ -48,27 +42,30 @@
|
||||||
#include "gui-unique.h"
|
#include "gui-unique.h"
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_DBUS_GLIB
|
|
||||||
static void gui_dbus_service_init (Gimp *gimp);
|
|
||||||
static void gui_dbus_service_exit (void);
|
|
||||||
|
|
||||||
static DBusGConnection *dbus_connection = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
|
|
||||||
static void gui_unique_win32_init (Gimp *gimp);
|
static void gui_unique_win32_init (Gimp *gimp);
|
||||||
static void gui_unique_win32_exit (void);
|
static void gui_unique_win32_exit (void);
|
||||||
|
|
||||||
static Gimp *unique_gimp = NULL;
|
static Gimp *unique_gimp = NULL;
|
||||||
static HWND proxy_window = NULL;
|
static HWND proxy_window = NULL;
|
||||||
#endif
|
|
||||||
|
#elifdef GDK_WINDOWING_QUARTZ
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_QUARTZ
|
|
||||||
static void gui_unique_mac_init (Gimp *gimp);
|
static void gui_unique_mac_init (Gimp *gimp);
|
||||||
static void gui_unique_mac_exit (void);
|
static void gui_unique_mac_exit (void);
|
||||||
|
|
||||||
static Gimp *unique_gimp = NULL;
|
static Gimp *unique_gimp = NULL;
|
||||||
AEEventHandlerUPP open_document_callback_proc;
|
AEEventHandlerUPP open_document_callback_proc;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static void gui_dbus_service_init (Gimp *gimp);
|
||||||
|
static void gui_dbus_service_exit (void);
|
||||||
|
|
||||||
|
static GDBusObjectManagerServer *dbus_manager = NULL;
|
||||||
|
static guint dbus_name_id = 0;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,12 +74,10 @@ gui_unique_init (Gimp *gimp)
|
||||||
{
|
{
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
gui_unique_win32_init (gimp);
|
gui_unique_win32_init (gimp);
|
||||||
#elif HAVE_DBUS_GLIB
|
#elifdef GDK_WINDOWING_QUARTZ
|
||||||
gui_dbus_service_init (gimp);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_QUARTZ
|
|
||||||
gui_unique_mac_init (gimp);
|
gui_unique_mac_init (gimp);
|
||||||
|
#else
|
||||||
|
gui_dbus_service_init (gimp);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,58 +86,14 @@ gui_unique_exit (void)
|
||||||
{
|
{
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
gui_unique_win32_exit ();
|
gui_unique_win32_exit ();
|
||||||
#elif HAVE_DBUS_GLIB
|
#elifdef GDK_WINDOWING_QUARTZ
|
||||||
|
gui_unique_mac_exit ();
|
||||||
|
#else
|
||||||
gui_dbus_service_exit ();
|
gui_dbus_service_exit ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_QUARTZ
|
|
||||||
gui_unique_mac_exit ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if HAVE_DBUS_GLIB
|
|
||||||
|
|
||||||
static void
|
|
||||||
gui_dbus_service_init (Gimp *gimp)
|
|
||||||
{
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_GIMP (gimp));
|
|
||||||
g_return_if_fail (dbus_connection == NULL);
|
|
||||||
|
|
||||||
dbus_connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
|
|
||||||
|
|
||||||
if (dbus_connection)
|
|
||||||
{
|
|
||||||
GObject *service = gimp_dbus_service_new (gimp);
|
|
||||||
|
|
||||||
dbus_bus_request_name (dbus_g_connection_get_connection (dbus_connection),
|
|
||||||
GIMP_DBUS_SERVICE_NAME, 0, NULL);
|
|
||||||
|
|
||||||
dbus_g_connection_register_g_object (dbus_connection,
|
|
||||||
GIMP_DBUS_SERVICE_PATH, service);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_printerr ("%s\n", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gui_dbus_service_exit (void)
|
|
||||||
{
|
|
||||||
if (dbus_connection)
|
|
||||||
{
|
|
||||||
dbus_g_connection_unref (dbus_connection);
|
|
||||||
dbus_connection = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* HAVE_DBUS_GLIB */
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
#ifdef G_OS_WIN32
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -275,10 +226,7 @@ gui_unique_win32_exit (void)
|
||||||
DestroyWindow (proxy_window);
|
DestroyWindow (proxy_window);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* G_OS_WIN32 */
|
#elifdef GDK_WINDOWING_QUARTZ
|
||||||
|
|
||||||
|
|
||||||
#ifdef GDK_WINDOWING_QUARTZ
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gui_unique_mac_idle_open (gchar *data)
|
gui_unique_mac_idle_open (gchar *data)
|
||||||
|
@ -379,4 +327,66 @@ gui_unique_mac_exit (void)
|
||||||
DisposeAEEventHandlerUPP(open_document_callback_proc);
|
DisposeAEEventHandlerUPP(open_document_callback_proc);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* GDK_WINDOWING_QUARTZ */
|
#else
|
||||||
|
|
||||||
|
static void
|
||||||
|
gui_dbus_bus_acquired (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
Gimp *gimp)
|
||||||
|
{
|
||||||
|
GDBusObjectSkeleton *object;
|
||||||
|
GObject *service;
|
||||||
|
|
||||||
|
/* this should use GIMP_DBUS_SERVICE_PATH, but that's historically wrong */
|
||||||
|
dbus_manager = g_dbus_object_manager_server_new ("/org/gimp/GIMP");
|
||||||
|
|
||||||
|
object = g_dbus_object_skeleton_new (GIMP_DBUS_INTERFACE_PATH);
|
||||||
|
|
||||||
|
service = gimp_dbus_service_new (gimp);
|
||||||
|
g_dbus_object_skeleton_add_interface (object,
|
||||||
|
G_DBUS_INTERFACE_SKELETON (service));
|
||||||
|
g_object_unref (service);
|
||||||
|
|
||||||
|
g_dbus_object_manager_server_export (dbus_manager, object);
|
||||||
|
g_object_unref (object);
|
||||||
|
|
||||||
|
g_dbus_object_manager_server_set_connection (dbus_manager, connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gui_dbus_name_acquired (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
Gimp *gimp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gui_dbus_name_lost (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
Gimp *gimp)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gui_dbus_service_init (Gimp *gimp)
|
||||||
|
{
|
||||||
|
g_return_if_fail (GIMP_IS_GIMP (gimp));
|
||||||
|
g_return_if_fail (dbus_name_id == 0);
|
||||||
|
|
||||||
|
dbus_name_id = g_bus_own_name (G_BUS_TYPE_SESSION,
|
||||||
|
GIMP_DBUS_SERVICE_NAME,
|
||||||
|
G_BUS_NAME_OWNER_FLAGS_NONE,
|
||||||
|
(GBusAcquiredCallback) gui_dbus_bus_acquired,
|
||||||
|
(GBusNameAcquiredCallback) gui_dbus_name_acquired,
|
||||||
|
(GBusNameLostCallback) gui_dbus_name_lost,
|
||||||
|
gimp, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gui_dbus_service_exit (void)
|
||||||
|
{
|
||||||
|
g_bus_unown_name (dbus_name_id);
|
||||||
|
g_object_unref (dbus_manager);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -118,7 +118,7 @@ gimp_unique_dbus_open (const gchar **filenames,
|
||||||
result = g_dbus_connection_call_sync (connection,
|
result = g_dbus_connection_call_sync (connection,
|
||||||
GIMP_DBUS_SERVICE_NAME,
|
GIMP_DBUS_SERVICE_NAME,
|
||||||
GIMP_DBUS_SERVICE_PATH,
|
GIMP_DBUS_SERVICE_PATH,
|
||||||
GIMP_DBUS_SERVICE_INTERFACE,
|
GIMP_DBUS_INTERFACE_NAME,
|
||||||
method,
|
method,
|
||||||
g_variant_new ("(s)",
|
g_variant_new ("(s)",
|
||||||
uri),
|
uri),
|
||||||
|
@ -149,7 +149,7 @@ gimp_unique_dbus_open (const gchar **filenames,
|
||||||
result = g_dbus_connection_call_sync (connection,
|
result = g_dbus_connection_call_sync (connection,
|
||||||
GIMP_DBUS_SERVICE_NAME,
|
GIMP_DBUS_SERVICE_NAME,
|
||||||
GIMP_DBUS_SERVICE_PATH,
|
GIMP_DBUS_SERVICE_PATH,
|
||||||
GIMP_DBUS_SERVICE_INTERFACE,
|
GIMP_DBUS_INTERFACE_NAME,
|
||||||
"Activate",
|
"Activate",
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
|
|
39
configure.ac
39
configure.ac
|
@ -58,7 +58,6 @@ m4_define([wmf_required_version], [0.2.8])
|
||||||
m4_define([pygtk_required_version], [2.10.4])
|
m4_define([pygtk_required_version], [2.10.4])
|
||||||
m4_define([poppler_required_version], [0.12.4])
|
m4_define([poppler_required_version], [0.12.4])
|
||||||
m4_define([libcurl_required_version], [7.15.1])
|
m4_define([libcurl_required_version], [7.15.1])
|
||||||
m4_define([dbus_glib_required_version], [0.70])
|
|
||||||
m4_define([libgudev_required_version], [167])
|
m4_define([libgudev_required_version], [167])
|
||||||
m4_define([exif_required_version], [0.6.15])
|
m4_define([exif_required_version], [0.6.15])
|
||||||
m4_define([lcms_required_version], [2.2])
|
m4_define([lcms_required_version], [2.2])
|
||||||
|
@ -496,6 +495,15 @@ PKG_CHECK_MODULES(GMODULE_NO_EXPORT, gmodule-no-export-2.0)
|
||||||
|
|
||||||
PKG_CHECK_MODULES(GIO, gio-2.0)
|
PKG_CHECK_MODULES(GIO, gio-2.0)
|
||||||
|
|
||||||
|
if test "$os_win32" != "yes"; then
|
||||||
|
PKG_CHECK_MODULES(GIO_UNIX, gio-unix-2.0)
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_PATH_PROG(GDBUS_CODEGEN, gdbus-codegen, no)
|
||||||
|
if test "x$GDBUS_CODEGEN" = xno; then
|
||||||
|
AC_MSG_ERROR([Could not find gdbus-codegen in your PATH])
|
||||||
|
fi
|
||||||
|
|
||||||
AC_MSG_CHECKING([if GLib is version 2.31.0 or newer])
|
AC_MSG_CHECKING([if GLib is version 2.31.0 or newer])
|
||||||
if $PKG_CONFIG --atleast-version=2.31.0 glib-2.0; then
|
if $PKG_CONFIG --atleast-version=2.31.0 glib-2.0; then
|
||||||
have_glib_2_31=yes
|
have_glib_2_31=yes
|
||||||
|
@ -1694,35 +1702,6 @@ fi
|
||||||
AM_CONDITIONAL(HAVE_DX_DINPUT, test "x$have_dx_dinput" = xyes)
|
AM_CONDITIONAL(HAVE_DX_DINPUT, test "x$have_dx_dinput" = xyes)
|
||||||
|
|
||||||
|
|
||||||
###############################
|
|
||||||
# Check for D-Bus GLib bindings
|
|
||||||
###############################
|
|
||||||
|
|
||||||
AC_ARG_WITH(dbus, [ --without-dbus build without D-Bus support])
|
|
||||||
|
|
||||||
have_dbus_glib="no (disabled)"
|
|
||||||
|
|
||||||
if test "x$with_dbus" != xno; then
|
|
||||||
PKG_CHECK_MODULES(DBUS_GLIB, dbus-glib-1 >= dbus_glib_required_version,
|
|
||||||
have_dbus_glib=yes,
|
|
||||||
have_dbus_glib=no)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$have_dbus_glib" = xyes; then
|
|
||||||
AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool, no)
|
|
||||||
if test "x$DBUS_BINDING_TOOL" = xno; then
|
|
||||||
AC_MSG_WARN([Could not find dbus-binding-tool in your PATH])
|
|
||||||
have_dbus_glib="no (dbus-binding-tool not found)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$have_dbus_glib" = xyes; then
|
|
||||||
AC_DEFINE(HAVE_DBUS_GLIB, 1,
|
|
||||||
[Define to 1 if D-Bus GLib bindings are available])
|
|
||||||
GIMP_COMMAND='gimp-gimp_app_version'
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# Check for libgudev
|
# Check for libgudev
|
||||||
####################
|
####################
|
||||||
|
|
Loading…
Reference in New Issue