static struct wl_global *global = NULL;
static Eina_List *hooks = NULL;
+static Eina_Bool _e_comp_wl_subsurface_circular_reference_check(E_Client *ec, E_Client *parent);
+
static void
_e_comp_wl_subsurface_restack_bg_rectangle(E_Client *ec)
{
return EINA_FALSE;
}
+static Eina_Bool
+_e_comp_wl_subsurface_circular_reference_check(E_Client *ec, E_Client *parent)
+{
+ while(parent)
+ {
+ if (ec == parent)
+ return EINA_TRUE;
+
+ if ((parent->comp_data) && (parent->comp_data->sub.data))
+ parent = parent->comp_data->sub.data->parent;
+ else
+ break;
+ }
+
+ return EINA_FALSE;
+}
+
EINTERN Eina_Bool
e_comp_wl_subsurfaces_init(E_Comp_Wl_Data *wl_comp)
{
}
// check parent relationship is a cycle
+ if (_e_comp_wl_subsurface_circular_reference_check(ec, epc))
{
- E_Client *parent = epc;
-
- while(parent)
- {
- if (ec == parent)
- {
- ERR("Subsurface parent relationship is a cycle : [child win : %zx, %s], [parent win : %zx, %s]",
- e_client_util_win_get(ec), e_client_util_name_get(ec),
- e_client_util_win_get(epc), e_client_util_name_get(epc));
-
- return EINA_FALSE;
- }
-
- if ((parent->comp_data) && (parent->comp_data->sub.data))
- parent = parent->comp_data->sub.data->parent;
- else
- break;
- }
+ ERR("Subsurface parent relationship is a cycle : [child win : %zx, %s], [parent win : %zx, %s]",
+ e_client_util_win_get(ec), e_client_util_name_get(ec),
+ e_client_util_win_get(epc), e_client_util_name_get(epc));
+ return EINA_FALSE;
}
/* try to allocate subsurface data */