Enlightenment CVS committal Author : cmarcelo Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: Edje_Edit.h edje_callbacks.c edje_data.c edje_edit.c edje_private.h Log Message: Edje: adding support for ignore_flags. Parts can choose to ignore Events with certain flags in event_flags. The default value is to accept all events. The syntax for this is specifying in the part: ignore_flags: ON_HOLD; I've tried to update Edje_Edit bits also. =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/Edje_Edit.h,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- Edje_Edit.h 24 Mar 2008 08:22:00 -0000 1.23 +++ Edje_Edit.h 1 Apr 2008 21:33:17 -0000 1.24 @@ -383,6 +383,22 @@ * If set to 0 the events received will not propagate to other parts.*/ ); +/**Get ignore_flags for part.*/ +EAPI Evas_Event_Flags ///@return event flags ignored +edje_edit_part_ignore_flags_get( + Evas_Object *obj, ///< The edje object + const char *part ///< The name of the part +); + +/**Set repeat_events for part. */ +EAPI void +edje_edit_part_ignore_flags_set( + Evas_Object *obj, ///< The edje object + const char *part, ///< The name of the part + Evas_Event_Flags ignore_flags ///< event flags to be ignored +); + + //@} /******************************************************************************/ /************************** STATES API ************************************/ =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_callbacks.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- edje_callbacks.c 31 Mar 2008 21:38:51 -0000 1.26 +++ edje_callbacks.c 1 Apr 2008 21:33:17 -0000 1.27 @@ -34,7 +34,7 @@ ev = event_info; ed = data; rp = evas_object_data_get(obj, "real_part"); - if (!rp) return; + if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return; _edje_emit(ed, "mouse,in", rp->part->name); return; e = NULL; @@ -50,7 +50,7 @@ ev = event_info; ed = data; rp = evas_object_data_get(obj, "real_part"); - if (!rp) return; + if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return; _edje_emit(ed, "mouse,out", rp->part->name); return; e = NULL; @@ -63,20 +63,28 @@ Edje *ed; Edje_Real_Part *rp; char buf[256]; + int ignored; ev = event_info; ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; - if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK) - snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button); - else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) - snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button); - else - snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); + + ignored = rp->part->ignore_flags & ev->event_flags; + _edje_ref(ed); _edje_freeze(ed); - _edje_emit(ed, buf, rp->part->name); + + if (!ignored) + { + if (ev->flags & EVAS_BUTTON_TRIPLE_CLICK) + snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button); + else if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK) + snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button); + else + snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); + _edje_emit(ed, buf, rp->part->name); + } if (rp->events_to) { @@ -101,8 +109,11 @@ events->y = ev->canvas.y - y - events->h / 2; } - snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); - _edje_emit(ed, buf, events->part->name); + if (!ignored) + { + snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button); + _edje_emit(ed, buf, events->part->name); + } ed->dirty = 1; } _edje_recalc(ed); @@ -123,7 +134,8 @@ { rp->drag.val.x = dx; rp->drag.val.y = dy; - _edje_emit(ed, "drag", rp->part->name); + if (!ignored) + _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; rp->drag.need_reset = 1; _edje_recalc(ed); @@ -139,7 +151,8 @@ rp->drag.down.x = ev->canvas.x; if (rp->part->dragable.y) rp->drag.down.y = ev->canvas.y; - _edje_emit(ed, "drag,start", rp->part->name); + if (!ignored) + _edje_emit(ed, "drag,start", rp->part->name); } rp->drag.down.count++; } @@ -162,24 +175,34 @@ Edje *ed; Edje_Real_Part *rp; char buf[256]; + int ignored; ev = event_info; ed = data; rp = evas_object_data_get(obj, "real_part"); if (!rp) return; - snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); + ignored = rp->part->ignore_flags & ev->event_flags; + _edje_ref(ed); _edje_freeze(ed); - _edje_emit(ed, buf, rp->part->name); - if (rp->events_to) + if (!ignored) { - rp = rp->events_to; snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); _edje_emit(ed, buf, rp->part->name); } + if (rp->events_to) + { + rp = rp->events_to; + if (!ignored) + { + snprintf(buf, sizeof(buf), "mouse,up,%i", ev->button); + _edje_emit(ed, buf, rp->part->name); + } + } + if ((rp->part->dragable.x) || (rp->part->dragable.y)) { if (rp->drag.down.count > 0) @@ -189,11 +212,12 @@ { rp->drag.need_reset = 1; ed->dirty = 1; - _edje_emit(ed, "drag,stop", rp->part->name); + if (!ignored) + _edje_emit(ed, "drag,stop", rp->part->name); } } } - if ((rp->still_in) && (rp->clicked_button == ev->button)) + if ((rp->still_in) && (rp->clicked_button == ev->button) && (!ignored)) { snprintf(buf, sizeof(buf), "mouse,clicked,%i", ev->button); _edje_emit(ed, buf, rp->part->name); @@ -214,6 +238,7 @@ Evas_Event_Mouse_Move *ev; Edje *ed; Edje_Real_Part *rp; + int ignored; ev = event_info; ed = data; @@ -221,8 +246,11 @@ if (!rp) return; if (rp->events_to) rp = rp->events_to; + ignored = rp->part->ignore_flags & ev->event_flags; + _edje_ref(ed); - _edje_emit(ed, "mouse,move", rp->part->name); + if (!ignored) + _edje_emit(ed, "mouse,move", rp->part->name); if (rp->still_in) { @@ -267,7 +295,8 @@ { rp->drag.val.x = dx; rp->drag.val.y = dy; - _edje_emit(ed, "drag", rp->part->name); + if (!ignored) + _edje_emit(ed, "drag", rp->part->name); ed->dirty = 1; _edje_recalc(ed); } @@ -290,7 +319,8 @@ ev = event_info; ed = data; rp = evas_object_data_get(obj, "real_part"); - if (!rp) return; + if (!rp || !(rp->part->ignore_flags & ev->event_flags)) return; + snprintf(buf, sizeof(buf), "mouse,wheel,%i,%i", ev->direction, (ev->z < 0) ? (-1) : (1)); _edje_emit(ed, buf, rp->part->name); return; =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -3 -r1.42 -r1.43 --- edje_data.c 2 Mar 2008 05:39:51 -0000 1.42 +++ edje_data.c 1 Apr 2008 21:33:17 -0000 1.43 @@ -358,6 +358,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", mouse_events, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "repeat_events", repeat_events, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "ignore_flags", ignore_flags, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "pointer_mode", pointer_mode, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "precise_is_inside", precise_is_inside, EET_T_CHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", clip_to_id, EET_T_INT); =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_edit.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- edje_edit.c 24 Mar 2008 08:22:01 -0000 1.12 +++ edje_edit.c 1 Apr 2008 21:33:17 -0000 1.13 @@ -921,6 +921,7 @@ ep->name = evas_stringshare_add(name); ep->mouse_events = 1; ep->repeat_events = 0; + ep->ignore_flags = EVAS_EVENT_FLAG_NONE; ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB; ep->precise_is_inside = 0; ep->use_alternate_font_metrics = 0; @@ -1297,6 +1298,23 @@ evas_object_repeat_events_set(rp->object, 1); else evas_object_repeat_events_set(rp->object, 0); +} + +EAPI Evas_Event_Flags +edje_edit_part_ignore_flags_get(Evas_Object *obj, const char *part) +{ + GET_RP_OR_RETURN(0); + return rp->part->ignore_flags; +} + +EAPI void +edje_edit_part_ignore_flags_set(Evas_Object *obj, const char *part, Evas_Event_Flags ignore_flags) +{ + GET_RP_OR_RETURN(); + if (!rp->object) return; + printf("Set ignore_flags for part: %s [%#x]\n", part, ignore_flags); + + rp->part->ignore_flags = ignore_flags; } EAPI const char * =================================================================== RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.146 retrieving revision 1.147 diff -u -3 -r1.146 -r1.147 --- edje_private.h 24 Mar 2008 08:22:01 -0000 1.146 +++ edje_private.h 1 Apr 2008 21:33:17 -0000 1.147 @@ -486,6 +486,7 @@ unsigned char effect; /* 0 = plain... */ unsigned char mouse_events; /* it will affect/respond to mouse events */ unsigned char repeat_events; /* it will repeat events to objects below */ + Evas_Event_Flags ignore_flags; unsigned char precise_is_inside; unsigned char use_alternate_font_metrics; char pointer_mode; ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs