+2007-12-16 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16462
+ REGRESSION: access keys broken on Windows
+
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleAccessKey):
+ (WebCore::EventHandler::keyEvent):
+ * page/EventHandler.h:
+ Make handleAccessKey a class method; rely on WebKit to call it on Windows and wxWidgets.
+
2007-12-16 Xan Lopez <xan@gnome.org>
Reviewed by Alexey Proskuryakov.
return EventTargetNodeCast(node);
}
-static bool handleAccessKey(Document* document, const PlatformKeyboardEvent& evt)
+bool EventHandler::handleAccessKey(const PlatformKeyboardEvent& evt)
{
#if PLATFORM(MAC)
if (evt.ctrlKey())
#endif
{
String key = evt.unmodifiedText();
- Element* elem = document->getElementByAccessKey(key.lower());
+ Element* elem = m_frame->document()->getElementByAccessKey(key.lower());
if (elem) {
elem->accessKeyAction(false);
return true;
m_frame->loader()->resetMultipleFormSubmissionProtection();
// In IE, access keys are special, they are handled after default keydown processing, but cannot be canceled - this is hard to match.
- // On Windows, we process them before dispatching keypress event (and rely on WebKit to not drop WM_SYSCHAR events when a keydown representing WM_SYSKEYDOWN is canceled).
- // On Mac OS X, we process them before dispatching keydown, as the default keydown handler implements Emacs key bindings, which may conflict with access keys.
+ // On Mac OS X, we process them before dispatching keydown, as the default keydown handler implements Emacs key bindings, which may conflict
+ // with access keys. Then we dispatch keydown, but suppress its default handling.
+ // On Windows, WebKit explicitly calls handleAccessKey() instead of dispatching a keypress event for WM_SYSCHAR messages.
// Other platforms currently match either Mac or Windows behavior, depending on whether they send combined KeyDown events.
bool matchedAnAccessKey = false;
- if (initialKeyEvent.type() == PlatformKeyboardEvent::Char) {
- if (handleAccessKey(m_frame->document(), initialKeyEvent))
- return true;
- } else if (initialKeyEvent.type() == PlatformKeyboardEvent::KeyDown)
- matchedAnAccessKey = handleAccessKey(m_frame->document(), initialKeyEvent);
+ if (initialKeyEvent.type() == PlatformKeyboardEvent::KeyDown)
+ matchedAnAccessKey = handleAccessKey(initialKeyEvent);
// FIXME: it would be fair to let an input method handle KeyUp events before DOM dispatch.
if (initialKeyEvent.type() == PlatformKeyboardEvent::KeyUp || initialKeyEvent.type() == PlatformKeyboardEvent::Char)
bool needsKeyboardEventDisambiguationQuirks() const;
+ bool handleAccessKey(const PlatformKeyboardEvent&);
bool keyEvent(const PlatformKeyboardEvent&);
void defaultKeyboardEventHandler(KeyboardEvent*);
+2007-12-16 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16462
+ REGRESSION: access keys broken on Windows
+
+ * WebView.cpp: (WebView::keyPress): Handle system key presses as access keys.
+
2007-12-15 Alexey Proskuryakov <ap@webkit.org>
Reviewed by Maciej.
bool WebView::keyPress(WPARAM charCode, LPARAM keyData, bool systemKeyDown)
{
- // IE does not dispatch keypress event for WM_SYSCHAR.
- if (systemKeyDown)
- return false;
-
Frame* frame = m_page->focusController()->focusedOrMainFrame();
PlatformKeyboardEvent keyEvent(m_viewWindow, charCode, keyData, PlatformKeyboardEvent::Char, systemKeyDown);
+ // IE does not dispatch keypress event for WM_SYSCHAR.
+ if (systemKeyDown)
+ return frame->eventHandler()->handleAccessKey(keyEvent);
if (frame->eventHandler()->keyEvent(keyEvent))
return true;
+2007-12-16 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16462
+ REGRESSION: access keys broken on Windows
+
+ * WebView.cpp: (wxWebView::OnKeyEvents): Call handleAccessKey() as appropriate.
+
2007-12-14 Darin Adler <darin@apple.com>
Reviewed by Alexey.
* WebKitSupport/EditorClientWx.cpp:
(WebCore::EditorClientWx::handleKeyboardEvent): Switched from Editor::execCommand
- to Edtor::command.
+ to Editor::command.
2007-12-12 Brady Eidson <beidson@apple.com>
}
else {
WebCore::PlatformKeyboardEvent wkEvent(event);
- m_impl->frame->eventHandler()->keyEvent(wkEvent);
+ if (wkEvent.type() == PlatformKeyboardEvent::Char && wkEvent.altKey())
+ m_impl->frame->eventHandler()->handleAccessKey(wkEvent);
+ else
+ m_impl->frame->eventHandler()->keyEvent(wkEvent);
}
}
+2007-12-16 Alexey Proskuryakov <ap@webkit.org>
+
+ Reviewed by Darin.
+
+ http://bugs.webkit.org/show_bug.cgi?id=16462
+ REGRESSION: access keys broken on Windows
+
+ * DumpRenderTree/win/EventSender.cpp: (keyDownCallback): Send system key events
+ if Alt is pressed.
+
2007-12-15 Sam Weinig <sam@webkit.org>
Reviewed by Mark Rowe.
::SetKeyboardState(newKeyState);
}
- MSG msg = makeMsg(webViewWindow, WM_KEYDOWN, virtualKeyCode, 0);
+ MSG msg = makeMsg(webViewWindow, (::GetKeyState(VK_MENU) & 0x8000) ? WM_SYSKEYDOWN : WM_KEYDOWN, virtualKeyCode, 0);
if (virtualKeyCode != 255)
dispatchMessage(&msg);
else {
}
// Tests expect that all messages are processed by the time keyDown() returns.
- if (::PeekMessage(&msg, webViewWindow, WM_CHAR, WM_CHAR, PM_REMOVE))
+ if (::PeekMessage(&msg, webViewWindow, WM_CHAR, WM_CHAR, PM_REMOVE) || ::PeekMessage(&msg, webViewWindow, WM_SYSCHAR, WM_SYSCHAR, PM_REMOVE))
::DispatchMessage(&msg);
MSG msgUp = makeMsg(webViewWindow, WM_KEYUP, virtualKeyCode, 0);