[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:11:26 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 8bd4f907f59cbc6db4a5c4e4dfcc5e7864a404a1
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Nov 13 17:39:46 2003 +0000

            Reviewed by Ken.
    
            - fixed 3452554 -- keyCode attribute for DOM events reports incorrect value
    
            * khtml/dom/dom2_events.cpp:
            (UIEvent::keyCode): Return the Windows key code for keydown and keyup events.
            But for other events, return the character code. This matches IE.
            (UIEvent::which): Same behavior for now; may need further refinement.
    
            * kwq/KWQEvent.h: Change QEvent to allow copying. The Qt version probably doesn't
            allow it, but for us it's no big deal. Our event objects are just data holders.
            (QKeyEvent::QKeyEvent): Change parameters; take an NSEvent and figure the rest out
            here. Except for now get the type, button state, and auto repeat flag from the caller
            because that's a smaller change from how things are done now. I'll take this the next
            step later.
            * kwq/KWQEvent.mm:
            (characterCode): Added. Extracts the character code from the string if it's exactly
            1 character long.
            (WindowsKeyCode): Added. Given an event, figures out the Windows key code.
            (QKeyEvent::QKeyEvent): Changed to get things from the NSEvent rather than having them
            passed individually. One change is that _ascii is now the Unicode value of the first
            character in the string. This causes us to return the Unicode value from keyCode for
            keypress events. Another change is that we now compute the Windows key code.
    
            * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::keyEvent): Change to use the new QKeyEvent
            constructor, passing in the NSEvent.
    
            * khtml/xml/dom2_eventsimpl.cpp: (KeyboardEventImpl::KeyboardEventImpl):
            In APPLE_CHANGES, copy the QKeyEvent using the copy constructor rather than
            listing the fields. This is easier to maintain when the list of fields changes.
    
            * khtml/rendering/render_form.cpp: (ComboBoxWidget::eventFilter): Put #if
            !APPLE_CHANGES around code that constructs a QKeyEvent. We don't ever run this
            code, but now we can't compile it either so we need the #if.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@5476 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 994f429..6d1b484 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,40 @@
+2003-11-13  Darin Adler  <darin at apple.com>
+
+        Reviewed by Ken.
+
+        - fixed 3452554 -- keyCode attribute for DOM events reports incorrect value
+
+        * khtml/dom/dom2_events.cpp:
+        (UIEvent::keyCode): Return the Windows key code for keydown and keyup events.
+        But for other events, return the character code. This matches IE.
+        (UIEvent::which): Same behavior for now; may need further refinement.
+
+        * kwq/KWQEvent.h: Change QEvent to allow copying. The Qt version probably doesn't
+        allow it, but for us it's no big deal. Our event objects are just data holders.
+        (QKeyEvent::QKeyEvent): Change parameters; take an NSEvent and figure the rest out
+        here. Except for now get the type, button state, and auto repeat flag from the caller
+        because that's a smaller change from how things are done now. I'll take this the next
+        step later.
+        * kwq/KWQEvent.mm:
+        (characterCode): Added. Extracts the character code from the string if it's exactly
+        1 character long.
+        (WindowsKeyCode): Added. Given an event, figures out the Windows key code. 
+        (QKeyEvent::QKeyEvent): Changed to get things from the NSEvent rather than having them
+        passed individually. One change is that _ascii is now the Unicode value of the first
+        character in the string. This causes us to return the Unicode value from keyCode for
+        keypress events. Another change is that we now compute the Windows key code.
+
+        * kwq/KWQKHTMLPart.mm: (KWQKHTMLPart::keyEvent): Change to use the new QKeyEvent
+        constructor, passing in the NSEvent.
+
+        * khtml/xml/dom2_eventsimpl.cpp: (KeyboardEventImpl::KeyboardEventImpl):
+        In APPLE_CHANGES, copy the QKeyEvent using the copy constructor rather than
+        listing the fields. This is easier to maintain when the list of fields changes.
+
+        * khtml/rendering/render_form.cpp: (ComboBoxWidget::eventFilter): Put #if
+        !APPLE_CHANGES around code that constructs a QKeyEvent. We don't ever run this
+        code, but now we can't compile it either so we need the #if.
+
 2003-11-12  David Hyatt  <hyatt at apple.com>
 
 	Fix for 3482132, incremental repainting for layout, i.e., only repaint areas that change when
diff --git a/WebCore/khtml/dom/dom2_events.cpp b/WebCore/khtml/dom/dom2_events.cpp
index b6b6b19..a0b5ccc 100644
--- a/WebCore/khtml/dom/dom2_events.cpp
+++ b/WebCore/khtml/dom/dom2_events.cpp
@@ -286,10 +286,16 @@ int UIEvent::keyCode() const
 	throw DOMException(DOMException::INVALID_STATE_ERR);
     
     KeyboardEventImpl *keyEvent = dynamic_cast<KeyboardEventImpl*>(impl);
-    if (keyEvent)
+    if (keyEvent) {
+#if APPLE_CHANGES
+        if (impl->id() == EventImpl::KEYDOWN_EVENT || impl->id() == EventImpl::KEYUP_EVENT) {
+            return keyEvent->qKeyEvent()->WindowsKeyCode();
+        }
+#endif
         return keyEvent->qKeyEvent()->ascii();
-    else
-        return 0;
+    }
+
+    return 0;
 }
 
 int UIEvent::pageX() const
@@ -347,10 +353,16 @@ int UIEvent::which() const
 
     // Note: This property supports both key events and mouse events
 
-    // Value is just ascii of key event
+    // Netscape's "which" returns a virtual key code for keydown and keyup, and a character code for keypress.
     KeyboardEventImpl *keyEvent = dynamic_cast<KeyboardEventImpl*>(impl);
-    if (keyEvent)
+    if (keyEvent) {
+#if APPLE_CHANGES
+        if (impl->id() == EventImpl::KEYDOWN_EVENT || impl->id() == EventImpl::KEYUP_EVENT) {
+            return keyEvent->qKeyEvent()->WindowsKeyCode();
+        }
+#endif
         return keyEvent->qKeyEvent()->ascii();
+    }
 
     // For khtml, the return values for left, middle and right mouse buttons are 0, 1, 2, respectively.
     // For the Netscape "which" property, the return values for left, middle and right mouse buttons are 1, 2, 3, respectively. 
diff --git a/WebCore/khtml/rendering/render_form.cpp b/WebCore/khtml/rendering/render_form.cpp
index 581f33e..995f5c4 100644
--- a/WebCore/khtml/rendering/render_form.cpp
+++ b/WebCore/khtml/rendering/render_form.cpp
@@ -946,6 +946,7 @@ bool ComboBoxWidget::event(QEvent *e)
 
 bool ComboBoxWidget::eventFilter(QObject *dest, QEvent *e)
 {
+#if !APPLE_CHANGES
     if (dest==listBox() &&  e->type()==QEvent::KeyPress)
     {
 	QKeyEvent *ke = static_cast<QKeyEvent *>(e);
@@ -966,6 +967,7 @@ bool ComboBoxWidget::eventFilter(QObject *dest, QEvent *e)
 	    return KComboBox::eventFilter(dest, e);
 	}
     }
+#endif
     return KComboBox::eventFilter(dest, e);
 }
 
diff --git a/WebCore/khtml/xml/dom2_eventsimpl.cpp b/WebCore/khtml/xml/dom2_eventsimpl.cpp
index e346856..dfddeef 100644
--- a/WebCore/khtml/xml/dom2_eventsimpl.cpp
+++ b/WebCore/khtml/xml/dom2_eventsimpl.cpp
@@ -525,7 +525,11 @@ KeyboardEventImpl::KeyboardEventImpl(QKeyEvent *key, AbstractViewImpl *view)
   : UIEventImpl(key->type() == QEvent::KeyRelease ? KEYUP_EVENT : key->isAutoRepeat() ? KHTML_KEYPRESS_EVENT : KEYDOWN_EVENT,
                 true,true,view,0)
 {
-    m_keyEvent = new QKeyEvent(key->type(), key->key(), key->ascii(), key->state(), key->text(), key->unmodifiedText(), key->isAutoRepeat(), key->count());
+#if APPLE_CHANGES
+    m_keyEvent = new QKeyEvent(*key);
+#else
+    m_keyEvent = new QKeyEvent(key->type(), key->key(), key->ascii(), key->state(), key->text(), key->isAutoRepeat(), key->count());
+#endif
     // Events are supposed to be accepted by default in Qt!
     // This line made QLineEdit's keyevents be ignored, so they were sent to the khtmlview
     // (and e.g. space would make it scroll down)
diff --git a/WebCore/kwq/KWQEvent.h b/WebCore/kwq/KWQEvent.h
index 501daa6..5560afa 100644
--- a/WebCore/kwq/KWQEvent.h
+++ b/WebCore/kwq/KWQEvent.h
@@ -31,6 +31,12 @@
 #include "KWQPointArray.h"
 #include "KWQString.h"
 
+#ifdef __OBJC__
+ at class NSEvent;
+#else
+class NSEvent;
+#endif
+
 class QEvent : public Qt {
 public:
 
@@ -58,9 +64,6 @@ public:
     Type type() const { return _type; }
 
 private:
-    QEvent(const QEvent &);
-    QEvent &operator=(const QEvent &);
-
     Type  _type;
 };
 
@@ -99,9 +102,10 @@ private:
 
 class QKeyEvent : public QEvent {
 public:
-    QKeyEvent(Type type, int key, int ascii, int buttonState, const QString &text = QString::null, const QString &unmodifiedText = QString::null, bool autoRepeat = FALSE, ushort countVal = 1);
+    QKeyEvent(NSEvent *, Type, int buttonState, bool autoRepeat);
 
     int key() const;
+    int WindowsKeyCode() const { return _WindowsKeyCode; }
     ButtonState state() const;
     void accept();
     void ignore();
@@ -112,7 +116,8 @@ public:
     QString unmodifiedText() const;
     int ascii() const;
     QString identifier() const;
- private:
+
+private:
     int _key;
     int _ascii;
     ButtonState _state;
@@ -122,6 +127,7 @@ public:
     bool _autoRepeat;
     int _count;
     bool _isAccepted;
+    int _WindowsKeyCode;
 };
 
 class QFocusEvent : public QEvent {
diff --git a/WebCore/kwq/KWQEvent.mm b/WebCore/kwq/KWQEvent.mm
index 125f4cf..15ce791 100644
--- a/WebCore/kwq/KWQEvent.mm
+++ b/WebCore/kwq/KWQEvent.mm
@@ -334,18 +334,355 @@ static QString identifierForKeyText(const QString &text)
     }
 }
 
-QKeyEvent::QKeyEvent(Type t, int key, int ascii, int buttonState, const QString &text, const QString &unmodifiedText, bool autoRepeat, ushort count)
+static int characterCode(NSString *characters)
+{
+    return [characters length] != 1 ? 0 : [characters characterAtIndex:0];
+}
+
+static int WindowsKeyCode(NSEvent *event)
+{
+    switch ([event keyCode]) {
+        // VK_NUMPAD0 (60) Numeric keypad 0 key
+        case 82: return 0x60;
+        // VK_NUMPAD1 (61) Numeric keypad 1 key
+        case 83: return 0x61;
+        // VK_NUMPAD2 (62) Numeric keypad 2 key
+        case 84: return 0x62;
+        // VK_NUMPAD3 (63) Numeric keypad 3 key
+        case 85: return 0x63;
+        // VK_NUMPAD4 (64) Numeric keypad 4 key
+        case 86: return 0x64;
+        // VK_NUMPAD5 (65) Numeric keypad 5 key
+        case 87: return 0x65;
+        // VK_NUMPAD6 (66) Numeric keypad 6 key
+        case 88: return 0x66;
+        // VK_NUMPAD7 (67) Numeric keypad 7 key
+        case 89: return 0x67;
+        // VK_NUMPAD8 (68) Numeric keypad 8 key
+        case 91: return 0x68;
+        // VK_NUMPAD9 (69) Numeric keypad 9 key
+        case 92: return 0x69;
+        // VK_MULTIPLY (6A) Multiply key
+        case 67: return 0x6A;
+        // VK_ADD (6B) Add key
+        case 69: return 0x6B;
+
+        // VK_SUBTRACT (6D) Subtract key
+        case 78: return 0x6D;
+        // VK_DECIMAL (6E) Decimal key
+        case 65: return 0x6E;
+        // VK_DIVIDE (6F) Divide key
+        case 75: return 0x6F;
+     }
+
+    switch (characterCode([event charactersIgnoringModifiers])) {
+        // VK_LBUTTON (01) Left mouse button
+        // VK_RBUTTON (02) Right mouse button
+        // VK_CANCEL (03) Control-break processing
+        // VK_MBUTTON (04) Middle mouse button (three-button mouse)
+        // VK_XBUTTON1 (05)
+        // VK_XBUTTON2 (06)
+
+        // VK_BACK (08) BACKSPACE key
+        case 8: case 0x7F: return 0x08;
+        // VK_TAB (09) TAB key
+        case 9: return 0x09;
+
+        // VK_CLEAR (0C) CLEAR key
+        // handled by key code above
+
+        // VK_RETURN (0D)
+        case 0xD: case 3: return 0x0D;
+
+        // VK_SHIFT (10) SHIFT key
+        // VK_CONTROL (11) CTRL key
+        // VK_MENU (12) ALT key
+
+        // VK_PAUSE (13) PAUSE key
+        case NSPauseFunctionKey: return 0x13;
+
+        // VK_CAPITAL (14) CAPS LOCK key
+        // VK_KANA (15) Input Method Editor (IME) Kana mode
+        // VK_HANGUEL (15) IME Hanguel mode (maintained for compatibility; use VK_HANGUL)
+        // VK_HANGUL (15) IME Hangul mode
+        // VK_JUNJA (17) IME Junja mode
+        // VK_FINAL (18) IME final mode
+        // VK_HANJA (19) IME Hanja mode
+        // VK_KANJI (19) IME Kanji mode
+
+        // VK_ESCAPE (1B) ESC key
+        case 0x1B: return 0x1B;
+
+        // VK_CONVERT (1C) IME convert
+        // VK_NONCONVERT (1D) IME nonconvert
+        // VK_ACCEPT (1E) IME accept
+        // VK_MODECHANGE (1F) IME mode change request
+
+        // VK_SPACE (20) SPACEBAR
+        case ' ': return 0x20;
+        // VK_PRIOR (21) PAGE UP key
+        case NSPageUpFunctionKey: return 0x21;
+        // VK_NEXT (22) PAGE DOWN key
+        case NSPageDownFunctionKey: return 0x22;
+        // VK_END (23) END key
+        case NSEndFunctionKey: return 0x23;
+        // VK_HOME (24) HOME key
+        case NSHomeFunctionKey: return 0x24;
+        // VK_LEFT (25) LEFT ARROW key
+        case NSLeftArrowFunctionKey: return 0x25;
+        // VK_UP (26) UP ARROW key
+        case NSUpArrowFunctionKey: return 0x26;
+        // VK_RIGHT (27) RIGHT ARROW key
+        case NSRightArrowFunctionKey: return 0x27;
+        // VK_DOWN (28) DOWN ARROW key
+        case NSDownArrowFunctionKey: return 0x28;
+        // VK_SELECT (29) SELECT key
+        case NSSelectFunctionKey: return 0x29;
+        // VK_PRINT (2A) PRINT key
+        case NSPrintFunctionKey: return 0x2A;
+        // VK_EXECUTE (2B) EXECUTE key
+        case NSExecuteFunctionKey: return 0x2B;
+        // VK_SNAPSHOT (2C) PRINT SCREEN key
+        case NSPrintScreenFunctionKey: return 0x2C;
+        // VK_INSERT (2D) INS key
+        case NSInsertFunctionKey: case NSHelpFunctionKey: return 0x2D;
+        // VK_DELETE (2E) DEL key
+        case NSDeleteFunctionKey: return 0x2E;
+
+        // VK_HELP (2F) HELP key
+
+        //  (30) 0 key
+        case '0': case ')': return 0x30;
+        //  (31) 1 key
+        case '1': case '!': return 0x31;
+        //  (32) 2 key
+        case '2': case '@': return 0x32;
+        //  (33) 3 key
+        case '3': case '#': return 0x33;
+        //  (34) 4 key
+        case '4': case '$': return 0x34;
+        //  (35) 5 key
+        case '5': case '%': return 0x35;
+        //  (36) 6 key
+        case '6': case '^': return 0x36;
+        //  (37) 7 key
+        case '7': case '&': return 0x37;
+        //  (38) 8 key
+        case '8': case '*': return 0x38;
+        //  (39) 9 key
+        case '9': case '(': return 0x39;
+        //  (41) A key
+        case 'a': case 'A': return 0x41;
+        //  (42) B key
+        case 'b': case 'B': return 0x42;
+        //  (43) C key
+        case 'c': case 'C': return 0x43;
+        //  (44) D key
+        case 'd': case 'D': return 0x44;
+        //  (45) E key
+        case 'e': case 'E': return 0x45;
+        //  (46) F key
+        case 'f': case 'F': return 0x46;
+        //  (47) G key
+        case 'g': case 'G': return 0x47;
+        //  (48) H key
+        case 'h': case 'H': return 0x48;
+        //  (49) I key
+        case 'i': case 'I': return 0x49;
+        //  (4A) J key
+        case 'j': case 'J': return 0x4A;
+        //  (4B) K key
+        case 'k': case 'K': return 0x4B;
+        //  (4C) L key
+        case 'l': case 'L': return 0x4C;
+        //  (4D) M key
+        case 'm': case 'M': return 0x4D;
+        //  (4E) N key
+        case 'n': case 'N': return 0x4E;
+        //  (4F) O key
+        case 'o': case 'O': return 0x4F;
+        //  (50) P key
+        case 'p': case 'P': return 0x50;
+        //  (51) Q key
+        case 'q': case 'Q': return 0x51;
+        //  (52) R key
+        case 'r': case 'R': return 0x52;
+        //  (53) S key
+        case 's': case 'S': return 0x53;
+        //  (54) T key
+        case 't': case 'T': return 0x54;
+        //  (55) U key
+        case 'u': case 'U': return 0x55;
+        //  (56) V key
+        case 'v': case 'V': return 0x56;
+        //  (57) W key
+        case 'w': case 'W': return 0x57;
+        //  (58) X key
+        case 'x': case 'X': return 0x58;
+        //  (59) Y key
+        case 'y': case 'Y': return 0x59;
+        //  (5A) Z key
+        case 'z': case 'Z': return 0x5A;
+
+        // VK_LWIN (5B) Left Windows key (Microsoft Natural keyboard)
+        // VK_RWIN (5C) Right Windows key (Natural keyboard)
+        // VK_APPS (5D) Applications key (Natural keyboard)
+        // VK_SLEEP (5F) Computer Sleep key
+
+        // VK_NUMPAD0 (60) Numeric keypad 0 key
+        // VK_NUMPAD1 (61) Numeric keypad 1 key
+        // VK_NUMPAD2 (62) Numeric keypad 2 key
+        // VK_NUMPAD3 (63) Numeric keypad 3 key
+        // VK_NUMPAD4 (64) Numeric keypad 4 key
+        // VK_NUMPAD5 (65) Numeric keypad 5 key
+        // VK_NUMPAD6 (66) Numeric keypad 6 key
+        // VK_NUMPAD7 (67) Numeric keypad 7 key
+        // VK_NUMPAD8 (68) Numeric keypad 8 key
+        // VK_NUMPAD9 (69) Numeric keypad 9 key
+        // VK_MULTIPLY (6A) Multiply key
+        // VK_ADD (6B) Add key
+        // handled by key code above
+
+        // VK_SEPARATOR (6C) Separator key
+
+        // VK_SUBTRACT (6D) Subtract key
+        // VK_DECIMAL (6E) Decimal key
+        // VK_DIVIDE (6F) Divide key
+        // handled by key code above
+
+        // VK_F1 (70) F1 key
+        case NSF1FunctionKey: return 0x70;
+        // VK_F2 (71) F2 key
+        case NSF2FunctionKey: return 0x71;
+        // VK_F3 (72) F3 key
+        case NSF3FunctionKey: return 0x72;
+        // VK_F4 (73) F4 key
+        case NSF4FunctionKey: return 0x73;
+        // VK_F5 (74) F5 key
+        case NSF5FunctionKey: return 0x74;
+        // VK_F6 (75) F6 key
+        case NSF6FunctionKey: return 0x75;
+        // VK_F7 (76) F7 key
+        case NSF7FunctionKey: return 0x76;
+        // VK_F8 (77) F8 key
+        case NSF8FunctionKey: return 0x77;
+        // VK_F9 (78) F9 key
+        case NSF9FunctionKey: return 0x78;
+        // VK_F10 (79) F10 key
+        case NSF10FunctionKey: return 0x79;
+        // VK_F11 (7A) F11 key
+        case NSF11FunctionKey: return 0x7A;
+        // VK_F12 (7B) F12 key
+        case NSF12FunctionKey: return 0x7B;
+        // VK_F13 (7C) F13 key
+        case NSF13FunctionKey: return 0x7C;
+        // VK_F14 (7D) F14 key
+        case NSF14FunctionKey: return 0x7D;
+        // VK_F15 (7E) F15 key
+        case NSF15FunctionKey: return 0x7E;
+        // VK_F16 (7F) F16 key
+        case NSF16FunctionKey: return 0x7F;
+        // VK_F17 (80H) F17 key
+        case NSF17FunctionKey: return 0x80;
+        // VK_F18 (81H) F18 key
+        case NSF18FunctionKey: return 0x81;
+        // VK_F19 (82H) F19 key
+        case NSF19FunctionKey: return 0x82;
+        // VK_F20 (83H) F20 key
+        case NSF20FunctionKey: return 0x83;
+        // VK_F21 (84H) F21 key
+        case NSF21FunctionKey: return 0x84;
+        // VK_F22 (85H) F22 key
+        case NSF22FunctionKey: return 0x85;
+        // VK_F23 (86H) F23 key
+        case NSF23FunctionKey: return 0x86;
+        // VK_F24 (87H) F24 key
+        case NSF24FunctionKey: return 0x87;
+
+        // VK_NUMLOCK (90) NUM LOCK key
+
+        // VK_SCROLL (91) SCROLL LOCK key
+        case NSScrollLockFunctionKey: return 0x91;
+
+        // VK_LSHIFT (A0) Left SHIFT key
+        // VK_RSHIFT (A1) Right SHIFT key
+        // VK_LCONTROL (A2) Left CONTROL key
+        // VK_RCONTROL (A3) Right CONTROL key
+        // VK_LMENU (A4) Left MENU key
+        // VK_RMENU (A5) Right MENU key
+        // VK_BROWSER_BACK (A6) Windows 2000/XP: Browser Back key
+        // VK_BROWSER_FORWARD (A7) Windows 2000/XP: Browser Forward key
+        // VK_BROWSER_REFRESH (A8) Windows 2000/XP: Browser Refresh key
+        // VK_BROWSER_STOP (A9) Windows 2000/XP: Browser Stop key
+        // VK_BROWSER_SEARCH (AA) Windows 2000/XP: Browser Search key
+        // VK_BROWSER_FAVORITES (AB) Windows 2000/XP: Browser Favorites key
+        // VK_BROWSER_HOME (AC) Windows 2000/XP: Browser Start and Home key
+        // VK_VOLUME_MUTE (AD) Windows 2000/XP: Volume Mute key
+        // VK_VOLUME_DOWN (AE) Windows 2000/XP: Volume Down key
+        // VK_VOLUME_UP (AF) Windows 2000/XP: Volume Up key
+        // VK_MEDIA_NEXT_TRACK (B0) Windows 2000/XP: Next Track key
+        // VK_MEDIA_PREV_TRACK (B1) Windows 2000/XP: Previous Track key
+        // VK_MEDIA_STOP (B2) Windows 2000/XP: Stop Media key
+        // VK_MEDIA_PLAY_PAUSE (B3) Windows 2000/XP: Play/Pause Media key
+        // VK_LAUNCH_MAIL (B4) Windows 2000/XP: Start Mail key
+        // VK_LAUNCH_MEDIA_SELECT (B5) Windows 2000/XP: Select Media key
+        // VK_LAUNCH_APP1 (B6) Windows 2000/XP: Start Application 1 key
+        // VK_LAUNCH_APP2 (B7) Windows 2000/XP: Start Application 2 key
+
+        // VK_OEM_1 (BA) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ';:' key
+        case ';': case ':': return 0xBA;
+        // VK_OEM_PLUS (BB) Windows 2000/XP: For any country/region, the '+' key
+        case '=': case '+': return 0xBB;
+        // VK_OEM_COMMA (BC) Windows 2000/XP: For any country/region, the ',' key
+        case ',': case '<': return 0xBC;
+        // VK_OEM_MINUS (BD) Windows 2000/XP: For any country/region, the '-' key
+        case '-': case '_': return 0xBD;
+        // VK_OEM_PERIOD (BE) Windows 2000/XP: For any country/region, the '.' key
+        case '.': case '>': return 0xBE;
+        // VK_OEM_2 (BF) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '/?' key
+        case '/': case '?': return 0xBF;
+        // VK_OEM_3 (C0) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '`~' key
+        case '`': case '~': return 0xC0;
+        // VK_OEM_4 (DB) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '[{' key
+        case '[': case '{': return 0xDB;
+        // VK_OEM_5 (DC) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the '\|' key
+        case '\\': case '|': return 0xDC;
+        // VK_OEM_6 (DD) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the ']}' key
+        case ']': case '}': return 0xDD;
+        // VK_OEM_7 (DE) Used for miscellaneous characters; it can vary by keyboard. Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
+        case '\'': case '"': return 0xDE;
+
+        // VK_OEM_8 (DF) Used for miscellaneous characters; it can vary by keyboard.
+        // VK_OEM_102 (E2) Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
+        // VK_PROCESSKEY (E5) Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
+        // VK_PACKET (E7) Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT,SendInput, WM_KEYDOWN, and WM_KEYUP
+        // VK_ATTN (F6) Attn key
+        // VK_CRSEL (F7) CrSel key
+        // VK_EXSEL (F8) ExSel key
+        // VK_EREOF (F9) Erase EOF key
+        // VK_PLAY (FA) Play key
+        // VK_ZOOM (FB) Zoom key
+        // VK_NONAME (FC) Reserved for future use
+        // VK_PA1 (FD) PA1 key
+        // VK_OEM_CLEAR (FE) Clear key
+    }
+
+    return 0;
+ }
+ 
+QKeyEvent::QKeyEvent(NSEvent *event, Type t, int buttonState, bool autoRepeat)
     : QEvent(t),
-      _key(key),
-      _ascii(ascii),
+      _key([event keyCode]),
+      _ascii(characterCode([event characters])),
       _state((ButtonState)buttonState),
-      _text(text),
-      _unmodifiedText(unmodifiedText),
+      _text(QString::fromNSString([event characters])),
+      _unmodifiedText(QString::fromNSString([event charactersIgnoringModifiers])),
+      _identifier(identifierForKeyText(_unmodifiedText)),
       _autoRepeat(autoRepeat),
-      _count(count),
-      _isAccepted(false)
+      _count(1),
+      _isAccepted(false),
+      _WindowsKeyCode(::WindowsKeyCode(event))
 {
-    _identifier = identifierForKeyText(unmodifiedText);
 }
 
 int QKeyEvent::key() const
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index 939b24f..62f4cac 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -1462,28 +1462,16 @@ bool KWQKHTMLPart::keyEvent(NSEvent *event)
     NSEvent *oldCurrentEvent = _currentEvent;
     _currentEvent = [event retain];
 
-    const char *characters = [[event characters] lossyCString];
-    int ascii = (characters != nil && strlen(characters) == 1) ? characters[0] : 0;
-
-    QKeyEvent qEvent([event type] == NSKeyDown ? QEvent::KeyPress : QEvent::KeyRelease,
-		     [event keyCode],
-		     ascii,
-		     stateForCurrentEvent(),
-		     QString::fromNSString([event characters]),
-                     QString::fromNSString([event charactersIgnoringModifiers]),
-		     [event isARepeat]);
+    QEvent::Type type = [event type] == NSKeyDown ? QEvent::KeyPress : QEvent::KeyRelease;
+    QKeyEvent qEvent(event, type, stateForCurrentEvent(), [event isARepeat]);
     bool result = !node->dispatchKeyEvent(&qEvent);
 
     // We want to send both a down and a press for the initial key event.
-    // This is a temporary hack; we need to do this a better way.
+    // To get KHTML to do this, we send a second KeyPress QKeyEvent with "is repeat" set to true,
+    // which causes it to send a press to the DOM.
+    // That's not a great hack; it would be good to do this in a better way.
     if ([event type] == NSKeyDown && ![event isARepeat]) {
-	QKeyEvent qEvent(QEvent::KeyPress,
-			 [event keyCode],
-			 ascii,
-			 stateForCurrentEvent(),
-                         QString::fromNSString([event characters]),
-                         QString::fromNSString([event charactersIgnoringModifiers]),
-			 true);
+	QKeyEvent qEvent(event, QEvent::KeyPress, stateForCurrentEvent(), true);
         if (!node->dispatchKeyEvent(&qEvent)) {
 	    result = true;
 	}

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list