[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sc-dev] [ ¿commit? ] SCTextView-keyDownA ction call




are you wanting to add this for just SCViews or also for Document?

this would be a change for Document (SCTextView).
Whether SCViews should behave like this is still to be discussed.

OK for Documents I don't really care.
You have to be careful that any change you make does not break Japanese input >method.

how do I test this?


I prefer the following writing as it does not introduce another flag:

yes this is better.
I'll commit this.






- (void) keyUp: (NSEvent*) event
{
    NSString *characters = [event characters];
	if(compiledOK){
		unsigned int modifiers = [event modifierFlags];
		unichar character = 0;
		if([characters length] > 0) {
			character = [characters characterAtIndex: 0];
		}
		unsigned int keycode = [event keyCode];

		MyDocument * doc = [self delegate];
		PyrObject * pobj = [doc getSCObject];
		PyrSymbol *method = getsym("keyUp");

		if (pobj) {
			pthread_mutex_lock (&gLangMutex);
			if(NotNil(pobj->slots+2)){
				VMGlobals *g = gMainVMGlobals;
				g->canCallOS = true;
				++g->sp;  SetObject(g->sp, pobj);
				++g->sp;  SetChar(g->sp, character);
				++g->sp;  SetInt(g->sp, modifiers);
				++g->sp;  SetInt(g->sp, character);
				++g->sp;  SetInt(g->sp, keycode);
				runInterpreter(g, method, 5);
				g->canCallOS = false;
			}
			pthread_mutex_unlock (&gLangMutex);
		}
	}
    if ([characters isEqual: @"\03"]) {
} else if (([characters isEqual: @"\n"] || [characters isEqual: @"\r"]) && !([event modifierFlags] & NSAlternateKeyMask)) {
    } else {
		[super keyUp: event];
    }
}

- (void) keyDown: (NSEvent*) event
{
    NSString *characters = [event characters];
	if(compiledOK){
		unsigned int modifiers = [event modifierFlags];
		unichar character = 0;
		if([characters length] > 0) {
			character = [characters characterAtIndex: 0];
		}
		unsigned int keycode = [event keyCode];

		MyDocument * doc = [self delegate];
		PyrObject * pobj = [doc getSCObject];

		if (pobj) {
			pthread_mutex_lock (&gLangMutex);
			if (compiledOK) { // must test again inside the lock
				PyrSymbol *method = getsym("keyDown");
				if(NotNil(pobj->slots+1)){
					//pthread_mutex_lock (&gLangMutex);
					VMGlobals *g = gMainVMGlobals;
					g->canCallOS = true;
					++g->sp;  SetObject(g->sp, pobj);
					++g->sp;  SetChar(g->sp, character);
					++g->sp;  SetInt(g->sp, modifiers);
					++g->sp;  SetInt(g->sp, character);
					++g->sp;  SetInt(g->sp, keycode);
					runInterpreter(g, method, 5);
					g->canCallOS = false;
				}
			}
			pthread_mutex_unlock (&gLangMutex);
		}
	}
    if ([characters isEqual: @"\03"]) {
        [[self delegate] executeSelection: self];
} else if (([characters isEqual: @"\n"] || [characters isEqual: @"\r"]) && !([event modifierFlags] & NSAlternateKeyMask)) {
        [self autoIndent: event];
    } else {
        //call lang
		[super keyDown: event];
    }
}

_______________________________________________
sc-dev mailing list
sc-dev@xxxxxxxxxxxxxxx
http://www.create.ucsb.edu/mailman/listinfo/sc-dev

--








.