Bug 399740 FAYT (find as you type) fails r=josh, sr=roc, aM9=beltzner

This commit is contained in:
masayuki@d-toybox.com 2007-10-24 23:51:10 -07:00
parent 87753a110d
commit 32e1ab640f

View File

@ -3234,12 +3234,24 @@ enum
};
static PRBool IsPrintableChar(PRUnichar aChar)
{
return (aChar >= 0x20 && aChar <= 0x7E) || aChar >= 0xA0;
}
static PRUint32 GetGeckoKeyCodeFromChar(PRUnichar aChar)
{
// We don't support the key code for non-ASCII characters
if (aChar > 0x7F)
if (aChar > 0x7E)
return 0;
if (aChar >= 'a' && aChar <= 'z') // lowercase
return PRUint32(toupper(aChar));
else if (aChar >= 'A' && aChar <= 'Z') // uppercase
return PRUint32(aChar);
else if (aChar >= '0' && aChar <= '9')
return PRUint32(aChar - '0' + NS_VK_0);
switch (aChar)
{
case kReturnCharCode:
@ -3265,16 +3277,15 @@ static PRUint32 GetGeckoKeyCodeFromChar(PRUnichar aChar)
case '/': return NS_VK_SLASH;
case '`': return NS_VK_BACK_QUOTE;
case '\t': return NS_VK_TAB;
case '-': return NS_VK_SUBTRACT;
case '+': return NS_VK_ADD;
default:
if (aChar >= 'a' && aChar <= 'z') // lowercase
return PRUint32(toupper(aChar));
else if (aChar >= 'A' && aChar <= 'Z') // uppercase
return PRUint32(aChar);
}
if (!IsPrintableChar(aChar))
NS_WARNING("GetGeckoKeyCodeFromChar has failed.");
return 0;
}
}
static PRUint32 ConvertMacToGeckoKeyCode(UInt32 keyCode, nsKeyEvent* aKeyEvent, NSString* characters)
@ -3593,6 +3604,7 @@ static PRBool IsSpecialGeckoKey(UInt32 macKeyCode)
nsKeyEvent geckoEvent(PR_TRUE, NS_KEY_PRESS, mGeckoChild);
geckoEvent.time = PR_IntervalNow();
geckoEvent.charCode = bufPtr[0]; // gecko expects OS-translated unicode
geckoEvent.keyCode = 0;
geckoEvent.isChar = PR_TRUE;
if (mKeyHandled)
geckoEvent.flags |= NS_EVENT_FLAG_NO_DEFAULT;
@ -3606,12 +3618,18 @@ static PRBool IsSpecialGeckoKey(UInt32 macKeyCode)
ConvertCocoaKeyEventToMacEvent(mCurKeyEvent, macEvent);
geckoEvent.nativeMsg = &macEvent;
geckoEvent.isShift = ([mCurKeyEvent modifierFlags] & NSShiftKeyMask) != 0;
if (!IsPrintableChar(geckoEvent.charCode)) {
geckoEvent.keyCode =
ConvertMacToGeckoKeyCode([mCurKeyEvent keyCode], &geckoEvent,
[mCurKeyEvent charactersIgnoringModifiers]);
geckoEvent.charCode = 0;
}
} else {
// Note that insertText is not called only at key pressing.
if (!IsPrintableChar(geckoEvent.charCode)) {
geckoEvent.keyCode = GetGeckoKeyCodeFromChar(geckoEvent.charCode);
geckoEvent.charCode = 0;
}
}
mGeckoChild->DispatchWindowEvent(geckoEvent);