From 1ff030a2b103dfe68a8de8259c33808bc011d941 Mon Sep 17 00:00:00 2001 From: ZenWalker Date: Mon, 29 Aug 2016 02:12:19 +0200 Subject: Port from libunique to GApplication and GtkApplication applet-main.c: gtk2 and gtk3 Port to Gapplication based on this gnome-media commits: https://github.com/GNOME/gnome-media/commit/7b5a8127cea09779dd172b0b7598d2ad03b2e47b https://github.com/GNOME/gnome-media/commit/7283e156e0ea1b2d19292a97104b3ad49fc9e693 dialog-main.c: gtk3 Port to Gapplication and GtkApplication I did this implementation Fixes #77 --- configure.ac | 34 +++++++++++++++-------- mate-volume-control/applet-main.c | 14 +++++++--- mate-volume-control/dialog-main.c | 58 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index 9d1b3e1..94d4543 100644 --- a/configure.ac +++ b/configure.ac @@ -61,7 +61,6 @@ case "$with_gtk" in 3.0) GTK_API_VERSION=3.0 GTK_REQUIRED_VERSION=3.0.0 CANBERRA_API_VERSION=3 - UNIQUE_API_VERSION=3.0 ;; esac @@ -71,16 +70,29 @@ dnl======================================================================= dnl Check for the volume control modules dnl======================================================================= -PKG_CHECK_MODULES(VOLUME_CONTROL, - gobject-2.0 >= $GLIB_REQUIRED_VERSION - gtk+-$GTK_API_VERSION >= $GTK_REQUIRED_VERSION - gio-2.0 >= $GIO_REQUIRED_VERSION - libcanberra-gtk$CANBERRA_API_VERSION >= $CANBERRA_REQUIRED_VERSION - unique-$UNIQUE_API_VERSION - libxml-2.0 - mate-desktop-2.0 >= $MATE_DESKTOP_REQUIRED_VERSION - libmatemixer >= $MATE_MIXER_REQUIRED_VERSION -) +AS_IF([test "$GTK_API_VERSION" = "3.0"], [ + PKG_CHECK_MODULES(VOLUME_CONTROL, + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gtk+-$GTK_API_VERSION >= $GTK_REQUIRED_VERSION + gio-2.0 >= $GIO_REQUIRED_VERSION + libcanberra-gtk$CANBERRA_API_VERSION >= $CANBERRA_REQUIRED_VERSION + libxml-2.0 + mate-desktop-2.0 >= $MATE_DESKTOP_REQUIRED_VERSION + libmatemixer >= $MATE_MIXER_REQUIRED_VERSION + ) +], [ + PKG_CHECK_MODULES(VOLUME_CONTROL, + gobject-2.0 >= $GLIB_REQUIRED_VERSION + gtk+-$GTK_API_VERSION >= $GTK_REQUIRED_VERSION + gio-2.0 >= $GIO_REQUIRED_VERSION + libcanberra-gtk$CANBERRA_API_VERSION >= $CANBERRA_REQUIRED_VERSION + unique-$UNIQUE_API_VERSION + libxml-2.0 + mate-desktop-2.0 >= $MATE_DESKTOP_REQUIRED_VERSION + libmatemixer >= $MATE_MIXER_REQUIRED_VERSION + ) +]) + AC_SUBST(VOLUME_CONTROL_CFLAGS) AC_SUBST(VOLUME_CONTROL_LIBS) diff --git a/mate-volume-control/applet-main.c b/mate-volume-control/applet-main.c index 1b4bb0a..883823a 100644 --- a/mate-volume-control/applet-main.c +++ b/mate-volume-control/applet-main.c @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include "gvc-applet.h" @@ -40,7 +40,7 @@ main (int argc, char **argv) { GError *error = NULL; GvcApplet *applet; - UniqueApp *app; + GApplication *app = NULL; GOptionEntry entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL }, { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, N_("Enable debug"), NULL }, @@ -58,6 +58,7 @@ main (int argc, char **argv) if (error != NULL) { g_warning ("%s", error->message); + g_error_free (error); return 1; } if (show_version == TRUE) { @@ -68,9 +69,14 @@ main (int argc, char **argv) g_setenv ("G_MESSAGES_DEBUG", "all", FALSE); } - app = unique_app_new (GVC_APPLET_DBUS_NAME, NULL); + app = g_application_new (GVC_APPLET_DBUS_NAME, G_APPLICATION_FLAGS_NONE); - if (unique_app_is_running (app) == TRUE) { + if (!g_application_register (app, NULL, &error)) { + g_warning ("%s", error->message); + g_error_free (error); + return 1; + } + if (g_application_get_is_remote (app)) { g_warning ("Applet is already running, exiting"); return 0; } diff --git a/mate-volume-control/dialog-main.c b/mate-volume-control/dialog-main.c index 08c55fc..63545b8 100644 --- a/mate-volume-control/dialog-main.c +++ b/mate-volume-control/dialog-main.c @@ -26,7 +26,11 @@ #include #include +#if GTK_CHECK_VERSION (3, 0, 0) +#include +#else #include +#endif #include #include "gvc-mixer-dialog.h" @@ -63,6 +67,7 @@ on_dialog_close (GtkDialog *dialog, gpointer data) gtk_main_quit (); } +#if !GTK_CHECK_VERSION (3, 0, 0) static UniqueResponse on_app_message_received (UniqueApp *app, int command, @@ -74,6 +79,7 @@ on_app_message_received (UniqueApp *app, return UNIQUE_RESPONSE_OK; } +#endif static void remove_warning_dialog (void) @@ -87,10 +93,36 @@ remove_warning_dialog (void) } static void +#if GTK_CHECK_VERSION (3, 0, 0) +context_ready (MateMixerContext *context, GtkApplication *application) +#else context_ready (MateMixerContext *context, UniqueApp *app) +#endif { /* The dialog might be already created, e.g. when reconnected * to a sound server */ +#if GTK_CHECK_VERSION (3, 0, 0) + GtkApplication *app; + GError *error = NULL; + + app = gtk_application_new ("context.ready", G_APPLICATION_FLAGS_NONE); + g_application_register (G_APPLICATION (app), NULL, &error); + if (error != NULL) + { + g_warning ("%s", error->message); + g_error_free (error); + error = NULL; + } + + if (g_application_get_is_remote (G_APPLICATION (app))) + { + g_application_activate (G_APPLICATION (app)); + g_object_unref (app); + app_dialog = GTK_WIDGET (gvc_mixer_dialog_new (context)); + gtk_main_quit (); + } + +#endif if (app_dialog != NULL) return; @@ -107,18 +139,28 @@ context_ready (MateMixerContext *context, UniqueApp *app) gvc_mixer_dialog_set_page (GVC_MIXER_DIALOG (app_dialog), page); +#if !GTK_CHECK_VERSION (3, 0, 0) g_signal_connect (G_OBJECT (app), "message-received", G_CALLBACK (on_app_message_received), app_dialog); +#endif gtk_widget_show (app_dialog); +#if GTK_CHECK_VERSION (3, 0, 0) + + g_signal_connect_swapped (app, "activate", G_CALLBACK (gtk_window_present), app_dialog); +#endif } static void on_context_state_notify (MateMixerContext *context, GParamSpec *pspec, +#if GTK_CHECK_VERSION (3, 0, 0) + GtkApplication *app) +#else UniqueApp *app) +#endif { MateMixerState state = mate_mixer_context_get_state (context); @@ -179,7 +221,11 @@ main (int argc, char **argv) GError *error = NULL; gchar *backend = NULL; MateMixerContext *context; +#if GTK_CHECK_VERSION (3, 0, 0) + GApplication *app; +#else UniqueApp *app; +#endif GOptionEntry entries[] = { { "backend", 'b', 0, G_OPTION_ARG_STRING, &backend, N_("Sound system backend"), "pulse|alsa|oss|null" }, { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug, N_("Enable debug"), NULL }, @@ -199,6 +245,7 @@ main (int argc, char **argv) if (error != NULL) { g_warning ("%s", error->message); + g_error_free (error); return 1; } if (show_version == TRUE) { @@ -209,12 +256,23 @@ main (int argc, char **argv) g_setenv ("G_MESSAGES_DEBUG", "all", FALSE); } +#if GTK_CHECK_VERSION (3, 0, 0) + app = g_application_new (GVC_DIALOG_DBUS_NAME, G_APPLICATION_FLAGS_NONE); + + if (!g_application_register (app, NULL, &error)) + { + g_warning ("%s", error->message); + g_error_free (error); + return 1; + } +#else app = unique_app_new (GVC_DIALOG_DBUS_NAME, NULL); if (unique_app_is_running (app) == TRUE) { unique_app_send_message (app, UNIQUE_ACTIVATE, NULL); return 0; } +#endif if (mate_mixer_init () == FALSE) { g_warning ("libmatemixer initialization failed, exiting"); return 1; -- cgit v1.2.1