2009-12-07 Zhe Su <suzhe@chromium.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Dec 2009 04:55:46 +0000 (04:55 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 8 Dec 2009 04:55:46 +0000 (04:55 +0000)
        Reviewed by Darin Fisher.

        [Chromium] accesskey is not supported on Chromium Mac.
        https://bugs.webkit.org/show_bug.cgi?id=32213

        This change fixes (partially) the accesskey issue by decoupling the
        code for handling accesskeys and system keys. Because on Mac,
        the modifiers of accesskeys are ctrl+alt, which are not marked as
        system keys.
        In order to fully fix this issue, some changes in Chromium code is
        also required.

        * src/WebViewImpl.cpp:
        (WebKit::WebViewImpl::keyEvent):
        (WebKit::WebViewImpl::charEvent):

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

WebKit/chromium/ChangeLog
WebKit/chromium/src/WebViewImpl.cpp

index e03947d4ba68e7ec9e101f2960ffca1a3b75cff0..4d786079b6af7a59bab66e5758109bd62db98a9e 100644 (file)
@@ -1,3 +1,21 @@
+2009-12-07  Zhe Su  <suzhe@chromium.org>
+
+        Reviewed by Darin Fisher.
+
+        [Chromium] accesskey is not supported on Chromium Mac.
+        https://bugs.webkit.org/show_bug.cgi?id=32213
+
+        This change fixes (partially) the accesskey issue by decoupling the
+        code for handling accesskeys and system keys. Because on Mac,
+        the modifiers of accesskeys are ctrl+alt, which are not marked as
+        system keys.
+        In order to fully fix this issue, some changes in Chromium code is
+        also required.
+
+        * src/WebViewImpl.cpp:
+        (WebKit::WebViewImpl::keyEvent):
+        (WebKit::WebViewImpl::charEvent):
+
 2009-12-07  Evan Martin  <evan@chromium.org>
 
         Reviewed by Eric Seidel.
index dc87101fe8f9415f9fb4b62524bd07133addbc17..1612b6a4e330ddf8986a36993e4352da8750f2a1 100644 (file)
@@ -464,7 +464,7 @@ bool WebViewImpl::keyEvent(const WebKeyboardEvent& event)
     PlatformKeyboardEventBuilder evt(event);
 
     if (handler->keyEvent(evt)) {
-        if (WebInputEvent::RawKeyDown == event.type && !evt.isSystemKey())
+        if (WebInputEvent::RawKeyDown == event.type)
             m_suppressNextKeypressEvent = true;
         return true;
     }
@@ -529,31 +529,33 @@ bool WebViewImpl::charEvent(const WebKeyboardEvent& event)
     // handled by Webkit. A keyDown event is typically associated with a
     // keyPress(char) event and a keyUp event. We reset this flag here as it
     // only applies to the current keyPress event.
-    if (m_suppressNextKeypressEvent) {
-        m_suppressNextKeypressEvent = false;
-        return true;
-    }
+    bool suppress = m_suppressNextKeypressEvent;
+    m_suppressNextKeypressEvent = false;
 
     Frame* frame = focusedWebCoreFrame();
     if (!frame)
-        return false;
+        return suppress;
 
     EventHandler* handler = frame->eventHandler();
     if (!handler)
-        return keyEventDefault(event);
+        return suppress || keyEventDefault(event);
 
     PlatformKeyboardEventBuilder evt(event);
     if (!evt.isCharacterKey())
         return true;
 
+    // Accesskeys are triggered by char events and can't be suppressed.
+    if (handler->handleAccessKey(evt))
+        return true;
+
     // Safari 3.1 does not pass off windows system key messages (WM_SYSCHAR) to
     // the eventHandler::keyEvent. We mimic this behavior on all platforms since
     // for now we are converting other platform's key events to windows key
     // events.
     if (evt.isSystemKey())
-        return handler->handleAccessKey(evt);
+        return false;
 
-    if (!handler->keyEvent(evt))
+    if (!suppress && !handler->keyEvent(evt))
         return keyEventDefault(event);
 
     return true;