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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs