static Eina_Bool _e_comp_wl_subsurface_circular_reference_check(E_Client *ec, E_Client *parent);
static void _e_comp_wl_subsurface_invalid_parent_handle(E_Client *ec, struct wl_resource *resource);
+static void _e_comp_wl_subsurface_parent_commit(E_Client *ec, Eina_Bool parent_synchronized);
+static Eina_Bool _e_comp_wl_subsurface_synchronized_get(E_Comp_Wl_Subsurf_Data *sdata);
+static void _e_comp_wl_subsurface_synchronized_commit(E_Client *ec);
static void
_e_comp_wl_subsurface_restack_bg_rectangle(E_Client *ec)
}
static void
+_e_comp_wl_subsurface_synchronized_commit(E_Client *ec)
+{
+ E_Comp_Wl_Subsurf_Data *sdata;
+ E_Client *subc;
+ Eina_List *l;
+
+ sdata = ec->comp_data->sub.data;
+
+ if (sdata->cached.has_data)
+ _e_comp_wl_subsurface_commit_from_cache(ec);
+
+ EINA_LIST_FOREACH(ec->comp_data->sub.list, l, subc)
+ {
+ if (ec != subc)
+ _e_comp_wl_subsurface_parent_commit(subc, EINA_TRUE);
+ }
+ EINA_LIST_FOREACH(ec->comp_data->sub.below_list, l, subc)
+ {
+ if (ec != subc)
+ _e_comp_wl_subsurface_parent_commit(subc, EINA_TRUE);
+ }
+}
+
+static void
_e_comp_wl_subsurface_parent_commit(E_Client *ec, Eina_Bool parent_synchronized)
{
E_Client *parent;
}
if ((parent_synchronized) || (sdata->synchronized))
- {
- E_Client *subc;
- Eina_List *l;
-
- if (sdata->cached.has_data)
- _e_comp_wl_subsurface_commit_from_cache(ec);
-
- EINA_LIST_FOREACH(ec->comp_data->sub.list, l, subc)
- {
- if (ec != subc)
- _e_comp_wl_subsurface_parent_commit(subc, EINA_TRUE);
- }
- EINA_LIST_FOREACH(ec->comp_data->sub.below_list, l, subc)
- {
- if (ec != subc)
- _e_comp_wl_subsurface_parent_commit(subc, EINA_TRUE);
- }
- }
+ _e_comp_wl_subsurface_synchronized_commit(ec);
}
static void
if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
if (!(sdata = ec->comp_data->sub.data)) return;
- sdata->synchronized = EINA_FALSE;
+ if (sdata->synchronized)
+ {
+ sdata->synchronized = EINA_FALSE;
+
+ if (!_e_comp_wl_subsurface_synchronized_get(sdata))
+ _e_comp_wl_subsurface_synchronized_commit(ec);
+ }
}
static const struct wl_subsurface_interface _e_subsurface_interface =