]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
xdg-autostart: Add support for Path= in XDG Desktop File
authorBenjamin Berg <bberg@redhat.com>
Thu, 8 Oct 2020 13:58:08 +0000 (15:58 +0200)
committerBenjamin Berg <bberg@redhat.com>
Fri, 9 Oct 2020 09:04:19 +0000 (11:04 +0200)
This sets the working directory of the application.

src/xdg-autostart-generator/xdg-autostart-service.c
src/xdg-autostart-generator/xdg-autostart-service.h

index 0485c90fc923c4e224b7e89a90900516603f2c01..e111875b78470f9f8b63cd574ea952a2fab99158 100644 (file)
@@ -28,6 +28,7 @@ XdgAutostartService* xdg_autostart_service_free(XdgAutostartService *s) {
 
         free(s->type);
         free(s->exec_string);
+        free(s->working_directory);
 
         strv_free(s->only_show_in);
         strv_free(s->not_show_in);
@@ -321,6 +322,7 @@ XdgAutostartService *xdg_autostart_service_parse_desktop(const char *path) {
         const ConfigTableItem items[] = {
                 { "Desktop Entry", "Name",                      xdg_config_parse_string, 0, &service->description},
                 { "Desktop Entry", "Exec",                      xdg_config_parse_string, 0, &service->exec_string},
+                { "Desktop Entry", "Path",                      xdg_config_parse_string, 0, &service->working_directory},
                 { "Desktop Entry", "TryExec",                   xdg_config_parse_string, 0, &service->try_exec},
                 { "Desktop Entry", "Type",                      xdg_config_parse_string, 0, &service->type},
                 { "Desktop Entry", "OnlyShowIn",                xdg_config_parse_strv, 0,   &service->only_show_in},
@@ -606,6 +608,16 @@ int xdg_autostart_service_generate_unit(
                 "Slice=app.slice\n",
                 exec_start);
 
+        if (service->working_directory) {
+                _cleanup_free_ char *e_working_directory = NULL;
+
+                e_working_directory = cescape(service->working_directory);
+                if (!e_working_directory)
+                        return log_oom();
+
+                fprintf(f, "WorkingDirectory=-%s\n", e_working_directory);
+        }
+
         /* Generate an ExecCondition to check $XDG_CURRENT_DESKTOP */
         if (!strv_isempty(service->only_show_in) || !strv_isempty(service->not_show_in)) {
                 _cleanup_free_ char *only_show_in = NULL, *not_show_in = NULL, *e_only_show_in = NULL, *e_not_show_in = NULL;
index 685f97824e3dd539254bb4630ce31eee62261cef..8cf07ef64a5f7b57ece236bd5f0067d6707cb78b 100644 (file)
@@ -10,6 +10,7 @@ typedef struct XdgAutostartService {
 
         char *type; /* Purely as an assertion check */
         char *exec_string;
+        char *working_directory;
 
         char **only_show_in;
         char **not_show_in;