summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--src/ivi-compositor.h2
-rw-r--r--src/layout.c37
-rw-r--r--src/main.c16
3 files changed, 46 insertions, 9 deletions
diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h
index b506ce1..bc3a81d 100644
--- a/src/ivi-compositor.h
+++ b/src/ivi-compositor.h
@@ -136,6 +136,8 @@ struct ivi_output {
/* Temporary: only used during configuration */
size_t add_len;
struct weston_head *add[8];
+
+ char *app_id;
};
enum ivi_surface_role {
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),
diff --git a/src/main.c b/src/main.c
index cad8a42..2bbb800 100644
--- a/src/main.c
+++ b/src/main.c
@@ -46,6 +46,7 @@
#include <libweston/windowed-output-api.h>
#include <libweston/config-parser.h>
#include <libweston/weston-log.h>
+#include <weston/weston.h>
#include "shared/os-compatibility.h"
#include "shared/helpers.h"
@@ -85,6 +86,20 @@ to_ivi_output(struct weston_output *o)
return output;
}
+static void
+ivi_output_configure_app_id(struct ivi_output *ivi_output)
+{
+ if (ivi_output->config) {
+ if (ivi_output->app_id != NULL)
+ return;
+
+ weston_config_section_get_string(ivi_output->config,
+ "agl-shell-app-id",
+ &ivi_output->app_id,
+ NULL);
+ }
+}
+
static struct ivi_output *
ivi_ensure_output(struct ivi_compositor *ivi, char *name,
struct weston_config_section *config)
@@ -119,6 +134,7 @@ ivi_ensure_output(struct ivi_compositor *ivi, char *name,
&output->output_destroy);
wl_list_insert(&ivi->outputs, &output->link);
+ ivi_output_configure_app_id(output);
return output;
}