if (e_comp_wl_subsurface_order_commit(ec))
{
- e_comp_wl_subsurface_restack(ec);
- e_comp_wl_subsurface_restack_bg_rectangle(ec);
+ E_Client *topmost = e_comp_wl_topmost_parent_get(ec);
+ e_comp_wl_subsurface_restack(topmost);
+ e_comp_wl_subsurface_restack_bg_rectangle(topmost);
}
if (!e_pixmap_usable_get(ec->pixmap))
static Eina_Bool
_e_comp_wl_subsurface_order_commit(E_Client *ec)
{
- E_Client *subc;
+ E_Client *subc, *epc;
Eina_List *l;
+ Eina_Bool need_restack = EINA_FALSE;
if (!ec->comp_data) return EINA_FALSE;
- if (!ec->comp_data->sub.list_changed)
- return EINA_FALSE;
+ if (ec->comp_data->sub.data && (epc = ec->comp_data->sub.data->parent))
+ if (epc->comp_data->sub.list_changed)
+ need_restack = _e_comp_wl_subsurface_order_commit(epc);
+ if (!ec->comp_data->sub.list_changed) return (EINA_FALSE | need_restack);
ec->comp_data->sub.list_changed = EINA_FALSE;
/* TODO: need to check more complicated subsurface tree */
if (_e_comp_wl_subsurface_order_commit(ec))
{
- _e_comp_wl_subsurface_restack(ec);
- _e_comp_wl_subsurface_restack_bg_rectangle(ec);
+ E_Client *topmost = e_comp_wl_topmost_parent_get(ec);
+ _e_comp_wl_subsurface_restack(topmost);
+ _e_comp_wl_subsurface_restack_bg_rectangle(topmost);
}
sdata->cached.has_data = EINA_FALSE;
EINTERN void
e_comp_wl_subsurface_restack(E_Client *ec)
{
+ E_Client *topmost;
+
EINA_SAFETY_ON_NULL_RETURN(ec);
+ topmost = e_comp_wl_topmost_parent_get(ec);
+ if (topmost != ec)
+ {
+ ELOGF("SUB-COMP",
+ "WARN: This API is only for topmost parent, not sub-surface.",
+ ec);
+ return;
+ }
+
_e_comp_wl_subsurface_restack(ec);
}