[gnome-shell/benzea/systemd-scopes-stable: 2/3] shell-global: Place launched applications into a systemd scope
- From: Benjamin Berg <bberg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/benzea/systemd-scopes-stable: 2/3] shell-global: Place launched applications into a systemd scope
- Date: Mon, 9 Dec 2019 12:46:30 +0000 (UTC)
commit 69ab23aa5199e37377c401f63f458d58479c99a3
Author: Benjamin Berg <bberg redhat com>
Date: Tue Nov 26 19:45:29 2019 +0100
shell-global: Place launched applications into a systemd scope
This improves separation from the shells service scope for applications
launched using an XDG desktop file.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/863
(cherry picked from commit b60365aa06b18702357bd5da3106cc7c99f3e4f3)
meson.build | 2 ++
src/meson.build | 2 +-
src/shell-global.c | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 37 insertions(+), 1 deletion(-)
---
diff --git a/meson.build b/meson.build
index 402aff3fca..34bfc6b091 100644
--- a/meson.build
+++ b/meson.build
@@ -31,6 +31,7 @@ polkit_req = '>= 0.100'
schemas_req = '>= 3.33.1'
startup_req = '>= 0.11'
ibus_req = '>= 1.5.2'
+gnome_desktop_req = '>= 3.34.2'
bt_req = '>= 3.9.0'
gst_req = '>= 0.11.92'
@@ -97,6 +98,7 @@ startup_dep = dependency('libstartup-notification-1.0', version: startup_req)
ibus_dep = dependency('ibus-1.0', version: ibus_req)
x11_dep = dependency('x11')
schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req)
+gnome_desktop_dep = dependency('gnome-desktop-3.0', version: gnome_desktop_req)
bt_dep = dependency('gnome-bluetooth-1.0', version: bt_req, required: false)
gst_dep = dependency('gstreamer-1.0', version: gst_req, required: false)
diff --git a/src/meson.build b/src/meson.build
index 3523fb16cb..cbf5886ea8 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -192,7 +192,7 @@ libshell_no_gir_sources += dbus_generated
libshell = library('gnome-shell',
sources: libshell_gir_sources + libshell_no_gir_sources,
- dependencies: gnome_shell_deps + [libshell_menu_dep, libst_dep, mutter_dep, m_dep],
+ dependencies: gnome_shell_deps + [libshell_menu_dep, libst_dep, mutter_dep, gnome_desktop_dep, m_dep],
include_directories: [conf_inc, st_inc, include_directories('tray')],
c_args: gnome_shell_cflags,
link_with: [libtray],
diff --git a/src/shell-global.c b/src/shell-global.c
index 77e167c107..c3b48272e3 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -29,6 +29,9 @@
#include <meta/meta-workspace-manager.h>
#include <meta/meta-x11-display.h>
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+#include <libgnome-desktop/gnome-systemd.h>
+
/* Memory report bits */
#ifdef HAVE_MALLINFO
#include <malloc.h>
@@ -43,6 +46,7 @@
#include "shell-perf-log.h"
#include "shell-window-tracker.h"
#include "shell-wm.h"
+#include "shell-util.h"
#include "st.h"
static ShellGlobal *the_object = NULL;
@@ -1308,6 +1312,29 @@ shell_global_get_current_time (ShellGlobal *global)
return clutter_get_current_event_time ();
}
+static void
+shell_global_app_launched_cb (GAppLaunchContext *context,
+ GAppInfo *info,
+ GVariant *platform_data,
+ gpointer user_data)
+{
+ 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,
+ NULL,
+ NULL, NULL, NULL);}
+
/**
* shell_global_create_app_launch_context:
* @global: A #ShellGlobal
@@ -1343,6 +1370,13 @@ shell_global_create_app_launch_context (ShellGlobal *global,
meta_launch_context_set_workspace (context, ws);
+#ifdef HAVE_SYSTEMD
+ g_signal_connect (context,
+ "launched",
+ G_CALLBACK (shell_global_app_launched_cb),
+ NULL);
+#endif
+
return (GAppLaunchContext *) context;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]