static status eventHandler(Handler h, EventObj ev) { DEBUG(NAME_post, Cprintf("eventHandler(%s, %s)\n", pp(h), pp(ev))); if ( isAEvent(ev, h->event) ) { if (isDefault(h->region)) { if (isNil(h->message)) succeed; return forwardReceiverCodev(h->message, getMasterEvent(ev), 1, (Any *)&ev); } else { Graphical gr = ev->receiver; if ( insideRegion(h->region, gr->area, getAreaPositionEvent(ev, gr)) == SUCCEED ) { if ( notNil(h->message) ) return forwardReceiverCodev(h->message, getMasterEvent(ev), 1, (Any *)&ev); succeed; } } } fail; }
static status updatePopupGesture(PopupGesture g, EventObj ev) { PopupObj p; Any rec = getMasterEvent(ev); DEBUG(NAME_popup, Cprintf("updatePopupGesture(): rec=%s\n", pp(rec))); if ( notNil(g->popup) ) { if ( instanceOfObject(g->popup, ClassFunction) ) { TRY( p = getForwardReceiverFunction((Function) g->popup, rec, rec, ev, EAV) ); TRY( p = checkType(p, nameToType(NAME_popup), g)); } else p = g->popup; } else { if ( !(p = get(rec, NAME_popup, EAV)) || !instanceOfObject(p, ClassPopup) ) fail; } assign(g, current, p); if ( isNil(g->context) ) assign(g, context, notNil(p->context) ? p->context : rec); send(p, NAME_update, g->context, EAV); if ( p->active == OFF || emptyChain(p->members) ) { send(g, NAME_cancel, ev, EAV); fail; } succeed; }