{
E_Comp_Wl_Remote_Surface *remote_surface;
const char *msg;
+ Eina_List *l;
+ Eina_Bool bind = EINA_FALSE;
EINA_SAFETY_ON_NULL_RETURN(common);
- if (eina_list_count(common->surfaces) != 1)
+ EINA_LIST_FOREACH(common->surfaces, l, remote_surface)
{
- msg = "remote surface count = 0 or over 1";
- goto ignore;
+ if (!remote_surface) continue;
+
+ if (remote_surface->bind_ec)
+ bind = EINA_TRUE;
+
+ if (remote_surface->redirect && !remote_surface->bind_ec)
+ {
+ msg = "remote surface redirect and not bind";
+ goto ignore;
+ }
}
- remote_surface = eina_list_nth(common->surfaces, 0);
- if (remote_surface && remote_surface->bind_ec)
+ if (bind)
{
- msg = "1 binding remote surface";
+ msg = "remote surface bind";
goto no_ignore;
}
if (source->offscreen_ref == 1)
{
- _remote_surface_ignore_output_transform_send(&source->common);
source->common.is_offscreen = EINA_TRUE;
+ _remote_surface_ignore_output_transform_send(&source->common);
source->common.ec->exp_iconify.not_raise = 1;
if (!source->common.ec->exp_iconify.by_client)
if (source->offscreen_ref == 0)
{
- _remote_surface_ignore_output_transform_send(&source->common);
source->common.is_offscreen = EINA_FALSE;
+ _remote_surface_ignore_output_transform_send(&source->common);
source->common.ec->exp_iconify.skip_by_remote = 0;
EC_CHANGED(source->common.ec);
}
remote_surface->provider, remote_surface->provider->common.ec);
remote_surface->redirect = EINA_TRUE;
+ _remote_surface_ignore_output_transform_send(&remote_surface->provider->common);
/* Send input event filter of provider */
if ((remote_surface->provider->input_event_filter) &&
return;
remote_surface->redirect = EINA_TRUE;
+ _remote_surface_ignore_output_transform_send(&remote_surface->source->common);
buffer = _remote_surface_comp_wl_buffer_get(remote_surface->source->common.ec);
tbm_surface = _remote_surface_get_tbm_surface_from_ns(remote_surface->source->common.ec);
EINA_SAFETY_ON_FALSE_RETURN(remote_surface->valid);
remote_surface->redirect = EINA_FALSE;
+ if (remote_surface->provider)
+ _remote_surface_ignore_output_transform_send(&remote_surface->provider->common);
+ else if (remote_surface->source)
+ _remote_surface_ignore_output_transform_send(&remote_surface->source->common);
RSMINF("Unredirect surface provider:%p(ec:%p)",
remote_surface->ec, "SURFACE", remote_surface,