status cancelGesture(Gesture g, EventObj ev) { PceWindow sw = ev->window; EventObj fe = sw->focus_event; EventObj oev; addCodeReference(fe); assign(g, active, OFF); send(sw, NAME_focus, NIL, EAV); if ( notNil(fe) ) send(sw, NAME_event, fe, EAV); if ( ev != sw->focus_event ) { addCodeReference(ev); oev = sw->current_event; assign(sw, current_event, NIL); send(sw, NAME_postEvent, ev, EAV); assign(sw, current_event, oev); delCodeReference(ev); } assign(g, active, ON); delCodeReference(fe); freeableObj(fe); assign(g, status, NAME_inactive); succeed; }
void considerLocStillEvent() { if ( !loc_still_posted ) { unsigned long now = mclock(); if ( now - host_last_time < (unsigned long)loc_still_time ) { DEBUG(NAME_locStill, Cprintf("TimeDiff = %d (ignored)\n", now - host_last_time)); return; } if ( !pceMTTryLock(LOCK_PCE) ) return; if ( instanceOfObject(last_window, ClassWindow) && !onFlag(last_window, F_FREED|F_FREEING) && valInt(last_x) > 0 && valInt(last_y) > 0 ) { ServiceMode(is_service_window(last_window), { AnswerMark mark; EventObj e; markAnswerStack(mark); e = newObject(ClassEvent, NAME_locStill, last_window, last_x, last_y, last_buttons, toInt(last_time + now - host_last_time), EAV); addCodeReference(e); postNamedEvent(e, (Graphical) last_window, DEFAULT, NAME_postEvent); delCodeReference(e); freeableObj(e); rewindAnswerStack(mark, NIL); }) }
static status callCv(CObj host, CPointer function, int argc, Any *argv) { status rval; SendFunc f = (SendFunc) function->pointer; int n; for(n=0; n<argc; n++) if ( isObject(argv[n]) ) addCodeReference(argv[n]); switch(argc) { case 0: rval = (*f)(); break; case 1: rval = (*f)(argv[0]); break; case 2: rval = (*f)(argv[0], argv[1]); break; case 3: rval = (*f)(argv[0], argv[1], argv[2]); break; case 4: rval = (*f)(argv[0], argv[1], argv[2], argv[3]); break; case 5: rval = (*f)(argv[0], argv[1], argv[2], argv[3], argv[4]); break; case 6: rval = (*f)(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]); break; case 7: rval = (*f)(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); break; case 8: rval = (*f)(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]); break; case 9: rval = (*f)(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], argv[7], argv[8]); break; default: rval = errorPce(host, NAME_tooManyArguments, argc); } for(n=0; n<argc; n++) if ( isObject(argv[n]) && !isFreedObj(argv[n]) ) delCodeReference(argv[n]); return rval ? SUCCEED : FAIL; }
static Any getCallHostv(Host host, Name selector, int argc, Any *argv) { Any rval; int n; for(n=0; n<argc; n++) if ( isObject(argv[n]) ) addCodeReference(argv[n]); rval = hostGet(host, selector, argc, argv); for(n=0; n<argc; n++) if ( isObject(argv[n]) && !isFreedObj(argv[n]) ) delCodeReference(argv[n]); return rval; }
static Message getMessageHost(Host h) { Message msg; BoolObj oldBack = h->callBack; assign(h, callBack, OFF); for (;;) { if ( (msg = getHeadChain(h->messages)) ) { assign(h, callBack, oldBack); addCodeReference(msg); deleteHeadChain(h->messages); delCodeReference(msg); pushAnswerObject(msg); answer(msg); } dispatchDisplayManager(TheDisplayManager(), DEFAULT, DEFAULT); } }
static void x_event_window(PceWindow sw, XEvent *event) { EventObj ev; FrameObj fr = getFrameWindow(sw, OFF); FrameObj bfr; Any receiver = sw; #ifdef O_XDND if ( event->xany.type == MapNotify ) { if ( hasSendMethodObject(sw, NAME_dropFiles) ) setDndAwareFrame(fr); } #endif /*O_XDND*/ if ( fr && (bfr=blockedByModalFrame(fr)) ) { switch( event->xany.type ) { case KeyPress: { receiver = bfr; break; } case ButtonRelease: send(fr, NAME_bell, EAV); case ButtonPress: send(bfr, NAME_expose, EAV); default: return; } } if ( (ev = CtoEvent(sw, event)) ) { addCodeReference(ev); postNamedEvent(ev, receiver, DEFAULT, NAME_postEvent); delCodeReference(ev); freeableObj(ev); RedrawDisplayManager(TheDisplayManager()); /* optional? */ } }
static status initialiseVar(Var v, Type type, Name name, Any value) { if ( isDefault(type) ) type = TypeUnchecked; if ( isDefault(name) ) /* local var */ name = NIL; assign(v, name, name); assign(v, type, type); assign(v, global_value, value); v->value = value; if ( isObject(value) ) addCodeReference(value); if ( notNil(name) ) { if ( getMemberHashTable(VarTable, name) ) errorPce(v, NAME_redeclaredVar); appendHashTable(VarTable, name, v); protectObject(v); } return initialiseFunction((Function) v); }
IOSTREAM * Sopen_object(Any obj, const char *mode) { if ( instanceOfObject(obj, ClassFile) ) { Name name = getOsNameFile(obj); IOSTREAM *s; if ( (s=Sopen_file(nameToFN(name), mode)) ) { if ( !strchr(mode, 'b') ) { FileObj f = obj; Name oldstat = f->status; IOSTREAM *ofd = f->fd; int rc; /* HACKS */ f->status = (mode[0] == 'r' ? NAME_read : NAME_write); f->fd = s; switch(mode[0]) { case 'r': { if ( (rc = doBOMFile(f)) ) setStreamEncodingSourceSink(obj, s); break; } case 'w': { setStreamEncodingSourceSink(obj, s); rc = doBOMFile(f); break; } default: { setStreamEncodingSourceSink(obj, s); rc = 0; } } s->newline = (f->newline_mode == NAME_posix ? SIO_NL_POSIX : f->newline_mode == NAME_dos ? SIO_NL_DOS : SIO_NL_DETECT); f->fd = ofd; f->status = oldstat; if ( !rc ) return NULL; } return s; } errorPce(obj, NAME_openFile, mode[0] == 'r' ? NAME_read : NAME_write, getOsErrorPce(PCE)); return s; } else if ( instanceOfObject(obj, ClassRC) && TheCallbackFunctions.rc_open ) { IOSTREAM *s; RC rc = obj; char *rc_class; if ( notDefault(rc->rc_class) ) rc_class = strName(rc->rc_class); else rc_class = NULL; if ( notNil(rc->context) && TheCallbackFunctions.setHostContext ) { Any savedcontext = (*TheCallbackFunctions.setHostContext)(rc->context); s = (*TheCallbackFunctions.rc_open)(strName(rc->name), rc_class, mode); (*TheCallbackFunctions.setHostContext)(savedcontext); } else s = (*TheCallbackFunctions.rc_open)(strName(rc->name), rc_class, mode); if ( !s ) errorPce(obj, NAME_openFile, mode[0] == 'r' ? NAME_read : NAME_write, getOsErrorPce(PCE)); return s; } else { int flags = SIO_TEXT|SIO_RECORDPOS; OpenObject h; IOSTREAM *stream; switch(mode[0]) { case 'r': flags |= SIO_INPUT; break; case 'w': flags |= SIO_OUTPUT; break; default: errno = EINVAL; return NULL; } for(mode++; *mode; mode++) { switch(*mode) { case 'b': /* binary */ flags &= ~SIO_TEXT; break; case 'r': /* no record */ flags &= ~SIO_RECORDPOS; break; default: errno = EINVAL; return NULL; } } h = alloc(sizeof(*h)); h->point = 0; h->object = obj; addCodeReference(obj); stream = Snew(h, flags, &Sobjectfunctions); if ( (flags&SIO_TEXT) ) stream->encoding = ENC_WCHAR; /* see comment above */ else stream->encoding = ENC_OCTET; h->encoding = stream->encoding; return stream; } }