From 483a5a73cb9e0b4dc46635e7457063031d58aaa6 Mon Sep 17 00:00:00 2001 From: Gyeyoung Baek Date: Wed, 4 Dec 2024 17:37:16 +0900 Subject: [PATCH] clients/ivi-shell-user-interface.c: Add 'command' config Previously, commands could only be specified by their path, so it was not possible to pass arguments. Use the 'command' config first, and if it is NULL, fall back to the existing 'path' config. Signed-off-by: Gyeyoung Baek Co-authored-by: Michael Olbrich --- clients/ivi-shell-user-interface.c | 47 +++++++++++++++++++++++--- data/COPYING | 1 + data/icon_ivi_simple-egl-vertical.png | Bin 0 -> 4958 bytes data/meson.build | 1 + ivi-shell/weston.ini.in | 6 ++++ tests/ivi-shell-app-test.c | 8 ++++- 6 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 data/icon_ivi_simple-egl-vertical.png diff --git a/clients/ivi-shell-user-interface.c b/clients/ivi-shell-user-interface.c index bbc2ff22f..dd7699200 100644 --- a/clients/ivi-shell-user-interface.c +++ b/clients/ivi-shell-user-interface.c @@ -143,6 +143,8 @@ hmi_homescreen_launcher { uint32_t workspace_id; char *icon; char *path; + char **argv; + struct wl_list link; }; @@ -308,12 +310,10 @@ launcher_button(uint32_t surfaceId, struct wl_list *launcher_list) struct hmi_homescreen_launcher *launcher = NULL; wl_list_for_each(launcher, launcher_list, link) { - char *argv[] = { NULL }; - if (surfaceId != launcher->icon_surface_id) continue; - execute_process(launcher->path, argv); + execute_process(launcher->path, launcher->argv); return 1; } @@ -1065,6 +1065,32 @@ create_launchers(struct wlContextCommon *cmm, struct wl_list *launcher_list) free(launchers); } +static char ** +parse_command(char *str) +{ + char **argv; + char *saveptr; + char *token; + int i; + int count = 1; + + for (i = 1; str[i]; i++) + if (str[i] == ' ' && str[i-1] != ' ') + count++; + + argv = xcalloc(count + 1, sizeof(char*)); + + i = 0; + token = strtok_r(str, " ", &saveptr); + while (token != NULL) { + argv[i++] = token; + + token = strtok_r(NULL, " ", &saveptr); + } + + return argv; +} + /** * Internal method to read out weston.ini to get configuration */ @@ -1177,6 +1203,7 @@ hmi_homescreen_setting_create(void) while (weston_config_next_section(config, §ion, &name)) { struct hmi_homescreen_launcher *launcher; + char *command; if (strcmp(name, "ivi-launcher") != 0) continue; @@ -1186,8 +1213,18 @@ hmi_homescreen_setting_create(void) weston_config_section_get_string(section, "icon", &launcher->icon, NULL); - weston_config_section_get_string(section, "path", - &launcher->path, NULL); + + weston_config_section_get_string(section, "command", + &command, NULL); + if (command == NULL) { + weston_config_section_get_string(section, "path", + &launcher->path, NULL); + launcher->argv = NULL; + } else { + launcher->argv = parse_command(command); + launcher->path = launcher->argv[0]; + } + weston_config_section_get_uint(section, "workspace-id", &launcher->workspace_id, 0); weston_config_section_get_uint(section, "icon-id", diff --git a/data/COPYING b/data/COPYING index 034502397..a18c6d676 100644 --- a/data/COPYING +++ b/data/COPYING @@ -33,6 +33,7 @@ home.png icon_ivi_clickdot.png icon_ivi_flower.png icon_ivi_simple-egl.png +icon_ivi_simple-egl-vertical.png icon_ivi_simple-shm.png icon_ivi_smoke.png diff --git a/data/icon_ivi_simple-egl-vertical.png b/data/icon_ivi_simple-egl-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..1c927938049fd86ddca773f2118cbce2ce14f5f9 GIT binary patch literal 4958 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 I$Net;4=xScOaK4? literal 0 HcmV?d00001 diff --git a/data/meson.build b/data/meson.build index 10d820cb9..38a994a2b 100644 --- a/data/meson.build +++ b/data/meson.build @@ -9,6 +9,7 @@ install_data( 'icon_ivi_clickdot.png', 'icon_ivi_flower.png', 'icon_ivi_simple-egl.png', + 'icon_ivi_simple-egl-vertical.png', 'icon_ivi_simple-shm.png', 'icon_ivi_smoke.png', 'icon_terminal.png', diff --git a/ivi-shell/weston.ini.in b/ivi-shell/weston.ini.in index 3bdfbebb4..d6073e627 100644 --- a/ivi-shell/weston.ini.in +++ b/ivi-shell/weston.ini.in @@ -96,3 +96,9 @@ workspace-id=3 icon-id=4010 icon=@westondatadir@/icon_ivi_smoke.png path=@bindir@/weston-smoke + +[ivi-launcher] +workspace-id=3 +icon-id=4011 +icon=@westondatadir@/icon_ivi_simple-egl-vertical.png +command=@bindir@/weston-simple-egl -v diff --git a/tests/ivi-shell-app-test.c b/tests/ivi-shell-app-test.c index 65c5b0d3e..3420e8687 100644 --- a/tests/ivi-shell-app-test.c +++ b/tests/ivi-shell-app-test.c @@ -133,7 +133,13 @@ fixture_setup(struct weston_test_harness *harness) cfgln("workspace-id=%d", 3), cfgln("icon-id=%d", 4010), cfgln("icon=%s", WESTON_DATA_DIR "/icon_ivi_smoke.png"), - cfgln("path=%s", BINDIR "/weston-smoke") + cfgln("path=%s", BINDIR "/weston-smoke"), + + cfgln("[ivi-launcher]"), + cfgln("workspace-id=%d", 3), + cfgln("icon-id=%d", 4011), + cfgln("icon=%s", WESTON_DATA_DIR "/icon_ivi_simple-egl-vertical.png"), + cfgln("command=%s", BINDIR "/weston-simple-egl -v") ); return weston_test_harness_execute_as_client(harness, &setup);