| Index: webkit/glue/webinputevent_mac.mm
|
| ===================================================================
|
| --- webkit/glue/webinputevent_mac.mm (revision 10793)
|
| +++ webkit/glue/webinputevent_mac.mm (working copy)
|
| @@ -1,6 +1,28 @@
|
| -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| +/*
|
| + * Copyright (C) 2004, 2006, 2007 Apple Inc. All rights reserved.
|
| + * Copyright (C) 2006-2009 Google Inc.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions
|
| + * are met:
|
| + * 1. Redistributions of source code must retain the above copyright
|
| + * notice, this list of conditions and the following disclaimer.
|
| + * 2. Redistributions in binary form must reproduce the above copyright
|
| + * notice, this list of conditions and the following disclaimer in the
|
| + * documentation and/or other materials provided with the distribution.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
|
| + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
|
| + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| + */
|
|
|
| #import <Cocoa/Cocoa.h>
|
|
|
| @@ -141,7 +163,7 @@
|
| // 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 propageage
|
| +// would propagate.
|
|
|
| namespace WebCore {
|
|
|
| @@ -923,18 +945,8 @@
|
| // 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)
|
| @@ -952,12 +964,51 @@
|
| if (([event type] != NSFlagsChanged) && [event isARepeat])
|
| modifiers |= IS_AUTO_REPEAT;
|
|
|
| - NSString* textString = WebCore::textFromEvent(event);
|
| - NSString* unmodifiedStr = WebCore::unmodifiedTextFromEvent(event);
|
| - NSString* identStr = WebCore::keyIdentifierForKeyEvent(event);
|
| - FillVectorFromNSString(&text, textString);
|
| - FillVectorFromNSString(&unmodified_text, unmodifiedStr);
|
| - FillVectorFromNSString(&key_identifier, identStr);
|
| + windows_key_code = WebCore::windowsKeyCodeForKeyEvent(event);
|
| + native_key_code = [event keyCode];
|
|
|
| - key_code = WebCore::windowsKeyCodeForKeyEvent(event);
|
| + NSString* text_str = WebCore::textFromEvent(event);
|
| + NSString* unmodified_str = WebCore::unmodifiedTextFromEvent(event);
|
| + NSString* identifier_str = 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') {
|
| + text_str = @"\r";
|
| + unmodified_str = @"\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 ([text_str isEqualToString:@"\x7F"])
|
| + text_str = @"\x8";
|
| + if ([unmodified_str isEqualToString:@"\x7F"])
|
| + unmodified_str = @"\x8";
|
| + // Always use 9 for tab -- we don't want to use AppKit's different character
|
| + // for shift-tab.
|
| + if (windows_key_code == 9) {
|
| + text_str = @"\x9";
|
| + unmodified_str = @"\x9";
|
| + }
|
| +
|
| + // End Apple code.
|
| +
|
| + memset(&text, 0, sizeof(text));
|
| + memset(&unmodified_text, 0, sizeof(unmodified_text));
|
| + memset(&key_identifier, 0, sizeof(key_identifier));
|
| +
|
| + if ([text_str length] < kTextLengthCap &&
|
| + [unmodified_str length] < kTextLengthCap) {
|
| + [text_str getCharacters:&text[0]];
|
| + [unmodified_str getCharacters:&unmodified_text[0]];
|
| + } else {
|
| + LOG(ERROR) << "Event had text too long; dropped";
|
| + }
|
| + [identifier_str getCString:&key_identifier[0]
|
| + maxLength:kIdentifierLengthCap
|
| + encoding:NSASCIIStringEncoding];
|
| }
|
|
|