summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2020-01-15 17:08:54 +0200
committerMarius Vlad <marius.vlad@collabora.com>2020-02-02 21:07:07 +0200
commit3950b7e787c19bd1917533081c8fb8d4331e4ef3 (patch)
treee16a7e68ac966b51123d67e6b4dd8b8ca235831a
parentffd00ab3a05351bac2124e5eba8a66f20a3b62da (diff)
layout: Use the background's surface ivi_output when activating apps by
default In order to activate application by default, we need a ivi_output which for the desktop role that's not available at that time (the activation part actually will set-up one). Uses the bg output for this case. This is only activated by adding 'activate-by-default' bool variable under the '[shell]' section (in the ini configuration file). Bug-AGL: SPEC-3118 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: Ib44f0fcccc145216fb28fc9c26e5a065912ceef5
-rw-r--r--src/ivi-compositor.h4
-rw-r--r--src/layout.c35
-rw-r--r--src/main.c16
3 files changed, 54 insertions, 1 deletions
diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h
index 68cbbdf..f3a51d6 100644
--- a/src/ivi-compositor.h
+++ b/src/ivi-compositor.h
@@ -63,6 +63,10 @@ struct ivi_compositor {
struct wl_global *agl_shell;
struct {
+ int activate_apps_by_default; /* switches once xdg top level has been 'created' */
+ } quirks;
+
+ struct {
struct wl_client *client;
struct wl_resource *resource;
bool ready;
diff --git a/src/layout.c b/src/layout.c
index 030e8b4..106f6fb 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -196,6 +196,20 @@ ivi_layout_activate_complete(struct ivi_output *output,
surf->desktop.pending_output = NULL;
}
+static struct ivi_output *
+ivi_layout_find_bg_output(struct ivi_compositor *ivi)
+{
+ struct ivi_output *out;
+
+ wl_list_for_each(out, &ivi->outputs, link) {
+ if (out->background &&
+ out->background->role == IVI_SURFACE_ROLE_BACKGROUND)
+ return out;
+ }
+
+ return NULL;
+}
+
void
ivi_layout_desktop_committed(struct ivi_surface *surf)
{
@@ -206,8 +220,27 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
assert(surf->role == IVI_SURFACE_ROLE_DESKTOP);
output = surf->desktop.pending_output;
- if (!output)
+ if (!output) {
+ struct ivi_output *ivi_bg_output;
+
+ /* FIXME: This should be changed to determine if the policy
+ * database allows that to happen */
+ if (!surf->ivi->quirks.activate_apps_by_default)
+ return;
+
+ ivi_bg_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)
+ ivi_layout_activate(ivi_bg_output, app_id);
+ }
+
return;
+ }
if (!weston_desktop_surface_get_maximized(dsurf) ||
geom.width != output->area.width ||
diff --git a/src/main.c b/src/main.c
index eefdc19..240fb77 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1088,6 +1088,20 @@ usage(int error_code)
exit(error_code);
}
+static void
+ivi_compositor_get_quirks(struct ivi_compositor *ivi)
+{
+ struct weston_config_section *section;
+
+ if (!ivi->config)
+ return;
+
+ section = weston_config_get_section(ivi->config, "shell", NULL, NULL);
+ weston_config_section_get_bool(section, "activate-by-default",
+ &ivi->quirks.activate_apps_by_default, 0);
+
+}
+
int main(int argc, char *argv[])
{
struct ivi_compositor ivi = { 0 };
@@ -1146,6 +1160,8 @@ int main(int argc, char *argv[])
backend = choose_default_backend();
}
+ ivi_compositor_get_quirks(&ivi);
+
display = wl_display_create();
loop = wl_display_get_event_loop(display);