fix pointer for stupid X11...but this breaks pointers in wayland (for

now) :(

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2014-08-28 11:10:07 -04:00
parent 6440aa513f
commit 63b5da69f0
1 changed files with 236 additions and 138 deletions

View File

@ -11,11 +11,22 @@ struct _E_Pointer_Stack
static Eina_List *_hdlrs = NULL;
static Eina_List *_ptrs = NULL;
static inline void
_e_pointer_hot_update(E_Pointer *ptr, int x, int y)
{
if ((ptr->hot.x != x) || (ptr->hot.y != y))
{
ptr->hot.x = x;
ptr->hot.y = y;
ptr->hot.update = EINA_TRUE;
}
}
static void
_e_pointer_active(E_Pointer *ptr)
{
if (!ptr->idle) return;
if (ptr->o_ptr)
if (ptr->o_ptr)
edje_object_signal_emit(ptr->o_ptr, "e,state,mouse,active", "e");
ptr->idle = EINA_FALSE;
}
@ -30,12 +41,13 @@ _e_pointer_idle(E_Pointer *ptr)
}
static Eina_Bool
_e_pointer_cb_idle_poll(void *data)
_e_pointer_cb_idle_poller(void *data)
{
E_Pointer *ptr;
int x = 0, y = 0;
if (!(ptr = data)) return ECORE_CALLBACK_RENEW;
if ((e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM) ||
(!e_config->idle_cursor))
{
@ -43,7 +55,13 @@ _e_pointer_cb_idle_poll(void *data)
return ECORE_CALLBACK_CANCEL;
}
#ifndef HAVE_WAYLAND_ONLY
if (!ptr->canvas)
ecore_x_pointer_xy_get(ptr->win, &x, &y);
#else
ecore_evas_pointer_xy_get(ptr->ee, &x, &y);
#endif
if ((ptr->x != x) || (ptr->y != y))
{
ptr->x = x;
@ -53,6 +71,7 @@ _e_pointer_cb_idle_poll(void *data)
}
if (!ptr->idle) _e_pointer_idle(ptr);
return ECORE_CALLBACK_RENEW;
}
@ -62,20 +81,19 @@ _e_pointer_cb_idle_wait(void *data)
E_Pointer *ptr;
if (!(ptr = data)) return ECORE_CALLBACK_RENEW;
if ((e_powersave_mode_get() >= E_POWERSAVE_MODE_MEDIUM) ||
(!e_config->idle_cursor))
{
E_FREE_FUNC(ptr->idle_poll, ecore_poller_del);
ptr->idle_poll = NULL;
ptr->idle_tmr = NULL;
return ECORE_CALLBACK_CANCEL;
}
if (!ptr->idle_poll)
{
ptr->idle_poll =
ecore_poller_add(ECORE_POLLER_CORE, 64,
_e_pointer_cb_idle_poll, ptr);
}
ptr->idle_poll = ecore_poller_add(ECORE_POLLER_CORE, 64,
_e_pointer_cb_idle_poller, ptr);
ptr->idle_tmr = NULL;
return ECORE_CALLBACK_CANCEL;
@ -87,26 +105,22 @@ _e_pointer_cb_idle_pre(void *data)
E_Pointer *ptr;
if (!(ptr = data)) return ECORE_CALLBACK_RENEW;
#ifndef HAVE_WAYLAND_ONLY
if (!ptr->canvas)
ecore_x_pointer_xy_get(ptr->win, &ptr->x, &ptr->y);
#else
ecore_evas_pointer_xy_get(ptr->ee, &ptr->x, &ptr->y);
#endif
ptr->idle_tmr = ecore_timer_loop_add(4.0, _e_pointer_cb_idle_wait, ptr);
return ECORE_CALLBACK_CANCEL;
}
static Eina_Bool
_e_pointer_cb_idle(void *data)
{
E_Pointer *ptr;
if (!(ptr = data)) return ECORE_CALLBACK_RENEW;
if (e_config->idle_cursor) _e_pointer_idle(ptr);
return EINA_TRUE;
}
static void
_e_pointer_active_handle(E_Pointer *ptr)
{
if (!ptr) return;
_e_pointer_active(ptr);
if (ptr->idle_tmr)
ecore_timer_reset(ptr->idle_tmr);
@ -120,17 +134,6 @@ _e_pointer_active_handle(E_Pointer *ptr)
}
}
static void
_e_pointer_hot_update(E_Pointer *ptr, Evas_Coord x, Evas_Coord y)
{
if ((ptr->hot.x != x) || (ptr->hot.y != y))
{
ptr->hot.x = x;
ptr->hot.y = y;
ptr->hot.update = EINA_TRUE;
}
}
static Eina_Bool
_e_pointer_cb_mouse_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED)
{
@ -211,10 +214,9 @@ static void
_e_pointer_cb_hot_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
E_Pointer *ptr;
Evas_Coord x = 0, y = 0;
int x = 0, y = 0;
if (!(ptr = data)) return;
if (!e_config->show_cursor) return;
if (!ptr->e_cursor) return;
if (!evas_object_visible_get(ptr->o_ptr)) return;
edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot",
@ -223,17 +225,107 @@ _e_pointer_cb_hot_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA
}
static void
_e_pointer_cb_hot_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED)
_e_pointer_cb_hot_show(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
E_Pointer *ptr;
Evas_Coord x = 0, y = 0;
int x = 0, y = 0;
if (!(ptr = data)) return;
edje_object_part_geometry_get(obj, "e.swallow.hotspot",
edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot",
&x, &y, NULL, NULL);
_e_pointer_hot_update(ptr, x, y);
}
static void
_e_pointer_canvas_del(E_Pointer *ptr)
{
E_FREE_FUNC(ptr->o_hot, evas_object_del);
E_FREE_FUNC(ptr->o_ptr, evas_object_del);
if (ptr->evas) evas_free(ptr->evas);
ptr->evas = NULL;
E_FREE(ptr->pixels);
}
static void
_e_pointer_canvas_add(E_Pointer *ptr)
{
Evas_Engine_Info_Buffer *einfo;
int method = 0;
/* try to create new canvas */
if (!(ptr->evas = evas_new())) goto err;
method = evas_render_method_lookup("buffer");
evas_output_method_set(ptr->evas, method);
evas_output_size_set(ptr->evas, ptr->w, ptr->h);
evas_output_viewport_set(ptr->evas, 0, 0, ptr->w, ptr->h);
/* try to allocate space for pixels */
if (!(ptr->pixels = malloc(ptr->w * ptr->h * sizeof(int))))
goto err;
/* try to get the buffer engine info */
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ptr->evas);
if (!einfo) goto err;
/* fill in buffer engine info */
einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
einfo->info.dest_buffer = ptr->pixels;
einfo->info.dest_buffer_row_bytes = (ptr->w * sizeof(int));
einfo->info.use_color_key = 0;
einfo->info.alpha_threshold = 0;
einfo->info.func.new_update_region = NULL;
einfo->info.func.free_update_region = NULL;
/* set buffer engine info */
evas_engine_info_set(ptr->evas, (Evas_Engine_Info *)einfo);
/* create pointer object */
ptr->o_ptr = edje_object_add(ptr->evas);
/* create hotspot object */
ptr->o_hot = evas_object_rectangle_add(ptr->evas);
evas_object_color_set(ptr->o_hot, 0, 0, 0, 0);
evas_object_event_callback_add(ptr->o_hot, EVAS_CALLBACK_MOVE,
_e_pointer_cb_hot_move, ptr);
evas_object_event_callback_add(ptr->o_hot, EVAS_CALLBACK_SHOW,
_e_pointer_cb_hot_show, ptr);
evas_object_move(ptr->o_ptr, 0, 0);
evas_object_resize(ptr->o_ptr, ptr->w, ptr->h);
evas_object_show(ptr->o_ptr);
return;
err:
_e_pointer_canvas_del(ptr);
}
static void
_e_pointer_canvas_resize(E_Pointer *ptr, int w, int h)
{
Evas_Engine_Info_Buffer *einfo;
if ((ptr->w == w) && (ptr->h == h)) return;
ptr->w = w;
ptr->h = h;
evas_output_size_set(ptr->evas, w, h);
evas_output_viewport_set(ptr->evas, 0, 0, w, h);
ptr->pixels = realloc(ptr->pixels, (ptr->w * ptr->h * sizeof(int)));
einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(ptr->evas);
EINA_SAFETY_ON_NULL_RETURN(einfo);
einfo->info.dest_buffer = ptr->pixels;
einfo->info.dest_buffer_row_bytes = (ptr->w * sizeof(int));
evas_engine_info_set(ptr->evas, (Evas_Engine_Info *)einfo);
evas_object_move(ptr->o_ptr, 0, 0);
evas_object_resize(ptr->o_ptr, ptr->w, ptr->h);
}
static void
_e_pointer_stack_free(E_Pointer_Stack *stack)
{
@ -246,9 +338,6 @@ _e_pointer_cb_free(E_Pointer *ptr)
{
_ptrs = eina_list_remove(_ptrs, ptr);
E_FREE_FUNC(ptr->o_ptr, evas_object_del);
E_FREE_FUNC(ptr->o_hot, evas_object_del);
E_FREE_LIST(ptr->stack, _e_pointer_stack_free);
if (ptr->type) eina_stringshare_del(ptr->type);
@ -256,19 +345,21 @@ _e_pointer_cb_free(E_Pointer *ptr)
E_FREE_FUNC(ptr->idle_tmr, ecore_timer_del);
E_FREE_FUNC(ptr->idle_poll, ecore_poller_del);
if (!ptr->canvas) _e_pointer_canvas_del(ptr);
E_FREE(ptr);
}
static void
_e_pointer_type_set(E_Pointer *ptr, const char *type)
{
if (!ptr) return;
/* check if pointer type is already set */
if (!e_util_strcmp(ptr->type, type)) return;
eina_stringshare_replace(&ptr->type, type);
if (!e_config->show_cursor)
/* don't show cursor if in hidden mode */
if (!e_config->show_cursor)
{
e_pointer_hide(ptr);
return;
@ -277,85 +368,83 @@ _e_pointer_type_set(E_Pointer *ptr, const char *type)
if (ptr->e_cursor)
{
char cursor[1024];
Evas_Coord x, y;
int x = 0, y = 0;
/* create a pointer canvas if we need to */
if ((!ptr->evas) && (!ptr->canvas)) _e_pointer_canvas_add(ptr);
if (ptr->color)
snprintf(cursor, sizeof(cursor),
snprintf(cursor, sizeof(cursor),
"e/pointer/enlightenment/%s/color", type);
else
snprintf(cursor, sizeof(cursor),
snprintf(cursor, sizeof(cursor),
"e/pointer/enlightenment/%s/mono", type);
/* try to set the edje object theme */
if (!e_theme_edje_object_set(ptr->o_ptr, "base/theme/pointer", cursor))
goto fallback;
edje_object_part_swallow(ptr->o_ptr, "e.swallow.hotspot", ptr->o_hot);
edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot",
&x, &y, NULL, NULL);
edje_object_part_geometry_get(ptr->o_ptr, "e.swallow.hotspot",
&x, &y, NULL, NULL);
_e_pointer_hot_update(ptr, x, y);
evas_object_show(ptr->o_ptr);
// if (ptr->hot.update)
{
/* Layer Max - 32 snarfed from Elm */
ecore_evas_object_cursor_set(ptr->ee, ptr->o_ptr, EVAS_LAYER_MAX,
ptr->hot.x, ptr->hot.y);
/* ptr->hot.update = EINA_FALSE; */
}
if (ptr->canvas)
ecore_evas_object_cursor_set(ptr->ee, ptr->o_ptr, EVAS_LAYER_MAX,
ptr->hot.x, ptr->hot.y);
return;
}
fallback:
WRN("FALLBACK POINTER !!!");
{
if ((ptr->evas) && (!ptr->canvas)) _e_pointer_canvas_del(ptr);
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Cursor cursor = 0;
Ecore_X_Cursor cursor = 0;
if (!strcmp(type, "move"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_FLEUR);
if (!strcmp(type, "move"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_FLEUR);
# if 0
else if (!strcmp(type, "resize"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_SIZING);
else if (!strcmp(type, "resize"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_SIZING);
# endif
else if (!strcmp(type, "resize_tl"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_LEFT_CORNER);
else if (!strcmp(type, "resize_t"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_SIDE);
else if (!strcmp(type, "resize_tr"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_RIGHT_CORNER);
else if (!strcmp(type, "resize_r"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_RIGHT_SIDE);
else if (!strcmp(type, "resize_br"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER);
else if (!strcmp(type, "resize_b"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_SIDE);
else if (!strcmp(type, "resize_bl"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_LEFT_CORNER);
else if (!strcmp(type, "resize_l"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_SIDE);
else if (!strcmp(type, "entry"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_XTERM);
else if (!strcmp(type, "default"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_PTR);
else if (!strcmp(type, "plus"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_PLUS);
else if (!strcmp(type, "hand"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_HAND1);
else if (!strcmp(type, "rotate"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_EXCHANGE);
else
{
WRN("Unknown pointer type: %s\n", type);
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_ARROW);
}
if (!cursor) WRN("X Cursor for %s is missing\n", type);
ecore_x_window_cursor_set(ptr->win, cursor);
if (cursor) ecore_x_cursor_free(cursor);
#endif
else if (!strcmp(type, "resize_tl"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_LEFT_CORNER);
else if (!strcmp(type, "resize_t"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_SIDE);
else if (!strcmp(type, "resize_tr"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_TOP_RIGHT_CORNER);
else if (!strcmp(type, "resize_r"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_RIGHT_SIDE);
else if (!strcmp(type, "resize_br"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_RIGHT_CORNER);
else if (!strcmp(type, "resize_b"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_SIDE);
else if (!strcmp(type, "resize_bl"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_BOTTOM_LEFT_CORNER);
else if (!strcmp(type, "resize_l"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_SIDE);
else if (!strcmp(type, "entry"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_XTERM);
else if (!strcmp(type, "default"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_LEFT_PTR);
else if (!strcmp(type, "plus"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_PLUS);
else if (!strcmp(type, "hand"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_HAND1);
else if (!strcmp(type, "rotate"))
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_EXCHANGE);
else
{
WRN("Unknown pointer type: %s\n", type);
cursor = ecore_x_cursor_shape_get(ECORE_X_CURSOR_ARROW);
}
if (!cursor) WRN("X Cursor for %s is missing\n", type);
ecore_x_window_cursor_set(ptr->win, cursor);
if (cursor) ecore_x_cursor_free(cursor);
#endif
return;
}
@ -370,11 +459,6 @@ e_pointer_init(void)
_e_pointer_cb_mouse_move, NULL);
E_LIST_HANDLER_APPEND(_hdlrs, ECORE_EVENT_MOUSE_WHEEL,
_e_pointer_cb_mouse_wheel, NULL);
#ifndef HAVE_WAYLAND_ONLY
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
#endif
return 1;
}
@ -382,36 +466,33 @@ EINTERN int
e_pointer_shutdown(void)
{
E_FREE_LIST(_hdlrs, ecore_event_handler_del);
return 1;
}
EAPI E_Pointer *
e_pointer_window_new(Ecore_Window win, Eina_Bool filled)
{
WRN("E_Pointer Window New Called !!!");
return NULL;
E_Pointer *ptr;
E_Pointer *ptr = NULL;
E_Comp *comp;
EINA_SAFETY_ON_FALSE_RETURN_VAL(win, NULL);
/* allocate new e_pointer object */
/* allocate space for new pointer */
if (!(ptr = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_cb_free)))
return NULL;
/* set some pointer properties */
/* set default pointer properties */
ptr->w = ptr->h = e_config->cursor_size;
ptr->e_cursor = e_config->use_e_cursor;
ptr->color = EINA_FALSE;
ptr->win = win;
ptr->color = EINA_FALSE;
if ((comp = e_comp_get(NULL)))
{
if (comp->pointer)
ptr->color = comp->pointer->color;
}
/* set pointer default type */
if (filled) e_pointer_type_push(ptr, ptr, "default");
/* append this pointer to the list */
@ -423,30 +504,23 @@ e_pointer_window_new(Ecore_Window win, Eina_Bool filled)
EAPI E_Pointer *
e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled)
{
E_Pointer *ptr;
E_Comp *comp;
E_Pointer *ptr = NULL;
EINA_SAFETY_ON_FALSE_RETURN_VAL(ee, NULL);
/* allocate new e_pointer object */
/* allocate space for new pointer */
if (!(ptr = E_OBJECT_ALLOC(E_Pointer, E_POINTER_TYPE, _e_pointer_cb_free)))
return NULL;
/* set some pointer properties */
ptr->ee = ee;
ptr->e_cursor = e_config->use_e_cursor;
ptr->w = ptr->h = e_config->cursor_size;
ptr->canvas = EINA_TRUE;
ptr->win = ecore_evas_window_get(ee);
/* set default pointer properties */
ptr->color = EINA_TRUE;
if ((comp = e_comp_get(NULL)))
{
if (comp->pointer)
ptr->color = comp->pointer->color;
}
ptr->canvas = EINA_TRUE;
ptr->w = ptr->h = e_config->cursor_size;
ptr->e_cursor = e_config->use_e_cursor;
ptr->ee = ee;
ptr->evas = ecore_evas_get(ee);
ptr->o_ptr = edje_object_add(ptr->evas);
ptr->o_hot = evas_object_rectangle_add(ptr->evas);
@ -461,13 +535,14 @@ e_pointer_canvas_new(Ecore_Evas *ee, Eina_Bool filled)
evas_object_resize(ptr->o_ptr, ptr->w, ptr->h);
evas_object_show(ptr->o_ptr);
/* set pointer default type */
if (filled) e_pointer_type_push(ptr, ptr, "default");
ptr->idle_tmr = ecore_timer_loop_add(4.0, _e_pointer_cb_idle, ptr);
/* append this pointer to the list */
/* append this pointer to the list */
_ptrs = eina_list_append(_ptrs, ptr);
_e_pointer_active_handle(ptr);
return ptr;
}
@ -482,20 +557,26 @@ e_pointers_size_set(int size)
EINA_LIST_FOREACH(_ptrs, l, ptr)
{
if ((ptr->w == size) && (ptr->h == size)) continue;
ptr->w = size;
ptr->h = size;
evas_object_resize(ptr->o_ptr, ptr->w, ptr->h);
if ((ptr->evas) && (!ptr->canvas))
_e_pointer_canvas_resize(ptr, size, size);
else if (ptr->canvas)
evas_object_resize(ptr->o_ptr, size, size);
#ifndef HAVE_WAYLAND_ONLY
ecore_x_cursor_size_set(e_config->cursor_size * 3 / 4);
#endif
}
}
EAPI void
e_pointer_hide(E_Pointer *ptr)
{
if (!ptr) return;
if ((ptr->evas) && (!ptr->canvas))
_e_pointer_canvas_del(ptr);
else if (ptr->canvas)
evas_object_hide(ptr->o_ptr);
#ifndef HAVE_WAYLAND_ONLY
ecore_x_window_cursor_set(ptr->win, 0);
#endif
evas_object_hide(ptr->o_ptr);
}
EAPI void
@ -503,12 +584,10 @@ e_pointer_type_push(E_Pointer *ptr, void *obj, const char *type)
{
E_Pointer_Stack *stack;
if (!ptr) return;
EINA_SAFETY_ON_NULL_RETURN(ptr);
_e_pointer_type_set(ptr, type);
/* ptr->obj = obj; */
if (!(stack = E_NEW(E_Pointer_Stack, 1))) return;
stack->type = eina_stringshare_ref(ptr->type);
stack->obj = obj;
@ -521,7 +600,7 @@ e_pointer_type_pop(E_Pointer *ptr, void *obj, const char *type)
Eina_List *l, *ll;
E_Pointer_Stack *stack;
if (!ptr) return;
EINA_SAFETY_ON_NULL_RETURN(ptr);
EINA_LIST_FOREACH_SAFE(ptr->stack, l, ll, stack)
{
@ -536,7 +615,7 @@ e_pointer_type_pop(E_Pointer *ptr, void *obj, const char *type)
if (!ptr->stack)
{
// e_pointer_hide(ptr);
e_pointer_hide(ptr);
eina_stringshare_replace(&ptr->type, NULL);
return;
}
@ -546,7 +625,6 @@ e_pointer_type_pop(E_Pointer *ptr, void *obj, const char *type)
_e_pointer_type_set(ptr, stack->type);
eina_stringshare_refplace(&ptr->type, stack->type);
/* ptr->obj = stack->obj; */
}
EAPI void
@ -650,8 +728,28 @@ e_pointer_idler_before(void)
EINA_LIST_FOREACH(_ptrs, l, ptr)
{
if ((!ptr->e_cursor) || (!ptr->evas)) continue;
if (ptr->hot.update)
_e_pointer_type_set(ptr, ptr->type);
if (!ptr->canvas)
{
Eina_List *updates;
if ((updates = evas_render_updates(ptr->evas)))
{
#ifndef HAVE_WAYLAND_ONLY
Ecore_X_Cursor cur;
cur = ecore_x_cursor_new(ptr->win, ptr->pixels, ptr->w,
ptr->h, ptr->hot.x, ptr->hot.y);
ecore_x_window_cursor_set(ptr->win, cur);
ecore_x_cursor_free(cur);
#endif
evas_render_updates_free(updates);
}
}
ptr->hot.update = EINA_FALSE;
}
}