[Pkg-e-commits] [SCM] Enlightenment DR17 graphical layout and animation library branch, upstream-vcs, updated. f5b4e4555670cc3b4a24802eb44d7d47c379bee4
cmarcelo
cmarcelo at alioth.debian.org
Fri May 23 22:08:18 UTC 2008
The following commit has been merged in the upstream-vcs branch:
commit 51aa1e1d81b0b2b627a1803708e92601a12eabca
Author: cmarcelo <cmarcelo>
Date: Tue Apr 1 21:33:17 2008 +0000
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.
diff --git a/src/bin/edje_cc_handlers.c b/src/bin/edje_cc_handlers.c
index a912507..77f5373 100644
--- a/src/bin/edje_cc_handlers.c
+++ b/src/bin/edje_cc_handlers.c
@@ -83,6 +83,7 @@ static void st_collections_group_parts_part_type(void);
static void st_collections_group_parts_part_effect(void);
static void st_collections_group_parts_part_mouse_events(void);
static void st_collections_group_parts_part_repeat_events(void);
+static void st_collections_group_parts_part_ignore_flags(void);
static void st_collections_group_parts_part_pointer_mode(void);
static void st_collections_group_parts_part_precise_is_inside(void);
static void st_collections_group_parts_part_use_alternate_font_metrics(void);
@@ -222,6 +223,7 @@ New_Statement_Handler statement_handlers[] =
{"collections.group.parts.part.effect", st_collections_group_parts_part_effect},
{"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events},
{"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events},
+ {"collections.group.parts.part.ignore_flags", st_collections_group_parts_part_ignore_flags},
{"collections.group.parts.part.pointer_mode", st_collections_group_parts_part_pointer_mode},
{"collections.group.parts.part.precise_is_inside", st_collections_group_parts_part_precise_is_inside},
{"collections.group.parts.part.use_alternate_font_metrics", st_collections_group_parts_part_use_alternate_font_metrics},
@@ -1382,6 +1384,7 @@ st_collections_group_data_item(void)
type: IMAGE;
mouse_events: 1;
repeat_events: 0;
+ ignore_flags: NONE;
clip_to: "anotherpart";
source: "groupname";
pointer_mode: AUTOGRAB;
@@ -1412,6 +1415,7 @@ ob_collections_group_parts_part(void)
ep->type = EDJE_PART_TYPE_IMAGE;
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;
@@ -1554,6 +1558,37 @@ st_collections_group_parts_part_repeat_events(void)
/**
@page edcref
@property
+ ignore_flags
+ @parameters
+ [FLAG] ...
+ @effect
+ Specifies whether events with the given flags should be ignored,
+ i.e., will not have the signals emitted to the parts. Multiple flags
+ must be separated by spaces, the effect will be ignoring all events
+ with one of the flags specified. Possible flags:
+ @li NONE (default value, no event will be ignored)
+ @li ON_HOLD
+ @endproperty
+*/
+static void
+st_collections_group_parts_part_ignore_flags(void)
+{
+ Edje_Part_Collection *pc;
+ Edje_Part *ep;
+
+ check_min_arg_count(1);
+
+ pc = evas_list_data(evas_list_last(edje_collections));
+ ep = evas_list_data(evas_list_last(pc->parts));
+ ep->ignore_flags = parse_flags(0,
+ "NONE", EVAS_EVENT_FLAG_NONE,
+ "ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
+ NULL);
+}
+
+/**
+ @page edcref
+ @property
pointer_mode
@parameters
[MODE]
diff --git a/src/lib/Edje_Edit.h b/src/lib/Edje_Edit.h
index 92e5c02..ffdbb0c 100644
--- a/src/lib/Edje_Edit.h
+++ b/src/lib/Edje_Edit.h
@@ -383,6 +383,22 @@ edje_edit_part_repeat_events_set(
* 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 ************************************/
diff --git a/src/lib/edje_callbacks.c b/src/lib/edje_callbacks.c
index 07d1f38..0cb45bf 100644
--- a/src/lib/edje_callbacks.c
+++ b/src/lib/edje_callbacks.c
@@ -34,7 +34,7 @@ _edje_mouse_in_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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 @@ _edje_mouse_out_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
{
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 @@ _edje_mouse_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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 @@ _edje_mouse_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
{
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 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
Evas_Event_Mouse_Move *ev;
Edje *ed;
Edje_Real_Part *rp;
+ int ignored;
ev = event_info;
ed = data;
@@ -221,8 +246,11 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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 @@ _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
{
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 @@ _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
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;
diff --git a/src/lib/edje_data.c b/src/lib/edje_data.c
index a62790d..323960c 100644
--- a/src/lib/edje_data.c
+++ b/src/lib/edje_data.c
@@ -358,6 +358,7 @@ _edje_edd_setup(void)
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);
diff --git a/src/lib/edje_edit.c b/src/lib/edje_edit.c
index 0497f56..9fa3566 100644
--- a/src/lib/edje_edit.c
+++ b/src/lib/edje_edit.c
@@ -921,6 +921,7 @@ edje_edit_part_add(Evas_Object *obj, const char* name, unsigned char type)
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;
@@ -1299,6 +1300,23 @@ edje_edit_part_repeat_events_set(Evas_Object *obj, const char *part, unsigned ch
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 *
edje_edit_part_source_get(Evas_Object *obj, const char *part)
{
diff --git a/src/lib/edje_private.h b/src/lib/edje_private.h
index e8079b4..7178b51 100644
--- a/src/lib/edje_private.h
+++ b/src/lib/edje_private.h
@@ -486,6 +486,7 @@ struct _Edje_Part
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;
--
Enlightenment DR17 graphical layout and animation library
More information about the Pkg-e-commits
mailing list