summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webinputevent_mac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/glue/webinputevent_mac.mm')
-rw-r--r--webkit/glue/webinputevent_mac.mm62
1 files changed, 17 insertions, 45 deletions
diff --git a/webkit/glue/webinputevent_mac.mm b/webkit/glue/webinputevent_mac.mm
index 1a324f8c..3090d96 100644
--- a/webkit/glue/webinputevent_mac.mm
+++ b/webkit/glue/webinputevent_mac.mm
@@ -141,7 +141,7 @@ WebMouseWheelEvent::WebMouseWheelEvent(NSEvent *event, NSView* view) {
// that. As a result we have to use NSString here exclusively and thus tweak
// the code so it's not re-usable as-is. One possiblity would be to make the
// upstream code only use NSString, but I'm not certain how far that change
-// would propagate.
+// would propageage
namespace WebCore {
@@ -923,8 +923,18 @@ static NSString* keyIdentifierForKeyEvent(NSEvent* event)
// End Apple code.
// ---------------------------------------------------------------------
+// Helper that copies the unichar characters of a NSString into a suitably
+// resized vector. The vector will be null terminated and thus even if the
+// string is empty or nil, it array will have a NUL.
+static void FillVectorFromNSString(std::vector<unsigned short>* v,
+ NSString* str) {
+ const unsigned int length = [str length];
+ v->reserve(length + 1);
+ [str getCharacters:&(*v)[0]];
+ (*v)[length] = '\0';
+}
+
WebKeyboardEvent::WebKeyboardEvent(NSEvent *event) {
- system_key = false;
type = WebCore::isKeyUpEvent(event) ? KEY_UP : KEY_DOWN;
if ([event modifierFlags] & NSControlKeyMask)
@@ -942,50 +952,12 @@ WebKeyboardEvent::WebKeyboardEvent(NSEvent *event) {
if (([event type] != NSFlagsChanged) && [event isARepeat])
modifiers |= IS_AUTO_REPEAT;
- windows_key_code = WebCore::windowsKeyCodeForKeyEvent(event);
- native_key_code = [event keyCode];
-
NSString* textString = WebCore::textFromEvent(event);
NSString* unmodifiedStr = WebCore::unmodifiedTextFromEvent(event);
NSString* identStr = WebCore::keyIdentifierForKeyEvent(event);
-
- // Begin Apple code, copied from KeyEventMac.mm
-
- // Always use 13 for Enter/Return -- we don't want to use AppKit's
- // different character for Enter.
- if (windows_key_code == '\r') {
- textString = @"\r";
- unmodifiedStr = @"\r";
- }
-
- // The adjustments below are only needed in backward compatibility mode,
- // but we cannot tell what mode we are in from here.
-
- // Turn 0x7F into 8, because backspace needs to always be 8.
- if ([textString isEqualToString:@"\x7F"])
- textString = @"\x8";
- if ([unmodifiedStr isEqualToString:@"\x7F"])
- unmodifiedStr = @"\x8";
- // Always use 9 for tab -- we don't want to use AppKit's different character for shift-tab.
- if (windows_key_code == 9) {
- textString = @"\x9";
- unmodifiedStr = @"\x9";
- }
-
- // End Apple code.
-
- memset(&text, 0, sizeof(text));
- memset(&unmodified_text, 0, sizeof(unmodified_text));
- memset(&key_identifier, 0, sizeof(key_identifier));
-
- if ([textString length] < kTextLengthCap &&
- [unmodifiedStr length] < kTextLengthCap) {
- [textString getCharacters:&text[0]];
- [unmodifiedStr getCharacters:&unmodified_text[0]];
- } else {
- LOG(ERROR) << "Event had text too long; dropped";
- }
- [identStr getCString:&key_identifier[0]
- maxLength:kIdentifierLengthCap
- encoding:NSASCIIStringEncoding];
+ FillVectorFromNSString(&text, textString);
+ FillVectorFromNSString(&unmodified_text, unmodifiedStr);
+ FillVectorFromNSString(&key_identifier, identStr);
+
+ key_code = WebCore::windowsKeyCodeForKeyEvent(event);
}