static void
_e_comp_wl_subsurface_cb_position_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, int32_t x, int32_t y)
{
- E_Client *ec;
- E_Comp_Wl_Subsurf_Data *sdata;
+ E_Subsurface *sub;
DBG("Subsurface Cb Position Set: %d", wl_resource_get_id(resource));
- ec = wl_resource_get_user_data(resource);
-
- if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
-
- sdata = _e_comp_wl_subsurface_data_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(sdata);
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
+ return;
- sdata->position.x = x;
- sdata->position.y = y;
- sdata->position.set = EINA_TRUE;
+ sub->base.position.x = x;
+ sub->base.position.y = y;
+ sub->base.position.set = EINA_TRUE;
}
static Eina_Bool
static void
_e_comp_wl_subsurface_cb_place_above(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *sibling_resource)
{
- E_Client *ec, *ecs;
+ E_Subsurface *sub;
+ E_Client *ecs;
E_Client *parent;
DBG("Subsurface Cb Place Above: %d", wl_resource_get_id(resource));
- ec = wl_resource_get_user_data(resource);
-
- if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
- if (!ec->comp_data->sub.data) return;
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
+ return;
- if (!(parent = ec->comp_data->sub.data->parent)) return;
+ if (!(parent = sub->base.parent)) return;
if (e_object_is_del(E_OBJECT(parent)) || !parent->comp_data) return;
/* try to get the client from the sibling resource */
if (!(ecs = wl_resource_get_user_data(sibling_resource))) return;
- if (!_subsurface_sibling_check(ec, ecs))
+ if (!_subsurface_sibling_check(sub->ec, ecs))
{
- wl_resource_post_error(ec->comp_data->sub.data->resource,
+ wl_resource_post_error(sub->base.resource,
WL_SUBSURFACE_ERROR_BAD_SURFACE,
"%s: wl_surface@%d is not a parent or sibling",
"place_above", wl_resource_get_id(ecs->comp_data->surface));
return;
}
- _e_comp_wl_subsurface_place_above(parent, ec, ecs);
+ _e_comp_wl_subsurface_place_above(parent, sub->ec, ecs);
}
static void
_e_comp_wl_subsurface_cb_place_below(struct wl_client *client EINA_UNUSED, struct wl_resource *resource, struct wl_resource *sibling_resource)
{
- E_Client *ec, *ecs;
+ E_Subsurface *sub;
+ E_Client *ecs;
E_Client *parent;
DBG("Subsurface Cb Place Below: %d", wl_resource_get_id(resource));
- ec = wl_resource_get_user_data(resource);
-
- if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
- if (!ec->comp_data->sub.data) return;
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
+ return;
- if (!(parent = ec->comp_data->sub.data->parent)) return;
+ if (!(parent = sub->base.parent)) return;
if (e_object_is_del(E_OBJECT(parent)) || !parent->comp_data) return;
/* try to get the client from the sibling resource */
if (!(ecs = wl_resource_get_user_data(sibling_resource))) return;
- if (!_subsurface_sibling_check(ec, ecs))
+ if (!_subsurface_sibling_check(sub->ec, ecs))
{
- wl_resource_post_error(ec->comp_data->sub.data->resource,
+ wl_resource_post_error(sub->base.resource,
WL_SUBSURFACE_ERROR_BAD_SURFACE,
"%s: wl_surface@%d is not a parent or sibling",
"place_below", wl_resource_get_id(ecs->comp_data->surface));
return;
}
- _e_comp_wl_subsurface_place_below(parent, ec, ecs);
+ _e_comp_wl_subsurface_place_below(parent, sub->ec, ecs);
}
static void
_e_comp_wl_subsurface_cb_sync_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
{
- E_Client *ec;
- E_Comp_Wl_Subsurf_Data *sdata;
+ E_Subsurface *sub;
DBG("Subsurface Cb Sync Set: %d", wl_resource_get_id(resource));
- ec = wl_resource_get_user_data(resource);
-
- if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
-
- sdata = _e_comp_wl_subsurface_data_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(sdata);
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
+ return;
- sdata->synchronized = EINA_TRUE;
+ sub->base.synchronized = EINA_TRUE;
}
static void
_e_comp_wl_subsurface_cb_desync_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
{
- E_Client *ec;
- E_Comp_Wl_Subsurf_Data *sdata;
+ E_Subsurface *sub;
DBG("Subsurface Cb Desync Set: %d", wl_resource_get_id(resource));
- ec = wl_resource_get_user_data(resource);
-
- if (e_object_is_del(E_OBJECT(ec)) || !ec->comp_data) return;
-
- sdata = _e_comp_wl_subsurface_data_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(sdata);
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
+ return;
- if (sdata->synchronized)
+ if (sub->base.synchronized)
{
- sdata->synchronized = EINA_FALSE;
+ sub->base.synchronized = EINA_FALSE;
- if (!_e_comp_wl_subsurface_synchronized_get(sdata))
- _e_comp_wl_subsurface_synchronized_commit(ec);
+ if (!_e_comp_wl_subsurface_synchronized_get(&sub->base))
+ _e_comp_wl_subsurface_synchronized_commit(sub->ec);
}
}
static void
_e_comp_wl_subsurface_cb_resource_destroy(struct wl_resource *resource)
{
- E_Client *ec = wl_resource_get_user_data(resource);
-
- if (!e_object_unref(E_OBJECT(ec))) return;
- if (e_object_is_del(E_OBJECT(ec))) return;
+ E_Subsurface *sub;
- if (!ec->comp_data->sub.data)
+ sub = wl_resource_get_user_data(resource);
+ if (!sub)
return;
- _e_comp_wl_subsurface_destroy((E_Subsurface *)ec->comp_data->sub.data);
+ _e_comp_wl_subsurface_destroy(sub);
}
static Eina_Bool
sub->base.resource = res;
/* set resource implementation */
- wl_resource_set_implementation(res, &_e_subsurface_interface, ec,
+ wl_resource_set_implementation(res, &_e_subsurface_interface, sub,
_e_comp_wl_subsurface_cb_resource_destroy);
_e_comp_wl_subsurface_ec_link(sub, ec);
EINTERN void
e_comp_wl_subsurface_resource_stand_alone_mode_set(struct wl_resource *subsurface_resource)
{
- E_Client *ec;
+ E_Subsurface *sub;
EINA_SAFETY_ON_FALSE_RETURN(wl_resource_instance_of(subsurface_resource,
&wl_subsurface_interface,
&_e_subsurface_interface));
- ec = wl_resource_get_user_data(subsurface_resource);
- EINA_SAFETY_ON_NULL_RETURN(ec);
- EINA_SAFETY_ON_FALSE_RETURN(e_comp_wl_subsurface_check(ec));
+ sub = wl_resource_get_user_data(subsurface_resource);
+ EINA_SAFETY_ON_NULL_RETURN(sub);
- ELOGF("SUBSURFACE", "SUBSURF|STAND_ALONE", ec);
- if (ec->comp_data->sub.data)
- ec->comp_data->sub.data->stand_alone = EINA_TRUE;
+ ELOGF("SUBSURFACE", "SUBSURF|STAND_ALONE", sub->ec);
+ sub->base.stand_alone = EINA_TRUE;
}
EINTERN Eina_Bool
EINTERN void
e_comp_wl_subsurface_resource_place_below_parent(struct wl_resource *subsurface_resource)
{
- E_Client *ec;
- E_Client *epc;
+ E_Subsurface *sub;
E_Comp_Wl_Client_Data *epc_cdata;
EINA_SAFETY_ON_FALSE_RETURN(wl_resource_instance_of(subsurface_resource,
&wl_subsurface_interface,
&_e_subsurface_interface));
- ec = wl_resource_get_user_data(subsurface_resource);
- EINA_SAFETY_ON_NULL_RETURN(ec);
- EINA_SAFETY_ON_FALSE_RETURN(e_comp_wl_subsurface_check(ec));
+ sub = wl_resource_get_user_data(subsurface_resource);
+ EINA_SAFETY_ON_NULL_RETURN(sub);
- epc = e_comp_wl_subsurface_parent_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(epc);
- epc_cdata = e_client_cdata_get(epc);
+ EINA_SAFETY_ON_NULL_RETURN(sub->base.parent);
+ epc_cdata = e_client_cdata_get(sub->base.parent);
EINA_SAFETY_ON_NULL_RETURN(epc_cdata);
- ELOGF("SUBSURFACE", "SUBSURF|BELOW_PARENT", ec);
- epc_cdata->sub.list = eina_list_remove(epc_cdata->sub.list, ec);
- epc_cdata->sub.list_pending = eina_list_remove(epc_cdata->sub.list_pending, ec);
- epc_cdata->sub.below_list = eina_list_remove(epc_cdata->sub.below_list, ec);
- epc_cdata->sub.below_list_pending = eina_list_remove(epc_cdata->sub.below_list_pending, ec);
+ ELOGF("SUBSURFACE", "SUBSURF|BELOW_PARENT", sub->ec);
+ epc_cdata->sub.list = eina_list_remove(epc_cdata->sub.list, sub->ec);
+ epc_cdata->sub.list_pending = eina_list_remove(epc_cdata->sub.list_pending, sub->ec);
+ epc_cdata->sub.below_list = eina_list_remove(epc_cdata->sub.below_list, sub->ec);
+ epc_cdata->sub.below_list_pending = eina_list_remove(epc_cdata->sub.below_list_pending, sub->ec);
- epc_cdata->sub.below_list_pending = eina_list_append(epc_cdata->sub.below_list_pending, ec);
- epc_cdata->sub.below_list = eina_list_append(epc_cdata->sub.below_list, ec);
+ epc_cdata->sub.below_list_pending = eina_list_append(epc_cdata->sub.below_list_pending, sub->ec);
+ epc_cdata->sub.below_list = eina_list_append(epc_cdata->sub.below_list, sub->ec);
epc_cdata->sub.list_changed = EINA_TRUE;
}
ELOGF("SUBSURFACE", "The comp_data of E_Client is deleted", ec);
+ wl_resource_set_user_data(sub->base.resource, NULL);
+
_e_comp_wl_subsurface_destroy(sub);
}
ec->comp_data->surface = ec->comp_data->wl_surface;
ec->comp_data->sub.data = &sub->base;
- e_object_ref(E_OBJECT(ec));
e_comp_wl_surface_state_init(&sub->base.cached, ec->w, ec->h);
/* set subsurface client properties */