else
ecore_animator_freeze(e_comp->render_animator);
DBG("UPDATE ALL");
- if (e_comp->nocomp) goto nocomp;
+ if (e_comp->nocomp || e_comp->selcomp) goto hwcompose;
if (conf->grab && (!e_comp->grabbed))
{
if (e_comp->grab_cb) e_comp->grab_cb();
}
if (e_comp->updates && (!e_comp->update_job))
ecore_animator_thaw(e_comp->render_animator);
-nocomp:
+
+hwcompose:
// TO DO :
// query if selective HWC plane can be used
if (!e_comp_gl_get() && !e_comp->hwc)
{
if (e_comp->nocomp && e_comp->nocomp_ec)
{
- if (ec != e_comp->nocomp_ec)
+ if (!e_comp_is_on_overlay(ec))
e_comp_nocomp_end("_e_comp_cb_update : nocomp_ec != ec");
}
else if ((!e_comp->nocomp) && (!e_comp->nocomp_override))
else
_e_comp_hooks_delete++;
}
+
+EINTERN Eina_Bool
+e_comp_is_on_overlay(E_Client *ec)
+{
+ if (!ec) return EINA_FALSE;
+ if (e_comp->nocomp)
+ {
+ return e_comp->nocomp_ec == ec;
+ }
+ else if (e_comp->selcomp)
+ {
+ Eina_List *l, *ll;
+ E_Output_Screen * screen;
+ E_Plane *ep;
+
+ if (!ec->zone) return EINA_FALSE;
+ screen = ec->zone->screen;
+ EINA_LIST_FOREACH_SAFE(screen->planes, l, ll, ep)
+ {
+ E_Client *overlay_ec = ep->ec;
+ if (overlay_ec == ec) return EINA_TRUE;
+ }
+ }
+ return EINA_FALSE;
+}
E_API E_Comp_Hook *e_comp_hook_add(E_Comp_Hook_Point hookpoint, E_Comp_Hook_Cb func, const void *data);
E_API void e_comp_hook_del(E_Comp_Hook *ph);
+EINTERN Eina_Bool e_comp_is_on_overlay(E_Client *ec);
+
#endif
#endif
evas_object_smart_callback_call(cw->smart_obj, "visibility_force", cw->ec);
cw->force_visible++;
- if (e_comp->hwc && e_comp->nocomp_ec != cw->ec)
+ if (e_comp->hwc && !e_comp_is_on_overlay(cw->ec))
e_comp_nocomp_end(__FUNCTION__);
}
evas_object_lower(obj);
evas_object_data_del(obj, "client_restack");
if (!cw->visible) goto end;
- if (e_comp->hwc &&e_comp->nocomp_ec == cw->ec) e_comp_nocomp_end(__FUNCTION__);
+ if (e_comp->hwc && e_comp_is_on_overlay(cw->ec)) e_comp_nocomp_end(__FUNCTION__);
e_comp_render_queue();
e_comp_shape_queue();
_e_comp_object_transform_bg_stack_update(obj);
e_client_raise_latest_set(cw->ec); //modify raise list if necessary
}
if (!cw->visible) goto end;
- if (e_comp->hwc &&e_comp->nocomp_ec != cw->ec)
+ if (e_comp->hwc && !e_comp_is_on_overlay(cw->ec))
e_comp_nocomp_end(__FUNCTION__);
e_comp_render_queue();
e_comp_shape_queue();
e_comp_object_effect_set(obj, NULL);
}
}
- if (e_comp->hwc &&e_comp->nocomp_ec == cw->ec) e_comp_nocomp_end(__FUNCTION__);
+ if (e_comp->hwc && e_comp_is_on_overlay(cw->ec)) e_comp_nocomp_end(__FUNCTION__);
if (cw->animating) return;
/* if we have no animations running, go ahead and hide */
cw->defer_hide = 0;