This is an automated email from the git hooks/post-receive script. a n d r e 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/mousepad.
commit e9e4e30777a4bb24f9e6045942bdfb8937a1a571 Author: Arkadiy Illarionov <[email protected]> Date: Sat Apr 14 14:25:41 2018 +0300 Port to GDBus (Bug #14337) --- .gitignore | 1 + configure.ac.in | 2 +- mousepad/Makefile.am | 5 +- mousepad/main.c | 10 +-- mousepad/mousepad-dbus-infos.xml | 8 +- mousepad/mousepad-dbus.c | 162 ++++++++++++++++----------------------- mousepad/mousepad-dbus.h | 12 +-- 7 files changed, 77 insertions(+), 123 deletions(-) diff --git a/.gitignore b/.gitignore index e2234c4..411f37b 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ missing mkinstalldirs mousepad/.deps/ mousepad/mousepad +mousepad/mousepad-dbus-infos.c mousepad/mousepad-dbus-infos.h mousepad/mousepad-marshal.c mousepad/mousepad-marshal.h diff --git a/configure.ac.in b/configure.ac.in index 790d7c0..a3d7be7 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -129,7 +129,7 @@ AM_CONDITIONAL([WITH_KEYFILE_SETTINGS], dnl ********************************** dnl *** Optional support for D-BUS *** dnl ********************************** -XDT_CHECK_OPTIONAL_PACKAGE([DBUS], [dbus-glib-1], +XDT_CHECK_OPTIONAL_PACKAGE([DBUS], [dbus-1], [0.34], [dbus], [D-BUS support]) dnl *************************************************** diff --git a/mousepad/Makefile.am b/mousepad/Makefile.am index 24e06aa..7bd0f8c 100644 --- a/mousepad/Makefile.am +++ b/mousepad/Makefile.am @@ -88,6 +88,7 @@ mousepad_LDADD = \ if HAVE_DBUS mousepad_built_sources += \ + mousepad-dbus-infos.c \ mousepad-dbus-infos.h mousepad_dbus_sources = \ @@ -119,8 +120,8 @@ BUILT_SOURCES = \ mousepad-prefs-dialog-ui.h if HAVE_DBUS -mousepad-dbus-infos.h: mousepad-dbus-infos.xml Makefile - $(AM_V_GEN) dbus-binding-tool --prefix=mousepad_dbus_service --mode=glib-server $< > $@ +mousepad-dbus-infos.c mousepad-dbus-infos.h: mousepad-dbus-infos.xml Makefile + $(AM_V_GEN) gdbus-codegen --interface-prefix org.xfce. --generate-c-code mousepad-dbus-infos $< endif mousepad-window-ui.h: mousepad-window-ui.xml Makefile diff --git a/mousepad/main.c b/mousepad/main.c index b8c5c08..2b5b1cc 100644 --- a/mousepad/main.c +++ b/mousepad/main.c @@ -57,9 +57,6 @@ main (gint argc, gchar **argv) MousepadApplication *application; GError *error = NULL; gchar *working_directory; -#ifdef HAVE_DBUS - MousepadDBusService *dbus_service; -#endif /* bind the text domain to the locale directory */ bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); @@ -186,7 +183,7 @@ main (gint argc, gchar **argv) { #ifdef HAVE_DBUS /* register with dbus */ - dbus_service = g_object_new (MOUSEPAD_TYPE_DBUS_SERVICE, NULL); + mousepad_dbus_service_init (); #endif /* enter the main loop */ @@ -194,11 +191,6 @@ main (gint argc, gchar **argv) /* Shutdown xfconf */ xfconf_shutdown(); - -#ifdef HAVE_DBUS - /* release dbus service reference */ - g_object_unref (G_OBJECT (dbus_service)); -#endif } /* release application reference */ diff --git a/mousepad/mousepad-dbus-infos.xml b/mousepad/mousepad-dbus-infos.xml index 3f0fab1..971c797 100644 --- a/mousepad/mousepad-dbus-infos.xml +++ b/mousepad/mousepad-dbus-infos.xml @@ -26,19 +26,19 @@ This inferface is internally used by Mousepad and should not be used externally. --> <interface name="org.xfce.Mousepad"> - <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="mousepad_dbus_service" /> + <annotation name="org.gtk.GDBus.C.Name" value="MousepadDBusService" /> <!-- - LaunchFiles (working-directory : STRING, filenames : ARRAY OF STRING : VOID + LaunchFiles (working_directory : STRING, filenames : ARRAY OF STRING : VOID - working-directory : the directory, relative to which filenames should + working_directory : the directory, relative to which filenames should be interpreted. filenames : an array of file names to launch. The file names may be either file:-URIs, absolute paths or paths relative to the working-directory. --> <method name="LaunchFiles"> - <arg direction="in" name="working-directory" type="s" /> + <arg direction="in" name="working_directory" type="s" /> <arg direction="in" name="filenames" type="as" /> </method> diff --git a/mousepad/mousepad-dbus.c b/mousepad/mousepad-dbus.c index 46ca823..9031d5f 100644 --- a/mousepad/mousepad-dbus.c +++ b/mousepad/mousepad-dbus.c @@ -16,11 +16,12 @@ #include <mousepad/mousepad-private.h> #include <mousepad/mousepad-dbus.h> +/* include the dbus glue generated by gdbus-codegen */ +#include <mousepad/mousepad-dbus-infos.h> #include <mousepad/mousepad-application.h> -#include <dbus/dbus-glib-lowlevel.h> -#include <dbus/dbus-glib.h> #include <dbus/dbus.h> +#include <gio/gio.h> #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> @@ -36,97 +37,52 @@ -static void mousepad_dbus_service_finalize (GObject *object); -static gboolean mousepad_dbus_service_launch_files (MousepadDBusService *dbus_service, - const gchar *working_directory, - gchar **filenames, - GError **error); -static gboolean mousepad_dbus_service_terminate (MousepadDBusService *dbus_service, - GError **error); - - - -/* include the dbus glue generated by dbus-binding-tool */ -#include <mousepad/mousepad-dbus-infos.h> - - - -struct _MousepadDBusServiceClass -{ - GObjectClass __parent__; -}; - -struct _MousepadDBusService -{ - GObject __parent__; - - DBusGConnection *connection; -}; - - - -G_DEFINE_TYPE (MousepadDBusService, mousepad_dbus_service, G_TYPE_OBJECT) +static gboolean mousepad_dbus_service_launch_files (MousepadDBusService *dbus_service, + GDBusMethodInvocation *invocation, + const gchar *working_directory, + gchar **filenames, + gpointer user_data); +static gboolean mousepad_dbus_service_terminate (MousepadDBusService *dbus_service, + GDBusMethodInvocation *invocation, + gpointer user_data); static void -mousepad_dbus_service_class_init (MousepadDBusServiceClass *klass) +on_name_acquired (GDBusConnection *connection, + const gchar *name, + gpointer user_data) { - GObjectClass *gobject_class; - - gobject_class = G_OBJECT_CLASS (klass); - gobject_class->finalize = mousepad_dbus_service_finalize; - - /* install the D-BUS info for our class */ - dbus_g_object_type_install_info (G_TYPE_FROM_CLASS (klass), &dbus_glib_mousepad_dbus_service_object_info); + MousepadDBusService *skeleton; + + skeleton = mousepad_dbus_service_skeleton_new (); + g_signal_connect (skeleton, + "handle-launch-files", + G_CALLBACK (mousepad_dbus_service_launch_files), + NULL); + g_signal_connect (skeleton, + "handle-terminate", + G_CALLBACK (mousepad_dbus_service_terminate), + NULL); + g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (skeleton), + connection, + MOUSEPAD_DBUS_PATH, + NULL); } -static void -mousepad_dbus_service_init (MousepadDBusService *dbus_service) +void +mousepad_dbus_service_init (void) { - GError *error = NULL; - - /* try to connect to the session bus */ - dbus_service->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); - - if (G_LIKELY (dbus_service->connection != NULL)) - { - /* register the /org/xfce/TextEditor object for Mousepad */ - dbus_g_connection_register_g_object (dbus_service->connection, MOUSEPAD_DBUS_PATH, G_OBJECT (dbus_service)); - - /* request the org.xfce.Mousepad name for Mousepad */ - dbus_bus_request_name (dbus_g_connection_get_connection (dbus_service->connection), - MOUSEPAD_DBUS_INTERFACE, DBUS_NAME_FLAG_REPLACE_EXISTING, NULL); - } - else - { -#ifdef NDEBUG - /* hide this warning when the user is root and debug is disabled */ - if (geteuid () != 0) -#endif - { - /* notify the user that D-BUS service won't be available */ - g_message ("Failed to connect to the D-BUS session bus: %s\n", error->message); - } - - g_error_free (error); - } -} - - - -static void -mousepad_dbus_service_finalize (GObject *object) -{ - MousepadDBusService *dbus_service = MOUSEPAD_DBUS_SERVICE (object); - - /* release the D-BUS connection object */ - if (G_LIKELY (dbus_service->connection != NULL)) - dbus_g_connection_unref (dbus_service->connection); - - (*G_OBJECT_CLASS (mousepad_dbus_service_parent_class)->finalize) (object); + g_bus_own_name (G_BUS_TYPE_SESSION, + MOUSEPAD_DBUS_INTERFACE, + G_BUS_NAME_OWNER_FLAGS_REPLACE, + NULL, + on_name_acquired, + NULL, + NULL, + NULL); } @@ -134,11 +90,12 @@ mousepad_dbus_service_finalize (GObject *object) /** * mousepad_dbus_service_launch_files: * @dbus_service : A #MousepadDBusService. + * @invocation : A #GDBusMethodInvocation * @working_directory : The default working directory for this window. * @filenames : A list of filenames we try to open in tabs. The file names * can either be absolute paths, supported URIs or relative file * names to @working_directory or %NULL for an untitled document. - * @error : Return location for errors, not used atm. + * @user_data : User data, not used atm. * * This function is activated by DBus (service) and opens a new window in this instance of * Mousepad. @@ -146,21 +103,30 @@ mousepad_dbus_service_finalize (GObject *object) * Return value: %TRUE on success, %FALSE if @error is set. **/ static gboolean -mousepad_dbus_service_launch_files (MousepadDBusService *dbus_service, - const gchar *working_directory, - gchar **filenames, - GError **error) +mousepad_dbus_service_launch_files (MousepadDBusService *dbus_service, + GDBusMethodInvocation *invocation, + const gchar *working_directory, + gchar **filenames, + gpointer user_data) { MousepadApplication *application; - g_return_val_if_fail (g_path_is_absolute (working_directory), FALSE); - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + if (!g_path_is_absolute (working_directory)) + { + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_INVALID_ARGS, + "Argument working_directory must be an absolute path"); + return FALSE; + } /* open a mousepad window */ application = mousepad_application_get (); mousepad_application_new_window_with_files (application, NULL, working_directory, filenames); g_object_unref (G_OBJECT (application)); + mousepad_dbus_service_complete_launch_files (dbus_service, invocation); + return TRUE; } @@ -169,19 +135,23 @@ mousepad_dbus_service_launch_files (MousepadDBusService *dbus_service, /** * mousepad_dbus_service_terminate: * @dbus_service : A #MousepadDBusService. - * @error : Return location for errors, not used atm. + * @invocation : A #GDBusMethodInvocation + * @error : User data, not used atm. * * This function quits this instance of Mousepad. * * Return value: %TRUE on success. **/ static gboolean -mousepad_dbus_service_terminate (MousepadDBusService *dbus_service, - GError **error) +mousepad_dbus_service_terminate (MousepadDBusService *dbus_service, + GDBusMethodInvocation *invocation, + gpointer user_data) { /* leave the Gtk main loop as soon as possible */ gtk_main_quit (); + mousepad_dbus_service_complete_terminate (dbus_service, invocation); + /* we cannot fail */ return TRUE; } @@ -212,7 +182,7 @@ mousepad_dbus_client_send (DBusMessage *message, connection = dbus_bus_get (DBUS_BUS_SESSION, &derror); if (G_UNLIKELY (connection == NULL)) { - dbus_set_g_error (error, &derror); + g_dbus_error_set_dbus_error (error, derror.name, derror.message, NULL); dbus_error_free (&derror); return FALSE; } @@ -225,7 +195,7 @@ mousepad_dbus_client_send (DBusMessage *message, { /* check if there was just no instance running */ if (!dbus_error_has_name (&derror, DBUS_ERROR_NAME_HAS_NO_OWNER)) - dbus_set_g_error (error, &derror); + g_dbus_error_set_dbus_error (error, derror.name, derror.message, NULL); dbus_error_free (&derror); return FALSE; @@ -235,7 +205,7 @@ mousepad_dbus_client_send (DBusMessage *message, if (G_UNLIKELY (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR)) { dbus_set_error_from_message (&derror, result); - dbus_set_g_error (error, &derror); + g_dbus_error_set_dbus_error (error, derror.name, derror.message, NULL); dbus_message_unref (result); dbus_error_free (&derror); return FALSE; diff --git a/mousepad/mousepad-dbus.h b/mousepad/mousepad-dbus.h index 0c92522..2347d52 100644 --- a/mousepad/mousepad-dbus.h +++ b/mousepad/mousepad-dbus.h @@ -19,17 +19,7 @@ G_BEGIN_DECLS -typedef struct _MousepadDBusServiceClass MousepadDBusServiceClass; -typedef struct _MousepadDBusService MousepadDBusService; - -#define MOUSEPAD_TYPE_DBUS_SERVICE (mousepad_dbus_service_get_type ()) -#define MOUSEPAD_DBUS_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MOUSEPAD_TYPE_DBUS_SERVICE, MousepadDBusService)) -#define MOUSEPAD_DBUS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MOUSEPAD_TYPE_DBUS_SERVICE, MousepadDBusServiceClass)) -#define MOUSEPAD_IS_DBUS_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MOUSEPAD_TYPE_DBUS_SERVICE)) -#define MOUSEPAD_IS_DBUS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MOUSEPAD_TYPE_DBUS_BRIGDE)) -#define MOUSEPAD_DBUS_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MOUSEPAD_TYPE_DBUS_SERVICE, MousepadDBusServiceClass)) - -GType mousepad_dbus_service_get_type (void) G_GNUC_CONST; +void mousepad_dbus_service_init (void); gboolean mousepad_dbus_client_terminate (GError **error); -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
