diff --git a/meson.build b/meson.build index 0c65f381afc7a86b32a9331f1d0bc538f24680a8..0234cf1dd3548694f68ca395a7de033232353377 100644 --- a/meson.build +++ b/meson.build @@ -87,7 +87,7 @@ colord_dep = dependency('colord', version: '>= 1.3.5') geocode_glib_dep = dependency('geocode-glib-1.0', version: '>= 3.10.0') gio_dep = dependency('gio-2.0', version: '>= 2.53.0') gio_unix_dep = dependency('gio-unix-2.0') -gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.11.1') +gnome_desktop_dep = dependency('gnome-desktop-3.0', version: '>= 3.34.2') gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 3.33.0') gtk_dep = dependency('gtk+-3.0', version: '>= 3.15.3') gtk_x11_dep = dependency('gtk+-x11-3.0') diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c index a7155d2f68ff582844d08b2fccf4f558b5c06055..f4ab76f55d9f18de66e4792dcf44846dba9dacd7 100644 --- a/plugins/media-keys/gsd-media-keys-manager.c +++ b/plugins/media-keys/gsd-media-keys-manager.c @@ -41,6 +41,8 @@ #include #include +#define GNOME_DESKTOP_USE_UNSTABLE_API +#include #if HAVE_GUDEV #include @@ -264,7 +266,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (GsdMediaKeysManager, gsd_media_keys_manager, G_TYPE_ static gpointer manager_object = NULL; - static void media_key_unref (MediaKey *key) { @@ -996,6 +997,32 @@ init_kbd (GsdMediaKeysManager *manager) gnome_settings_profile_end (NULL); } +static void +app_launched_cb (GAppLaunchContext *context, + GAppInfo *info, + GVariant *platform_data, + gpointer user_data) +{ + GsdMediaKeysManager *manager = GSD_MEDIA_KEYS_MANAGER (user_data); + GsdMediaKeysManagerPrivate *priv = GSD_MEDIA_KEYS_MANAGER_GET_PRIVATE (manager); + gint32 pid; + const gchar *app_name; + + if (!g_variant_lookup (platform_data, "pid", "i", &pid)) + return; + + app_name = g_app_info_get_id (info); + if (app_name == NULL) + app_name = g_app_info_get_executable (info); + + /* Start async request; we don't care about the result */ + gnome_start_systemd_scope (app_name, + pid, + NULL, + priv->connection, + NULL, NULL, NULL); +} + static void launch_app (GsdMediaKeysManager *manager, GAppInfo *app_info, @@ -1009,6 +1036,12 @@ launch_app (GsdMediaKeysManager *manager, gdk_app_launch_context_set_timestamp (launch_context, timestamp); set_launch_context_env (manager, G_APP_LAUNCH_CONTEXT (launch_context)); + g_signal_connect_object (launch_context, + "launched", + G_CALLBACK (app_launched_cb), + manager, + 0); + if (!g_app_info_launch (app_info, NULL, G_APP_LAUNCH_CONTEXT (launch_context), &error)) { g_warning ("Could not launch '%s': %s", g_app_info_get_commandline (app_info), diff --git a/plugins/media-keys/meson.build b/plugins/media-keys/meson.build index e6c1d2ac15460ea26d6f5842b9a11f1b6da1ab79..cbda8eec5b0086bc94f3c7901b493889ab5fdd15 100644 --- a/plugins/media-keys/meson.build +++ b/plugins/media-keys/meson.build @@ -27,6 +27,7 @@ deps = plugins_deps + [ gsettings_desktop_dep, libcanberra_gtk_dep, libcommon_dep, + gnome_desktop_dep, libgvc_dep, libpulse_mainloop_glib_dep, m_dep,