summaryrefslogtreecommitdiffstats
path: root/src/layout.c
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2020-06-01 18:31:22 +0300
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2020-06-15 10:08:32 +0000
commit8df7681a823e5e6f7ead5150abf65dd84d05aecd (patch)
tree3ff88fdab7364e080050b942aca1e9ded0ea6dcd /src/layout.c
parentf235042e4cd88197ade414795382ba227f924332 (diff)
src/: Use agl-shell-app-id to set-up views on a different output
This makes it easier to specify the application directly in the configuration file, without the ned to modify the application code. Bug-AGL: SPEC-3280 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ic38ca0aaf05ce8f1c4993341c9d767acfd25eb43
Diffstat (limited to 'src/layout.c')
-rw-r--r--src/layout.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/src/layout.c b/src/layout.c
index a142609..57992ca 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -256,6 +256,23 @@ ivi_layout_activate_complete(struct ivi_output *output,
}
static struct ivi_output *
+ivi_layout_find_app_id(const char *app_id, struct ivi_compositor *ivi)
+{
+ struct ivi_output *out;
+
+ wl_list_for_each(out, &ivi->outputs, link) {
+ if (!out->app_id)
+ continue;
+
+ if (!strcmp(app_id, out->app_id))
+ return out;
+ }
+
+ return NULL;
+}
+
+
+static struct ivi_output *
ivi_layout_find_bg_output(struct ivi_compositor *ivi)
{
struct ivi_output *out;
@@ -276,6 +293,7 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
struct weston_geometry geom = weston_desktop_surface_get_geometry(dsurf);
struct ivi_policy *policy = surf->ivi->policy;
struct ivi_output *output;
+ const char *app_id = weston_desktop_surface_get_app_id(dsurf);
assert(surf->role == IVI_SURFACE_ROLE_DESKTOP ||
surf->role == IVI_SURFACE_ROLE_REMOTE);
@@ -293,7 +311,7 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
output = surf->remote.output;
if (surf->role == IVI_SURFACE_ROLE_DESKTOP && !output) {
- struct ivi_output *ivi_bg_output;
+ struct ivi_output *r_output;
if (policy && policy->api.surface_activate_by_default &&
!policy->api.surface_activate_by_default(surf, surf->ivi))
@@ -303,18 +321,21 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
if (surf->activated_by_default)
return;
- ivi_bg_output = ivi_layout_find_bg_output(surf->ivi);
+ /* check first if there aren't any outputs being set */
+ r_output = ivi_layout_find_app_id(app_id, surf->ivi);
+
+ /* try finding an output with a background and use that */
+ if (!r_output)
+ r_output = ivi_layout_find_bg_output(surf->ivi);
/* use the output of the bg to activate the app on start-up by
* default */
- if (surf->view && ivi_bg_output) {
- const char *app_id =
- weston_desktop_surface_get_app_id(dsurf);
- if (app_id && ivi_bg_output) {
+ if (surf->view && r_output) {
+ if (app_id && r_output) {
weston_log("Surface with app_id %s, role %s activating by default\n",
weston_desktop_surface_get_app_id(surf->dsurface),
ivi_layout_get_surface_role_name(surf));
- ivi_layout_activate(ivi_bg_output, app_id);
+ ivi_layout_activate(r_output, app_id);
surf->activated_by_default = true;
}
}
@@ -323,7 +344,6 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
}
if (surf->role == IVI_SURFACE_ROLE_REMOTE && output) {
- const char *app_id;
if (policy && policy->api.surface_activate_by_default &&
!policy->api.surface_activate_by_default(surf, surf->ivi))
return;
@@ -336,7 +356,6 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
if (surf->activated_by_default && output->active == surf)
return;
- app_id = weston_desktop_surface_get_app_id(dsurf);
if (app_id) {
weston_log("Surface with app_id %s, role %s activating by default\n",
weston_desktop_surface_get_app_id(surf->dsurface),