xdg-autostart: Add support for Path= in XDG Desktop File
This sets the working directory of the application.
This commit is contained in:
parent
ba28df775d
commit
d5273f51a1
|
@ -28,6 +28,7 @@ XdgAutostartService* xdg_autostart_service_free(XdgAutostartService *s) {
|
||||||
|
|
||||||
free(s->type);
|
free(s->type);
|
||||||
free(s->exec_string);
|
free(s->exec_string);
|
||||||
|
free(s->working_directory);
|
||||||
|
|
||||||
strv_free(s->only_show_in);
|
strv_free(s->only_show_in);
|
||||||
strv_free(s->not_show_in);
|
strv_free(s->not_show_in);
|
||||||
|
@ -321,6 +322,7 @@ XdgAutostartService *xdg_autostart_service_parse_desktop(const char *path) {
|
||||||
const ConfigTableItem items[] = {
|
const ConfigTableItem items[] = {
|
||||||
{ "Desktop Entry", "Name", xdg_config_parse_string, 0, &service->description},
|
{ "Desktop Entry", "Name", xdg_config_parse_string, 0, &service->description},
|
||||||
{ "Desktop Entry", "Exec", xdg_config_parse_string, 0, &service->exec_string},
|
{ "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", "TryExec", xdg_config_parse_string, 0, &service->try_exec},
|
||||||
{ "Desktop Entry", "Type", xdg_config_parse_string, 0, &service->type},
|
{ "Desktop Entry", "Type", xdg_config_parse_string, 0, &service->type},
|
||||||
{ "Desktop Entry", "OnlyShowIn", xdg_config_parse_strv, 0, &service->only_show_in},
|
{ "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",
|
"Slice=app.slice\n",
|
||||||
exec_start);
|
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 */
|
/* Generate an ExecCondition to check $XDG_CURRENT_DESKTOP */
|
||||||
if (!strv_isempty(service->only_show_in) || !strv_isempty(service->not_show_in)) {
|
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;
|
_cleanup_free_ char *only_show_in = NULL, *not_show_in = NULL, *e_only_show_in = NULL, *e_not_show_in = NULL;
|
||||||
|
|
|
@ -10,6 +10,7 @@ typedef struct XdgAutostartService {
|
||||||
|
|
||||||
char *type; /* Purely as an assertion check */
|
char *type; /* Purely as an assertion check */
|
||||||
char *exec_string;
|
char *exec_string;
|
||||||
|
char *working_directory;
|
||||||
|
|
||||||
char **only_show_in;
|
char **only_show_in;
|
||||||
char **not_show_in;
|
char **not_show_in;
|
||||||
|
|
Loading…
Reference in a new issue