+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
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) {
// 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;
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();
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;
}