<rdar://problem/5552221> REGRESSION(310A24-ToT): Shortcut key disable. (15604)
authoradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 25 Oct 2007 02:40:58 +0000 (02:40 +0000)
committeradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 25 Oct 2007 02:40:58 +0000 (02:40 +0000)
        Reviewed by Adam.

        * WebView.cpp:
        (WebView::handleEditingKeyboardEvent): don't handle system key events as text input
        (WebView::keyDown): only remove WM_SYSCHAR message from the queue if we handle it.
        For WM_SYSCHAR message that we don't handle, let it stay in the queue and return
        false to let windows handle it.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27012 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/win/ChangeLog
WebKit/win/WebView.cpp

index 5296903758aaf2f445e67b4086c62685bf6651f5..f2a6d2253702c5cb825132e3a6899282dc7ca50f 100644 (file)
@@ -1,3 +1,15 @@
+2007-10-24  Ada Chan  <adachan@apple.com>
+
+        <rdar://problem/5552221> REGRESSION(310A24-ToT): Shortcut key disable. (15604)
+
+        Reviewed by Adam.
+
+        * WebView.cpp:
+        (WebView::handleEditingKeyboardEvent): don't handle system key events as text input
+        (WebView::keyDown): only remove WM_SYSCHAR message from the queue if we handle it.
+        For WM_SYSCHAR message that we don't handle, let it stay in the queue and return 
+        false to let windows handle it.
+
 2007-10-24  Brady Eidson  <beidson@apple.com>
 
         Reviewed by Anders
index 3ed71581ce72f1d0d7115b5747d6a19ccfbad5b7..3fc96643fa84840f6d4f7ca71570509a2dbd1715 100644 (file)
@@ -988,7 +988,7 @@ bool WebView::handleEditingKeyboardEvent(KeyboardEvent* evt)
         if (frame->editor()->execCommand(command, evt))
             return true;
 
-    if (!evt->keyEvent())
+    if (!evt->keyEvent() || evt->altKey())  // do not treat this as text input if it's a system key event (alt key is down)
         return false;
 
     if (evt->keyEvent()->text().length() == 1) {
@@ -1015,7 +1015,7 @@ bool WebView::keyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown)
     // If the next message is a WM_CHAR message, then take it out of the queue, and use
     // the message parameters to get the character code to construct the PlatformKeyboardEvent.
     if (systemKeyDown) {
-        if (::PeekMessage(&msg, m_viewWindow, WM_SYSCHAR, WM_SYSCHAR, PM_REMOVE)) 
+        if (::PeekMessage(&msg, m_viewWindow, WM_SYSCHAR, WM_SYSCHAR, PM_NOREMOVE))     // don't remove sys key message from the windows message queue until we know we can handle it
             m_currentCharacterCode = (UChar)msg.wParam;
     } else if (::PeekMessage(&msg, m_viewWindow, WM_CHAR, WM_CHAR, PM_REMOVE)) 
         m_currentCharacterCode = (UChar)msg.wParam;
@@ -1032,7 +1032,7 @@ bool WebView::keyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown)
     bool handled = frame->eventHandler()->keyEvent(keyEvent);
     m_inIMEKeyDown = false;
     if (handled)
-        return true;
+        goto exit;
 
     // We need to handle back/forward using either Backspace(+Shift) or Ctrl+Left/Right Arrow keys.
     int windowsKeyCode = keyEvent.WindowsKeyCode();
@@ -1082,13 +1082,18 @@ bool WebView::keyDown(WPARAM virtualKeyCode, LPARAM keyData, bool systemKeyDown)
             direction = ScrollDown;
             break;
         default:
-            // We return true here so the WM_CHAR handler won't pick up unhandled messages.
-            return true;
+            // We want to let Windows handle the WM_SYSCHAR event if we can't handle it
+            // We do want to return true for regular key down case so the WM_CHAR handler won't pick up unhandled messages
+            return !systemKeyDown;
     }
 
     if (!frame->eventHandler()->scrollOverflow(direction, granularity))
         frame->view()->scroll(direction, granularity);
 
+exit:
+    if (systemKeyDown)  // remove sys key message if we have handled it
+        ::PeekMessage(&msg, m_viewWindow, WM_SYSCHAR, WM_SYSCHAR, PM_REMOVE);
+
     return true;
 }