evas/proxy - skip the events on invisible source obj.

SVN revision: 78313
This commit is contained in:
ChunEon Park 2012-10-22 04:57:32 +00:00
parent bdc4de91cd
commit 916f9ce50c
7 changed files with 47 additions and 18 deletions

View File

@ -60,6 +60,7 @@ _evas_event_object_list_raw_in_get(Evas *eo_e, Eina_List *in,
return in;
}
if (evas_event_passes_through(eo_obj, obj)) continue;
if (evas_object_is_source_invisible(eo_obj, obj)) continue;
if ((obj->cur.visible) && (obj->delete_me == 0) &&
(!obj->clip.clipees) &&
(evas_object_clippers_is_visible(eo_obj, obj)))
@ -827,6 +828,7 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
obj->mouse_grabbed) &&
(!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)) &&
(!obj->clip.clipees))
{
if ((px != x) || (py != y))
@ -968,6 +970,7 @@ _canvas_event_feed_mouse_move(Eo *eo_e, void *_pd, va_list *list)
eina_list_data_find(ins, eo_obj) &&
(!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)) &&
(!obj->clip.clipees) &&
((!obj->precise_is_inside) || evas_object_is_inside(eo_obj, obj, x, y))
)
@ -1141,6 +1144,7 @@ nogrep:
eina_list_data_find(newin, eo_obj) &&
(!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)) &&
(!obj->clip.clipees) &&
((!obj->precise_is_inside) || evas_object_is_inside(eo_obj, obj, x, y))
)
@ -1654,9 +1658,11 @@ _canvas_event_feed_multi_move(Eo *eo_e, void *_pd, va_list *list)
{
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
if ((!e->is_frozen) &&
(evas_object_clippers_is_visible(eo_obj, obj) || obj->mouse_grabbed) &&
(evas_object_clippers_is_visible(eo_obj, obj) ||
obj->mouse_grabbed) &&
(!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)) &&
(!obj->clip.clipees))
{
ev.cur.canvas.x = x;
@ -1725,6 +1731,7 @@ _canvas_event_feed_multi_move(Eo *eo_e, void *_pd, va_list *list)
eina_list_data_find(ins, eo_obj) &&
(!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)) &&
(!obj->clip.clipees) &&
((!obj->precise_is_inside) || evas_object_is_inside(eo_obj, obj, x, y))
)

View File

@ -113,7 +113,8 @@ _line_xy_set(Eo *eo_obj, void *_pd, va_list *list)
if (!(obj->layer->evas->is_frozen))
{
if (!evas_event_passes_through(eo_obj, obj) &&
!evas_event_freezes_through(eo_obj, obj))
!evas_event_freezes_through(eo_obj, obj) &&
!evas_object_is_source_invisible(eo_obj, obj))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y,
@ -158,7 +159,8 @@ _line_xy_set(Eo *eo_obj, void *_pd, va_list *list)
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y, 1, 1);
if (!evas_event_passes_through(eo_obj, obj) &&
!evas_event_freezes_through(eo_obj, obj))
!evas_event_freezes_through(eo_obj, obj) &&
!evas_object_is_source_invisible(eo_obj, obj))
{
if ((is ^ was) && obj->cur.visible)
evas_event_feed_mouse_move(obj->layer->evas->evas,

View File

@ -696,7 +696,7 @@ _position_set(Eo *eo_obj, void *_pd, va_list *list)
Evas_Coord y = va_arg(*list, Evas_Coord);
Evas_Public_Data *evas;
int is, was = 0, pass = 0, freeze = 0;
int is, was = 0, pass = 0, freeze = 0, source_invisible = 0;
int nx = 0, ny = 0;
if (obj->delete_me) return;
@ -729,7 +729,8 @@ _position_set(Eo *eo_obj, void *_pd, va_list *list)
{
pass = evas_event_passes_through(eo_obj, obj);
freeze = evas_event_freezes_through(eo_obj, obj);
if ((!pass) && (!freeze))
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
if ((!pass) && (!freeze) && (!source_invisible))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y, 1, 1);
@ -790,7 +791,7 @@ _size_set(Eo *eo_obj, void *_pd, va_list *list)
Evas_Coord w = va_arg(*list, Evas_Coord);
Evas_Coord h = va_arg(*list, Evas_Coord);
int is, was = 0, pass = 0, freeze =0;
int is, was = 0, pass = 0, freeze = 0, source_invisible = 0;
if (obj->delete_me) return;
if (w < 0) w = 0; if (h < 0) h = 0;
@ -809,6 +810,7 @@ _size_set(Eo *eo_obj, void *_pd, va_list *list)
{
pass = evas_event_passes_through(eo_obj, obj);
freeze = evas_event_freezes_through(eo_obj, obj);
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
if ((!pass) && (!freeze))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
@ -1403,7 +1405,8 @@ _show (Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
evas_object_clip_across_clippees_check(eo_obj, obj);
evas_object_recalc_clippees(eo_obj, obj);
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)))
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if (!obj->is_smart)
{
@ -1445,7 +1448,8 @@ _hide(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
evas_object_clip_across_clippees_check(eo_obj, obj);
evas_object_recalc_clippees(eo_obj, obj);
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)))
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if ((!obj->is_smart) ||
((obj->cur.map) && (obj->cur.map->count == 4) && (obj->cur.usemap)))
@ -1833,6 +1837,7 @@ _canvas_object_top_at_xy_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
if (obj->delete_me) continue;
if ((!include_pass_events_objects) &&
(evas_event_passes_through(eo_obj, obj))) continue;
if (evas_object_is_source_invisible(eo_obj, obj)) continue;
if ((!include_hidden_objects) && (!obj->cur.visible)) continue;
evas_object_clip_recalc(eo_obj, obj);
if ((evas_object_is_in_output_rect(eo_obj, obj, xx, yy, 1, 1)) &&
@ -1903,6 +1908,7 @@ _canvas_object_top_in_rectangle_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *li
if (obj->delete_me) continue;
if ((!include_pass_events_objects) &&
(evas_event_passes_through(eo_obj, obj))) continue;
if (evas_object_is_source_invisible(eo_obj, obj)) continue;
if ((!include_hidden_objects) && (!obj->cur.visible)) continue;
evas_object_clip_recalc(eo_obj, obj);
if ((evas_object_is_in_output_rect(eo_obj, obj, xx, yy, ww, hh)) &&
@ -1957,6 +1963,7 @@ _canvas_objects_at_xy_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
if (obj->delete_me) continue;
if ((!include_pass_events_objects) &&
(evas_event_passes_through(eo_obj, obj))) continue;
if (evas_object_is_source_invisible(eo_obj, obj)) continue;
if ((!include_hidden_objects) && (!obj->cur.visible)) continue;
evas_object_clip_recalc(eo_obj, obj);
if ((evas_object_is_in_output_rect(eo_obj, obj, xx, yy, 1, 1)) &&
@ -2028,6 +2035,7 @@ _canvas_objects_in_rectangle_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
if (obj->delete_me) continue;
if ((!include_pass_events_objects) &&
(evas_event_passes_through(eo_obj, obj))) continue;
if (evas_object_is_source_invisible(eo_obj, obj)) continue;
if ((!include_hidden_objects) && (!obj->cur.visible)) continue;
evas_object_clip_recalc(eo_obj, obj);
if ((evas_object_is_in_output_rect(eo_obj, obj, xx, yy, ww, hh)) &&

View File

@ -120,7 +120,8 @@ _polygon_point_add(Eo *eo_obj, void *_pd, va_list *list)
if (!obj->layer->evas->is_frozen)
{
if (!evas_event_passes_through(eo_obj, obj) &&
!evas_event_freezes_through(eo_obj, obj))
!evas_event_freezes_through(eo_obj, obj) &&
!evas_object_is_source_invisible(eo_obj, obj))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y,
@ -189,7 +190,8 @@ _polygon_point_add(Eo *eo_obj, void *_pd, va_list *list)
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y, 1, 1);
if (!evas_event_passes_through(eo_obj, obj) &&
!evas_event_freezes_through(eo_obj, obj) )
!evas_event_freezes_through(eo_obj, obj) &&
!evas_object_is_source_invisible(eo_obj, obj))
{
if ((is ^ was) && obj->cur.visible)
evas_event_feed_mouse_move(obj->layer->evas->evas,

View File

@ -346,7 +346,7 @@ static void
_text_font_set(Eo *eo_obj, void *_pd, va_list *list)
{
Evas_Object_Text *o = _pd;
int is, was = 0, pass = 0, freeze = 0;
int is, was = 0, pass = 0, freeze = 0, source_invisible = 0;
Evas_Font_Description *fdesc;
const char *font = va_arg(*list, const char*);
@ -375,7 +375,8 @@ _text_font_set(Eo *eo_obj, void *_pd, va_list *list)
{
pass = evas_event_passes_through(eo_obj, obj);
freeze = evas_event_freezes_through(eo_obj, obj);
if ((!pass) && (!freeze))
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
if ((!pass) && (!freeze) && (!source_invisible))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y, 1, 1);

View File

@ -1078,7 +1078,7 @@ _font_set(Eo *eo_obj, void *_pd, va_list *list)
Evas_Object_Protected_Data *obj = eo_data_get(eo_obj, EVAS_OBJ_CLASS);
const char *font_name = va_arg(*list, const char *);
Evas_Font_Size font_size = va_arg(*list, Evas_Font_Size);
int is, was = 0, pass = 0, freeze = 0;
int is, was = 0, pass = 0, freeze = 0, source_invisible = 0;
Evas_Font_Description *font_description;
if ((!font_name) || (!*font_name) || (font_size <= 0))
@ -1107,7 +1107,8 @@ _font_set(Eo *eo_obj, void *_pd, va_list *list)
{
pass = evas_event_passes_through(eo_obj, obj);
freeze = evas_event_freezes_through(eo_obj, obj);
if ((!pass) && (!freeze))
source_invisible = evas_object_is_source_invisible(eo_obj, obj);
if ((!pass) && (!freeze) && (!source_invisible))
was = evas_object_is_in_output_rect(eo_obj, obj,
obj->layer->evas->pointer.x,
obj->layer->evas->pointer.y,

View File

@ -74,7 +74,9 @@ _raise(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
evas_object_change(eo_obj, obj);
evas_object_inform_call_restack(eo_obj);
if (obj->layer->evas->is_frozen) return;
if ((!evas_event_passes_through(eo_obj, obj)) && (!evas_event_freezes_through(eo_obj, obj)))
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if (!obj->is_smart)
{
@ -129,7 +131,9 @@ _lower(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
evas_object_change(eo_obj, obj);
evas_object_inform_call_restack(eo_obj);
if (obj->layer->evas->is_frozen) return;
if ((!evas_event_passes_through(eo_obj, obj)) && (!evas_event_freezes_through(eo_obj, obj)))
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if (!obj->is_smart)
{
@ -214,7 +218,9 @@ _stack_above(Eo *eo_obj, void *_pd, va_list *list)
evas_object_change(eo_obj, obj);
evas_object_inform_call_restack(eo_obj);
if (obj->layer->evas->is_frozen) return;
if ((!evas_event_passes_through(eo_obj, obj)) && (!evas_event_freezes_through(eo_obj, obj)))
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if (!obj->is_smart)
{
@ -299,7 +305,9 @@ _stack_below(Eo *eo_obj, void *_pd, va_list *list)
evas_object_change(eo_obj, obj);
evas_object_inform_call_restack(eo_obj);
if (obj->layer->evas->is_frozen) return;
if ((!evas_event_passes_through(eo_obj, obj)) && (!evas_event_freezes_through(eo_obj, obj)))
if ((!evas_event_passes_through(eo_obj, obj)) &&
(!evas_event_freezes_through(eo_obj, obj)) &&
(!evas_object_is_source_invisible(eo_obj, obj)))
{
if (!obj->is_smart)
{