static status executeLabel(Label lb) { if ( notNil(lb->message) && notDefault(lb->message) ) { statusLabel(lb, NAME_execute); flushGraphical(lb); forwardReceiverCode(lb->message, lb, EAV); if ( !isFreedObj(lb) ) { statusLabel(lb, NAME_inactive); flushGraphical(lb); } } succeed; }
status eventGesture(Any obj, EventObj ev) { Gesture g = obj; if ( g->active == OFF ) fail; if ( g->status == NAME_active && notNil(g->drag_scroll) ) { Graphical gr; if ( tryDragScrollGesture(g, ev) ) succeed; if ( isAEvent(ev, NAME_wheel) && (gr=getScrollTarget(g, ev)) ) return postEvent(ev, gr, DEFAULT); } if ( isDownEvent(ev) && hasModifierEvent(ev, g->modifier) && getButtonEvent(ev) == g->button && (isNil(g->condition) || forwardReceiverCode(g->condition, g, ev, EAV)) && send(g, NAME_verify, ev, EAV) ) { TRY( send(g, NAME_initiate, ev, EAV) ); assign(g, status, NAME_active); send(ev->window, NAME_focus, ev->receiver, g, g->cursor, getButtonEvent(ev), EAV); succeed; } else if ( g->status != NAME_inactive ) { if ( isDragEvent(ev) ) { send(g, NAME_drag, ev, EAV); succeed; } else if ( isUpEvent(ev) && getButtonEvent(ev) == g->button ) { cancelDragScrollGesture(g); send(g, NAME_terminate, ev, EAV); assign(g, status, NAME_inactive); succeed; } } fail; }