diff options
author | 2023-01-11 17:23:37 +0200 | |
---|---|---|
committer | 2023-01-29 22:26:50 +0000 | |
commit | 53a039ff1c4b05aaacce118a04563620e676d7c6 (patch) | |
tree | d79410c6a8d21184472c4e64d473209eb102d54b /src/layout.c | |
parent | ce8dd33f3762e0ec44927b70059fb2721338e8bf (diff) |
ivi-compositor: Add support for multiple app_ids
Verify if more than one app_id is being passed in the agl-shell-app-id
to allow more than one appid being placed to that output.
Bug-AGL: SPEC-4666
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I79dc77564ffca41148832af597b6836d7d28f686
Diffstat (limited to 'src/layout.c')
-rw-r--r-- | src/layout.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/layout.c b/src/layout.c index f2fc6cc..028ff4a 100644 --- a/src/layout.c +++ b/src/layout.c @@ -315,6 +315,25 @@ ivi_layout_activate_complete(struct ivi_output *output, shell_send_app_state(ivi, app_id, AGL_SHELL_APP_STATE_ACTIVATED); } +static bool +ivi_layout_find_output_with_app_id(const char *app_id, struct ivi_output *output) +{ + char *cur; + size_t app_id_len; + + cur = output->app_ids; + app_id_len = strlen(app_id); + + while ((cur = strstr(cur, app_id))) { + if ((cur[app_id_len] == ',' || cur[app_id_len] == '\0') && + (cur == output->app_ids || cur[-1] == ',')) + return true; + cur++; + } + + return false; +} + struct ivi_output * ivi_layout_find_with_app_id(const char *app_id, struct ivi_compositor *ivi) { @@ -324,13 +343,12 @@ ivi_layout_find_with_app_id(const char *app_id, struct ivi_compositor *ivi) return NULL; wl_list_for_each(out, &ivi->outputs, link) { - if (!out->app_id) + if (!out->app_ids) continue; - if (!strcmp(app_id, out->app_id)) + if (ivi_layout_find_output_with_app_id(app_id, out)) return out; } - return NULL; } @@ -924,6 +942,9 @@ ivi_layout_activate_by_surf(struct ivi_output *output, struct ivi_surface *surf) struct ivi_output *remote_output = ivi_layout_find_with_app_id(app_id, ivi); + weston_log("Changed activation for app_id %s, type %s, on output %s\n", app_id, + ivi_layout_get_surface_role_name(surf), output->output->name); + /* if already active on a remote output do not * attempt to activate it again */ if (remote_output && remote_output->active == surf) |