aboutsummaryrefslogtreecommitdiff
path: root/generic/Group.c
diff options
context:
space:
mode:
authorlecoanet2006-08-28 08:47:59 +0000
committerlecoanet2006-08-28 08:47:59 +0000
commit9c8413684e589ae90c416e08e0419b91db6f7cc3 (patch)
treec124a5ba60df98602cc82529851d476ac6def996 /generic/Group.c
parent8f3027c2d68fb19be642bb41315391056d90bd1d (diff)
downloadtkzinc-9c8413684e589ae90c416e08e0419b91db6f7cc3.zip
tkzinc-9c8413684e589ae90c416e08e0419b91db6f7cc3.tar.gz
tkzinc-9c8413684e589ae90c416e08e0419b91db6f7cc3.tar.bz2
tkzinc-9c8413684e589ae90c416e08e0419b91db6f7cc3.tar.xz
Added a -catchevent attribute that specifies whether an item should handle
events or act as a decorating object. Groups can be controlled too, there catching state propagates to their children.
Diffstat (limited to 'generic/Group.c')
-rw-r--r--generic/Group.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/generic/Group.c b/generic/Group.c
index ce581a8..c4fef66 100644
--- a/generic/Group.c
+++ b/generic/Group.c
@@ -72,6 +72,9 @@ static ZnAttrConfig group_attrs[] = {
{ ZN_CONFIG_BOOL, "-atomic", NULL,
Tk_Offset(GroupItemStruct, header.flags), ATOMIC_BIT,
ZN_REPICK_FLAG, False },
+ { ZN_CONFIG_BOOL, "-catchevent", NULL,
+ Tk_Offset(GroupItemStruct, header.flags), ZN_CATCH_EVENT_BIT,
+ ZN_REPICK_FLAG, False },
{ ZN_CONFIG_ITEM, "-clip", NULL,
Tk_Offset(GroupItemStruct, clip), 0,
ZN_COORDS_FLAG|ZN_ITEM_FLAG, False },
@@ -121,6 +124,7 @@ Init(ZnItem item,
group->dependents = NULL;
SET(item->flags, ZN_VISIBLE_BIT);
SET(item->flags, ZN_SENSITIVE_BIT);
+ SET(item->flags, ZN_CATCH_EVENT_BIT);
SET(item->flags, ZN_COMPOSE_ALPHA_BIT);
SET(item->flags, ZN_COMPOSE_ROTATION_BIT);
SET(item->flags, ZN_COMPOSE_SCALE_BIT);
@@ -1240,12 +1244,15 @@ Pick(ZnItem item,
for ( ; current_item != ZN_NO_ITEM; current_item = current_item->next) {
/*
+ * If an item doesn't catch events it can be safely skipped
+ * right now.
* Sensitive item must be reported even if they are invisible.
* It is legal to fire bindings on invisible sensitive items.
* This is _not_ a bug do _not_ modify the test below.
*/
- if (ISCLEAR(current_item->flags, ZN_SENSITIVE_BIT) &&
- ISCLEAR(current_item->flags, ZN_VISIBLE_BIT)) {
+ if (ISCLEAR(current_item->flags, ZN_CATCH_EVENT_BIT) ||
+ (ISCLEAR(current_item->flags, ZN_SENSITIVE_BIT) &&
+ ISCLEAR(current_item->flags, ZN_VISIBLE_BIT))) {
continue;
}
ZnIntersectBBox(&bbox, &current_item->item_bounding_box, &inter);