From 9aa06a04b36d5d962f3b1cc8b6a541f8e73f6278 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Fri, 5 Jun 2020 17:16:30 +0300 Subject: [PATCH] src: Mark surfaces with the 'remote' role if configuration file says so As we don't have an explicit way to do it, like we have with the agl-shell-desktop protocol, we try to determine if the surface was being assigned to a remote output and use that when the surface is created. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad Change-Id: I97f628a5613bd36e96b7daeb48d6cd5311ab7b0f --- src/desktop.c | 4 ++++ src/ivi-compositor.h | 7 +++++++ src/layout.c | 2 +- src/main.c | 3 +++ src/shell.c | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/desktop.c b/src/desktop.c index 3dc1ceb..4c0a668 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -61,6 +61,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) struct weston_desktop_client *dclient; struct wl_client *client; struct ivi_surface *surface; + struct ivi_output *remote_output = NULL; const char *app_id = NULL; dclient = weston_desktop_surface_get_client(dsurface); @@ -95,6 +96,9 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) app_id = weston_desktop_surface_get_app_id(dsurface); + if ((remote_output = ivi_layout_find_app_id(app_id, ivi))) + ivi_set_pending_desktop_surface_remote(remote_output, app_id); + if (ivi->shell_client.ready) { ivi_check_pending_desktop_surface(surface); weston_log("Added surface %p, app_id %s, role %s\n", surface, diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h index 3b25915..a2f2745 100644 --- a/src/ivi-compositor.h +++ b/src/ivi-compositor.h @@ -358,4 +358,11 @@ remove_black_surface(struct ivi_output *output); const char * ivi_layout_get_surface_role_name(struct ivi_surface *surf); +void +ivi_set_pending_desktop_surface_remote(struct ivi_output *ioutput, + const char *app_id); + +struct ivi_output * +ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi); + #endif diff --git a/src/layout.c b/src/layout.c index 5a48e96..b749b76 100644 --- a/src/layout.c +++ b/src/layout.c @@ -236,7 +236,7 @@ ivi_layout_activate_complete(struct ivi_output *output, ivi_layout_get_surface_role_name(surf), output->name); } -static struct ivi_output * +struct ivi_output * ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi) { struct ivi_output *out; diff --git a/src/main.c b/src/main.c index e0a9d79..99512d5 100644 --- a/src/main.c +++ b/src/main.c @@ -102,6 +102,9 @@ ivi_output_configure_app_id(struct ivi_output *ivi_output) &ivi_output->app_id, NULL); + if (ivi_output->app_id == NULL) + return; + weston_log("Will place app_id %s on output %s\n", ivi_output->app_id, ivi_output->name); } diff --git a/src/shell.c b/src/shell.c index 3f522ba..ac41e1f 100644 --- a/src/shell.c +++ b/src/shell.c @@ -186,7 +186,7 @@ ivi_set_pending_desktop_surface_split(struct ivi_output *ioutput, wl_list_insert(&ivi->split_pending_apps, &split->link); } -static void +void ivi_set_pending_desktop_surface_remote(struct ivi_output *ioutput, const char *app_id) { -- 2.16.6