aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2020-06-05 17:16:30 +0300
committerMarius Vlad <marius.vlad@collabora.com>2020-06-08 23:23:51 +0300
commit9aa06a04b36d5d962f3b1cc8b6a541f8e73f6278 (patch)
tree536e8a5da3063b0852fa410dd11570c0c06111a5
parentaaaa8f56f102141a529d93e2a879d912d16488ad (diff)
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 <marius.vlad@collabora.com> Change-Id: I97f628a5613bd36e96b7daeb48d6cd5311ab7b0f
-rw-r--r--src/desktop.c4
-rw-r--r--src/ivi-compositor.h7
-rw-r--r--src/layout.c2
-rw-r--r--src/main.c3
-rw-r--r--src/shell.c2
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)
{