gdesktopappinfo: Add SourcePath= to transient systemd units

systemd allows setting a SourcePath= which shows the file that the unit
has been generated from. KDE is starting to set this and it seems like a
good idea, so do the same here.

See https://invent.kde.org/frameworks/kio/-/merge_requests/124
This commit is contained in:
Benjamin Berg 2020-09-17 17:35:58 +02:00 committed by Michael Catanzaro
parent 35d24b2fa6
commit eea325b4ef

View File

@ -2777,6 +2777,7 @@ create_systemd_scope (GDBusConnection *session_bus,
{ {
GVariantBuilder builder; GVariantBuilder builder;
const char *app_name = g_get_application_name (); const char *app_name = g_get_application_name ();
const char *source_path = NULL;
char *appid = NULL; char *appid = NULL;
char *appid_escaped = NULL; char *appid_escaped = NULL;
char *snid_escaped = NULL; char *snid_escaped = NULL;
@ -2802,6 +2803,8 @@ create_systemd_scope (GDBusConnection *session_bus,
*/ */
unit_name = g_strdup_printf ("app-glib-%s-%d.scope", appid_escaped, pid); unit_name = g_strdup_printf ("app-glib-%s-%d.scope", appid_escaped, pid);
source_path = g_desktop_app_info_get_filename (info);
g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ssa(sv)a(sa(sv)))")); g_variant_builder_init (&builder, G_VARIANT_TYPE ("(ssa(sv)a(sa(sv)))"));
g_variant_builder_add (&builder, "s", unit_name); g_variant_builder_add (&builder, "s", unit_name);
g_variant_builder_add (&builder, "s", "fail"); g_variant_builder_add (&builder, "s", "fail");
@ -2815,6 +2818,16 @@ create_systemd_scope (GDBusConnection *session_bus,
"Description", "Description",
g_variant_new_take_string (g_strdup_printf ("Application launched by %s", g_variant_new_take_string (g_strdup_printf ("Application launched by %s",
app_name))); app_name)));
/* If we have a .desktop file, document that the scope has been "generated"
* from it.
*/
if (source_path && g_utf8_validate (source_path, -1, NULL))
g_variant_builder_add (&builder,
"(sv)",
"SourcePath",
g_variant_new_string (source_path));
g_variant_builder_add (&builder, g_variant_builder_add (&builder,
"(sv)", "(sv)",
"PIDs", "PIDs",