evas/events - separate source_events feed functions. need to care more.

SVN revision: 78458
This commit is contained in:
ChunEon Park 2012-10-25 15:12:54 +00:00
parent 26fe925760
commit ecc24faf1e
2 changed files with 319 additions and 149 deletions

View File

@ -158,59 +158,269 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
} }
static void static void
_evas_object_source_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Callback_Type type, void *ev, int event_id) _evas_event_source_events_call(Evas_Object_Protected_Data *src, Evas_Callback_Type type, void *ev, int event_id)
{ {
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS); Eina_List *l;
Evas_Object *src_eo = _evas_object_image_source_get(eo_obj); Evas_Object *child_eo;
Evas_Object_Protected_Data *src = eo_data_get(src_eo, Evas_Object_Protected_Data *child;
EVAS_OBJ_CLASS); EINA_LIST_FOREACH(src->proxy.event_in, l, child_eo)
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Coord w1 = obj->cur.geometry.w;
Evas_Coord h1 = obj->cur.geometry.h;
Evas_Coord w2 = src->cur.geometry.w;
Evas_Coord h2 = src->cur.geometry.h;
x -= obj->cur.geometry.x;
y -= obj->cur.geometry.y;
if (w1 != w2) x = (Evas_Coord) ((float)x * ((float)w2 / (float)w1));
if (h1 != h2) y = (Evas_Coord) ((float)y * ((float)w2 / (float)w1));
x += src->cur.geometry.x;
y += src->cur.geometry.y;
//FIXME: handle for key events and hold
//FIXME: If the src doesn't have geometry info
if (src->is_smart)
{ {
Eina_List *in = NULL, *l = NULL; if (src->delete_me) return;
Evas_Object *child_eo; child = eo_data_get(child_eo, EVAS_OBJ_CLASS);
Evas_Object_Protected_Data *child; evas_object_event_callback_call(child_eo, child, type, ev, event_id);
int no_rep = 0; if (src->layer->evas->delete_me) break;
//Optimize Here: Keep this list in proxy image for up and move
in = _evas_event_object_list_raw_in_get(eo_e, in,
evas_object_smart_members_get_direct(src_eo), NULL, x, y, &no_rep, EINA_TRUE);
EINA_LIST_FOREACH(in, l, child_eo)
{
if (obj->delete_me || src->delete_me) return;
child = eo_data_get(child_eo, EVAS_OBJ_CLASS);
if (child->delete_me) continue;
evas_object_event_callback_call(child_eo, child,
type,
ev,
event_id);
}
eina_list_free(in);
} }
else
evas_object_event_callback_call(src_eo, src, type, ev, event_id);
} }
static inline void static void
_evas_event_pass_to_source(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Evas *eo_e, Evas_Coord x, Evas_Coord y, Evas_Callback_Type type, void *ev, int event_id) _transform_to_src_space(Evas_Object_Protected_Data *obj, Evas_Object_Protected_Data *src, Evas_Coord *x, Evas_Coord *y)
{ {
if (obj->proxy.is_proxy && obj->proxy.source_events) Evas_Coord obj_w = obj->cur.geometry.w, obj_h = obj->cur.geometry.h;
_evas_object_source_events(eo_obj, eo_e, x, y, type, ev, event_id); Evas_Coord src_w = src->cur.geometry.w, src_h = src->cur.geometry.h;
Evas_Coord tmp_x = *x;
Evas_Coord tmp_y = *y;
tmp_x -= obj->cur.geometry.x;
tmp_y -= obj->cur.geometry.y;
if (obj_w != src_w)
tmp_x = (Evas_Coord) ((float)tmp_x * ((float)src_w / (float)obj_w));
if (obj_h != src_h)
tmp_y = (Evas_Coord) ((float)tmp_y * ((float)src_h / (float)obj_h));
tmp_x += src->cur.geometry.x;
tmp_y += src->cur.geometry.y;
*x = tmp_x;
*y = tmp_y;
}
static void
_evas_event_source_mouse_down_events(Evas_Object *eo_obj, Evas *eo_e, Evas_Event_Mouse_Down *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Public_Data *e = eo_data_get(eo_e, EVAS_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || e->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
if (src->proxy.event_in)
src->proxy.event_in = eina_list_free(src->proxy.event_in);
//FIXME: Needs to care the src mouse grab.
if (src->is_smart)
{
int no_rep = 0;
src->proxy.event_in = _evas_event_object_list_raw_in_get(eo_e, src->proxy.event_in, evas_object_smart_members_get_direct(eo_src), NULL, ev->canvas.x, ev->canvas.y, &no_rep, EINA_TRUE);
}
else
src->proxy.event_in = eina_list_append(src->proxy.event_in, src);
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_DOWN, ev, event_id);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_mouse_move_events(Evas_Object *eo_obj, Evas_Event_Mouse_Move *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Position cur_pos = ev->cur;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->cur.canvas.x, &ev->cur.canvas.y);
ev->cur.output.x = ev->cur.canvas.x;
ev->cur.output.y = ev->cur.canvas.y;
//FIXME: transform previous coords also.
//FIXME: Needs to care the src mouse grab.
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_MOVE, ev, event_id);
//FIXME: Update the mouse out objects.
//FIXME: If any object isn't grabbed then get the event list again.
ev->cur = cur_pos;
}
static void
_evas_event_source_mouse_up_events(Evas_Object *eo_obj, Evas_Event_Mouse_Up *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
//FIXME: Needs to care the src mouse grab.
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_UP, ev, event_id);
src->proxy.event_in = eina_list_free(src->proxy.event_in);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_hold_events(Evas_Object *eo_obj, void *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
if (obj->layer->evas->is_frozen) return;
_evas_event_source_events_call(src, EVAS_CALLBACK_HOLD, ev, event_id);
}
static void
_evas_event_source_wheel_events(Evas_Object *eo_obj, Evas_Event_Mouse_Wheel *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_WHEEL, ev, event_id);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_multi_down_events(Evas_Object *eo_obj, Evas_Event_Multi_Down *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Precision_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
//FIXME: transform precision
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
//FIXME: Needs to care the src mouse grab.
_evas_event_source_events_call(src, EVAS_CALLBACK_MULTI_DOWN, ev, event_id);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_multi_up_events(Evas_Object *eo_obj, Evas_Event_Multi_Up *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Precision_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
//FIXME: transform precision
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
//FIXME: Needs to care the src mouse grab.
_evas_event_source_events_call(src, EVAS_CALLBACK_MULTI_UP, ev, event_id);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_multi_move_events(Evas_Object *eo_obj, Evas_Event_Multi_Move *ev, int event_id)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Precision_Position cur_pos = ev->cur;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->cur.canvas.x, &ev->cur.canvas.y);
ev->cur.output.x = ev->cur.canvas.x;
ev->cur.output.y = ev->cur.canvas.y;
//FIXME: Needs to care the src mouse grab.
_evas_event_source_events_call(src, EVAS_CALLBACK_MULTI_MOVE, ev, event_id);
//FIXME: If any object isn't grabbed then get the event list again.
ev->cur = cur_pos;
}
static void
_evas_event_source_mouse_in_events(Evas_Object *eo_obj, Evas_Event_Mouse_In *ev, int event_id)
{
//FIXME: Should implement again.
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Point output = ev->output;
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_IN, ev, event_id);
ev->canvas = canvas;
ev->output = output;
}
static void
_evas_event_source_mouse_out_events(Evas_Object *eo_obj, Evas_Event_Mouse_Out *ev, int event_id)
{
//FIXME: Should implement again.
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
Evas_Object *eo_src = _evas_object_image_source_get(eo_obj);
Evas_Object_Protected_Data *src = eo_data_get(eo_src, EVAS_OBJ_CLASS);
Evas_Coord_Point canvas = ev->canvas;
if (obj->delete_me || src->delete_me || obj->layer->evas->is_frozen) return;
_transform_to_src_space(obj, src, &ev->canvas.x, &ev->canvas.y);
ev->output.x = ev->canvas.x;
ev->output.y = ev->canvas.y;
_evas_event_source_events_call(src, EVAS_CALLBACK_MOUSE_OUT, ev, event_id);
ev->canvas = canvas;
ev->output = output;
} }
static Eina_List * static Eina_List *
@ -474,9 +684,9 @@ _canvas_event_feed_mouse_down(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_DOWN, &ev, EVAS_CALLBACK_MOUSE_DOWN, &ev,
event_id); event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, ev.canvas.x, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.canvas.y, EVAS_CALLBACK_MOUSE_DOWN, _evas_event_source_mouse_down_events(eo_obj, eo_e, &ev,
&ev, event_id); event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
if (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN) if (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)
@ -539,10 +749,9 @@ _post_up_handle(Evas *eo_e, unsigned int timestamp, const void *data)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_OUT, EVAS_CALLBACK_MOUSE_OUT,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.canvas.x, ev.canvas.y, _evas_event_source_mouse_out_events(eo_obj, &ev,
EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
event_id);
} }
} }
} }
@ -586,12 +795,11 @@ _post_up_handle(Evas *eo_e, unsigned int timestamp, const void *data)
{ {
evas_object_event_callback_call(eo_obj_itr, obj_itr, evas_object_event_callback_call(eo_obj_itr, obj_itr,
EVAS_CALLBACK_MOUSE_IN, &ev_in, event_id); EVAS_CALLBACK_MOUSE_IN, &ev_in, event_id);
_evas_event_pass_to_source(eo_obj_itr, obj_itr, if ((obj_itr->proxy.is_proxy) &&
eo_e, ev_in.canvas.x, (obj_itr->proxy.source_events))
ev_in.canvas.y, _evas_event_source_mouse_in_events(eo_obj_itr,
EVAS_CALLBACK_MOUSE_IN, &ev_in,
&ev, event_id); event_id);
} }
} }
} }
@ -700,10 +908,9 @@ _canvas_event_feed_mouse_up(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_UP, EVAS_CALLBACK_MOUSE_UP,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.canvas.x, ev.canvas.y, _evas_event_source_mouse_up_events(eo_obj, &ev,
EVAS_CALLBACK_MOUSE_UP, event_id);
&ev, event_id);
} }
} }
if (e->delete_me) break; if (e->delete_me) break;
@ -825,9 +1032,8 @@ _canvas_event_feed_mouse_wheel(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_WHEEL, &ev, EVAS_CALLBACK_MOUSE_WHEEL, &ev,
event_id); event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, ev.canvas.x, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.canvas.y, EVAS_CALLBACK_MOUSE_WHEEL, _evas_event_source_wheel_events(eo_obj, &ev, event_id);
&ev, event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }
@ -933,11 +1139,9 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id); EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.cur.canvas.x, _evas_event_source_mouse_move_events(eo_obj, &ev,
ev.cur.canvas.y, event_id);
EVAS_CALLBACK_MOUSE_MOVE,
&ev, event_id);
} }
} }
else else
@ -999,11 +1203,9 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, evas_object_event_callback_call(eo_obj,
obj, obj,
EVAS_CALLBACK_MOUSE_OUT, &ev, event_id); EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, if ((obj->proxy.is_proxy) &&
eo_e, (obj->proxy.source_events))
ev.canvas.x, _evas_event_source_mouse_out_events(eo_obj, &ev, event_id);
ev.canvas.y,
EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
} }
} }
} }
@ -1096,11 +1298,9 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
ev.cur.canvas.y = e->pointer.y; ev.cur.canvas.y = e->pointer.y;
_evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed); _evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id); evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.cur.canvas.x, _evas_event_source_mouse_move_events(eo_obj,&ev,
ev.cur.canvas.y, event_id);
EVAS_CALLBACK_MOUSE_MOVE, &ev,
event_id);
} }
} }
/* otherwise it has left the object */ /* otherwise it has left the object */
@ -1117,11 +1317,10 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id); EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) &&
ev2.canvas.x, (obj->proxy.source_events))
ev2.canvas.y, _evas_event_source_mouse_out_events(eo_obj, &ev2,
EVAS_CALLBACK_MOUSE_OUT, event_id);
&ev2, event_id);
} }
} }
} }
@ -1151,11 +1350,10 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2); EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) &&
ev3.canvas.x, (obj->proxy.source_events))
ev3.canvas.y, _evas_event_source_mouse_in_events(eo_obj, &ev3,
EVAS_CALLBACK_MOUSE_IN, event_id2);
&ev3, event_id2);
} }
} }
} }
@ -1292,11 +1490,9 @@ nogrep:
_evas_event_framespace_adjust(eo_obj, &ev.cur.canvas.x, &ev.cur.canvas.y); _evas_event_framespace_adjust(eo_obj, &ev.cur.canvas.x, &ev.cur.canvas.y);
_evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed); _evas_event_havemap_adjust(eo_obj, obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id); evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.cur.canvas.x, _evas_event_source_mouse_move_events(eo_obj, &ev,
ev.cur.canvas.y, event_id);
EVAS_CALLBACK_MOUSE_MOVE,
&ev, event_id);
} }
} }
/* otherwise it has left the object */ /* otherwise it has left the object */
@ -1313,11 +1509,10 @@ nogrep:
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id); EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) &&
ev2.canvas.x, (obj->proxy.source_events))
ev2.canvas.y, _evas_event_source_mouse_out_events(eo_obj, &ev2,
EVAS_CALLBACK_MOUSE_OUT, event_id);
&ev2, event_id);
} }
} }
} }
@ -1347,11 +1542,10 @@ nogrep:
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2); EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) &&
ev3.canvas.x, (obj->proxy.source_events))
ev3.canvas.y, _evas_event_source_mouse_in_events(eo_obj, &ev3,
EVAS_CALLBACK_MOUSE_IN, event_id2);
&ev3, event_id2);
} }
} }
} }
@ -1434,10 +1628,9 @@ _canvas_event_feed_mouse_in(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_IN, EVAS_CALLBACK_MOUSE_IN,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
ev.canvas.x, ev.canvas.y, _evas_event_source_mouse_in_events(eo_obj, &ev,
EVAS_CALLBACK_MOUSE_IN, event_id);
&ev, event_id);
} }
} }
} }
@ -1518,10 +1711,10 @@ _canvas_event_feed_mouse_out(Eo *eo_e, void *_pd, va_list *list)
{ {
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MOUSE_OUT, &ev, event_id); EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) &&
ev.canvas.x, ev.canvas.y, (obj->proxy.source_events))
EVAS_CALLBACK_MOUSE_OUT, _evas_event_source_mouse_out_events(eo_obj, &ev,
&ev, event_id); event_id);
} }
} }
obj->mouse_grabbed = 0; obj->mouse_grabbed = 0;
@ -1641,10 +1834,8 @@ _canvas_event_feed_multi_down(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MULTI_DOWN, &ev, EVAS_CALLBACK_MULTI_DOWN, &ev,
event_id); event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, ev.canvas.x, if ((obj->proxy.is_proxy) || (obj->proxy.source_events))
ev.canvas.y, EVAS_CALLBACK_MULTI_DOWN, _evas_event_source_multi_down_events(eo_obj, &ev, event_id);
&ev,
event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }
@ -1752,9 +1943,8 @@ _canvas_event_feed_multi_up(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(eo_obj, obj, evas_object_event_callback_call(eo_obj, obj,
EVAS_CALLBACK_MULTI_UP, &ev, EVAS_CALLBACK_MULTI_UP, &ev,
event_id); event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, ev.canvas.x, if ((obj->proxy.is_proxy) || (obj->proxy.source_events))
ev.canvas.y, EVAS_CALLBACK_MULTI_UP, _evas_event_source_multi_up_events(eo_obj, &ev, event_id);
&ev, event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }
@ -1863,10 +2053,8 @@ _canvas_event_feed_multi_move(Eo *eo_e, void *_pd, va_list *list)
if (y != ev.cur.canvas.y) if (y != ev.cur.canvas.y)
ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id); evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, ev.cur.canvas.x, if ((obj->proxy.is_proxy) || (obj->proxy.source_events))
ev.cur.canvas.y, _evas_event_source_multi_move_events(eo_obj, &ev, event_id);
EVAS_CALLBACK_MULTI_MOVE, &ev,
event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }
@ -1938,10 +2126,8 @@ _canvas_event_feed_multi_move(Eo *eo_e, void *_pd, va_list *list)
if (y != ev.cur.canvas.y) if (y != ev.cur.canvas.y)
ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id); evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, if ((obj->proxy.is_proxy) || (obj->proxy.source_events))
ev.cur.canvas.x, ev.cur.canvas.y, _evas_event_source_multi_move_events(eo_obj, &ev, event_id);
EVAS_CALLBACK_MULTI_MOVE, &ev,
event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }
@ -2037,10 +2223,6 @@ _canvas_event_feed_key_down(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(g->object, evas_object_event_callback_call(g->object,
object_obj, object_obj,
EVAS_CALLBACK_KEY_DOWN, &ev, event_id); EVAS_CALLBACK_KEY_DOWN, &ev, event_id);
_evas_event_pass_to_source(g->object, object_obj,
eo_e, 0, 0,
EVAS_CALLBACK_KEY_DOWN,
&ev, event_id);
} }
if (g->exclusive) exclusive = EINA_TRUE; if (g->exclusive) exclusive = EINA_TRUE;
} }
@ -2071,14 +2253,9 @@ _canvas_event_feed_key_down(Eo *eo_e, void *_pd, va_list *list)
{ {
Evas_Object_Protected_Data *focused_obj = eo_data_get(e->focused, EVAS_OBJ_CLASS); Evas_Object_Protected_Data *focused_obj = eo_data_get(e->focused, EVAS_OBJ_CLASS);
if (!e->is_frozen && !evas_event_freezes_through(e->focused, focused_obj)) if (!e->is_frozen && !evas_event_freezes_through(e->focused, focused_obj))
{
evas_object_event_callback_call(e->focused, focused_obj, evas_object_event_callback_call(e->focused, focused_obj,
EVAS_CALLBACK_KEY_DOWN, EVAS_CALLBACK_KEY_DOWN,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(e->focused, focused_obj, eo_e, 0, 0,
EVAS_CALLBACK_KEY_DOWN,
&ev, event_id);
}
} }
_evas_post_event_callback_call(eo_e, e); _evas_post_event_callback_call(eo_e, e);
if (ev.dev) _evas_device_unref(ev.dev); if (ev.dev) _evas_device_unref(ev.dev);
@ -2157,9 +2334,6 @@ _canvas_event_feed_key_up(Eo *eo_e, void *_pd, va_list *list)
evas_object_event_callback_call(g->object, object_obj, evas_object_event_callback_call(g->object, object_obj,
EVAS_CALLBACK_KEY_UP, EVAS_CALLBACK_KEY_UP,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(g->object, object_obj, eo_e,
0, 0, EVAS_CALLBACK_KEY_UP,
&ev, event_id);
} }
if (g->exclusive) exclusive = EINA_TRUE; if (g->exclusive) exclusive = EINA_TRUE;
} }
@ -2191,14 +2365,9 @@ _canvas_event_feed_key_up(Eo *eo_e, void *_pd, va_list *list)
{ {
Evas_Object_Protected_Data *focused_obj = eo_data_get(e->focused, EVAS_OBJ_CLASS); Evas_Object_Protected_Data *focused_obj = eo_data_get(e->focused, EVAS_OBJ_CLASS);
if (!e->is_frozen && !evas_event_freezes_through(e->focused, focused_obj)) if (!e->is_frozen && !evas_event_freezes_through(e->focused, focused_obj))
{
evas_object_event_callback_call(e->focused, focused_obj, evas_object_event_callback_call(e->focused, focused_obj,
EVAS_CALLBACK_KEY_UP, EVAS_CALLBACK_KEY_UP,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(e->focused, focused_obj, eo_e, 0, 0,
EVAS_CALLBACK_KEY_UP,
&ev, event_id);
}
} }
_evas_post_event_callback_call(eo_e, e); _evas_post_event_callback_call(eo_e, e);
if (ev.dev) _evas_device_unref(ev.dev); if (ev.dev) _evas_device_unref(ev.dev);
@ -2246,8 +2415,8 @@ _canvas_event_feed_hold(Eo *eo_e, void *_pd, va_list *list)
{ {
evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_HOLD, evas_object_event_callback_call(eo_obj, obj, EVAS_CALLBACK_HOLD,
&ev, event_id); &ev, event_id);
_evas_event_pass_to_source(eo_obj, obj, eo_e, EVAS_CALLBACK_HOLD, if ((obj->proxy.is_proxy) && (obj->proxy.source_events))
0, 0, &ev, event_id); _evas_event_source_hold_events(eo_obj, &ev, event_id);
} }
if (e->delete_me) break; if (e->delete_me) break;
} }

View File

@ -595,6 +595,7 @@ struct _Evas_Object_Protected_Data
Eina_List *proxies; Eina_List *proxies;
void *surface; void *surface;
int w,h; int w,h;
Eina_List *event_in;
Eina_Bool redraw : 1; Eina_Bool redraw : 1;
Eina_Bool is_proxy : 1; Eina_Bool is_proxy : 1;
Eina_Bool source_invisible : 1; Eina_Bool source_invisible : 1;