summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2020-03-26 23:24:48 +0200
committerMarius Vlad <marius.vlad@collabora.com>2020-04-14 13:00:56 +0300
commitfcd71e034d378921e0408a69dedcd8d0f4836401 (patch)
treebd2cde9b4781ceac61624c503074c08332fa8088
parent1ee1bff64338dede1f72981a6f3787718ce47335 (diff)
layout: Mark activated surface by default
Necessary to avoid client surfaces that continuously update their contents (i.e., a video) to effectively nullify a valid activate_app request, causing a short flip for the new client surfaces, but resume back once the first surface updated its contents. Bug-AGL: SPEC-3297 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Change-Id: I450dc58d2fa0202f42b7ab58216db98a1bbbf178
-rw-r--r--src/desktop.c1
-rw-r--r--src/ivi-compositor.h1
-rw-r--r--src/layout.c9
3 files changed, 10 insertions, 1 deletions
diff --git a/src/desktop.c b/src/desktop.c
index da28fc6..3e36415 100644
--- a/src/desktop.c
+++ b/src/desktop.c
@@ -80,6 +80,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata)
surface->ivi = ivi;
surface->dsurface = dsurface;
surface->role = IVI_SURFACE_ROLE_NONE;
+ surface->activated_by_default = false;
if (ivi->policy && ivi->policy->api.surface_create &&
!ivi->policy->api.surface_create(surface, ivi)) {
diff --git a/src/ivi-compositor.h b/src/ivi-compositor.h
index 4da12bc..dab9fa6 100644
--- a/src/ivi-compositor.h
+++ b/src/ivi-compositor.h
@@ -170,6 +170,7 @@ struct ivi_surface {
int32_t x, y;
int32_t width, height;
} pending;
+ bool activated_by_default;
enum ivi_surface_role role;
union {
diff --git a/src/layout.c b/src/layout.c
index 94327c4..9537034 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -251,7 +251,12 @@ ivi_layout_desktop_committed(struct ivi_surface *surf)
if (!surf->ivi->quirks.activate_apps_by_default)
return;
+
skip_config_check:
+ /* we can only activate it again by using the protocol */
+ if (surf->activated_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
@@ -259,8 +264,10 @@ skip_config_check:
if (surf->view && ivi_bg_output) {
const char *app_id =
weston_desktop_surface_get_app_id(dsurf);
- if (app_id && ivi_bg_output)
+ if (app_id && ivi_bg_output) {
ivi_layout_activate(ivi_bg_output, app_id);
+ surf->activated_by_default = true;
+ }
}
return;