We are missing the activate_by_default hooks for split, pop-up and and
fullscreen roles. Part of that is due to the fact that these roles are
handled a bit differently that the remote and desktop roles.
Note, these hooks are different than the commit ones -- which are
'installed' a bit earlier. This means that there was still a possiblity
one might've used that hook to retrieve the surface role for instance,
and act accordingly.
Also, note that we allow for pop-up/dialogs be activated by using the
deliberate 'activate' request, which allows one to customize the policy
to deny certain pop-up/dialogs to be activated by default, but allow do
so explictly when using the 'activate' request.
Bug-AGL: SPEC-3494
Reported-by: Scott Murray <scott.murray@konsulko.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Change-Id: I634bbb5915e65880c1d47363cf6dae529feac9d2
ivi_layout_fullscreen_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
ivi_layout_fullscreen_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
+ struct ivi_policy *policy = ivi->policy;
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
struct weston_view *view = surface->view;
struct weston_geometry geom;
struct weston_view *view = surface->view;
struct weston_geometry geom;
+ if (policy && policy->api.surface_activate_by_default &&
+ !policy->api.surface_activate_by_default(surface, surface->ivi) &&
+ !surface->activated_by_default)
+ return;
+
if (surface->view->is_mapped)
return;
if (surface->view->is_mapped)
return;
ivi_layout_split_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
ivi_layout_split_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
+ struct ivi_policy *policy = ivi->policy;
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
x = woutput->x;
y = woutput->y;
x = woutput->x;
y = woutput->y;
+ if (policy && policy->api.surface_activate_by_default &&
+ !policy->api.surface_activate_by_default(surface, surface->ivi) &&
+ !surface->activated_by_default)
+ return;
+
if (surface->view->is_mapped)
return;
if (surface->view->is_mapped)
return;
ivi_layout_popup_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
ivi_layout_popup_committed(struct ivi_surface *surface)
{
struct ivi_compositor *ivi = surface->ivi;
+ struct ivi_policy *policy = ivi->policy;
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
struct weston_desktop_surface *dsurface = surface->dsurface;
struct weston_surface *wsurface =
struct weston_view *view = surface->view;
struct weston_view *view = surface->view;
+ if (policy && policy->api.surface_activate_by_default &&
+ !policy->api.surface_activate_by_default(surface, surface->ivi) &&
+ !surface->activated_by_default)
+ return;
+
if (surface->view->is_mapped)
return;
if (surface->view->is_mapped)
return;
view->is_mapped = false;
}
view->is_mapped = false;
}
+ /* reset the activate by default in order to (still) allow the surface
+ * to be activaved using the request */
+ if (!surface->activated_by_default)
+ surface->activated_by_default = true;
+
ivi_layout_popup_committed(surface);
}
ivi_layout_popup_committed(surface);
}
surf->role != IVI_SURFACE_ROLE_FULLSCREEN)
return false;
surf->role != IVI_SURFACE_ROLE_FULLSCREEN)
return false;
+ /* reset the activate by default in order to (still) allow the surface
+ * to be activaved using the request */
+ if (!surf->activated_by_default)
+ surf->activated_by_default = true;
+
wl_list_for_each(is, &ivi->surfaces, link)
if (is == surf)
return true;
wl_list_for_each(is, &ivi->surfaces, link)
if (is == surf)
return true;