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

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



it would be important to have the keyDownAction / keyUpAction called on any key down or up. Currently it is not called on enter and tab.

tab should be working. enter and return are excluded.

On Dec 28, 2004, at 2:00 AM, Julian Rohrhuber wrote:

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.

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

- (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);
+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");
+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];
}
}