/* set reference to pixmap so we can fetch it later */
wl_resource_set_user_data(res, ep);
+ E_Comp_Wl_Client_Data *cdata = e_pixmap_cdata_get(ep);
+ cdata->wl_surface = res;
+
/* emit surface create signal */
wl_signal_emit(&comp->wl_comp_data->signals.surface.create, res);
}
/* add this client to the hash */
/* eina_hash_add(clients_win_hash, &win, ec); */
e_hints_client_list_set();
+
+ E_Comp_Wl_Client_Data *cdata = e_pixmap_cdata_get(ec->pixmap);
+ struct wl_resource *wl_resource = cdata->wl_surface;
+ ec->comp_data->scaler = cdata->scaler;
+ e_pixmap_cdata_set(ec->pixmap, ec->comp_data);
+ _e_comp_wl_surface_cb_commit(NULL, wl_resource);
}
static void
struct _E_Comp_Wl_Client_Data
{
+ struct wl_resource *wl_surface;
+
Ecore_Timer *first_draw_tmr;
struct
struct wl_listener buffer_destroy_listener;
void *data;
Eina_Rectangle opaque;
+
+ E_Comp_Wl_Client_Data *cdata;
#endif
Eina_Bool usable : 1;
cp->w = cp->h = 0;
cp->refcount = 1;
cp->dirty = 1;
+ cp->cdata = calloc(1, sizeof(E_Comp_Wl_Client_Data));
return cp;
}
if (h) *h = 0;
#endif
}
+
+EAPI E_Comp_Client_Data *
+e_pixmap_cdata_get(E_Pixmap *cp)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(cp, NULL);
+ return (E_Comp_Client_Data*)cp->cdata;
+}
+
+EAPI void
+e_pixmap_cdata_set(E_Pixmap *cp, E_Comp_Client_Data *cdata)
+{
+ EINA_SAFETY_ON_NULL_RETURN(cp);
+ EINA_SAFETY_ON_NULL_RETURN(cdata);
+ free (cp->cdata);
+ cp->cdata = (E_Comp_Wl_Client_Data*)cdata;
+}
EAPI E_Pixmap *e_pixmap_new(E_Pixmap_Type type, ...);
EAPI E_Pixmap_Type e_pixmap_type_get(const E_Pixmap *cp);
EAPI void *e_pixmap_resource_get(E_Pixmap *cp);
+EAPI E_Comp_Client_Data *e_pixmap_cdata_get(E_Pixmap *cp);
+EAPI void e_pixmap_cdata_set(E_Pixmap *cp, E_Comp_Client_Data *cdata);
EAPI void e_pixmap_resource_set(E_Pixmap *cp, void *resource);
EAPI void e_pixmap_parent_window_set(E_Pixmap *cp, Ecore_Window win);
EAPI void e_pixmap_visual_cmap_set(E_Pixmap *cp, void *visual, unsigned int cmap);
{
int version = wl_resource_get_version(scaler);
E_Pixmap *ep;
- E_Client *ec;
struct wl_resource *res;
E_Comp_Client_Data *cdata;
if (!(ep = wl_resource_get_user_data(surface_resource))) return;
- if (!(ec = e_pixmap_client_get(ep))) return;
- if (e_object_is_del(E_OBJECT(ec))) return;
- if (!(cdata = ec->comp_data)) return;
+ if (!(cdata = e_pixmap_cdata_get(ep))) return;
if (cdata->scaler.viewport)
{