Changeset 83522 in webkit


Ignore:
Timestamp:
Apr 11, 2011 3:41:52 PM (13 years ago)
Author:
ap@apple.com
Message:

Reviewed by Maciej Stachowiak.

WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
https://bugs.webkit.org/show_bug.cgi?id=58265
<rdar://problem/9221468>

  • WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::keyEvent): Added a comment explaining that doing work after DOM event dispatch isn't great.
  • WebProcess/WebPage/mac/WebPageMac.mm: (WebKit::WebPage::performNonEditingBehaviorForSelector): Added a comment explaining how this might be moved down to WebCore. (WebKit::WebPage::performDefaultBehaviorForKeyEvent): This is now empty, since both Space and Backspace behaviors are implemented in WebCore.
Location:
trunk/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r83521 r83522  
     12011-04-11  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
     6        https://bugs.webkit.org/show_bug.cgi?id=58265
     7        <rdar://problem/9221468>
     8
     9        * page/EventHandler.cpp:
     10        (WebCore::EventHandler::defaultKeyboardEventHandler): Handle Backspace.
     11        (WebCore::EventHandler::defaultSpaceEventHandler): Enabled this on Mac, and added checks for
     12        other modifiers - no one wants to scroll on Ctrl+Alt+Space and such.
     13        (WebCore::EventHandler::defaultBackspaceEventHandler): Backspace goes back, Shift-backspace
     14        goes forward. All browsers do it.
     15        (WebCore::EventHandler::defaultArrowEventHandler): Assert that this function was called
     16        for a correct event.
     17        (WebCore::EventHandler::defaultTabEventHandler): Ditto.
     18
     19        * page/EventHandler.h: Added defaultBackspaceEventHandler.
     20
    1212011-04-11  Matthew Delaney  <mdelaney@apple.com>
    222
  • trunk/Source/WebCore/page/EventHandler.cpp

    r83414 r83522  
    25452545        if (event->keyIdentifier() == "U+0009")
    25462546            defaultTabEventHandler(event);
     2547        else if (event->keyIdentifier() == "U+0008")
     2548            defaultBackspaceEventHandler(event);
    25472549        else {
    25482550            FocusDirection direction = focusDirectionForKey(event->keyIdentifier());
     
    28462848}
    28472849
    2848 #if PLATFORM(QT) || PLATFORM(MAC)
    2849 
    2850 // These two platforms handle the space event in the platform-specific WebKit code.
    2851 // Eventually it would be good to eliminate that and use the code here instead, but
    2852 // the Qt version is inside an ifdef and the Mac version has some extra behavior
    2853 // so we can't unify everything yet.
     2850#if PLATFORM(QT)
     2851// Qt handles the space event in platform-specific WebKit code.
     2852// Eventually it would be good to eliminate that and use the code here instead.
    28542853void EventHandler::defaultSpaceEventHandler(KeyboardEvent*)
    28552854{
    28562855}
    2857 
    28582856#else
    28592857
    28602858void EventHandler::defaultSpaceEventHandler(KeyboardEvent* event)
    28612859{
     2860    ASSERT(event->type() == eventNames().keypressEvent);
     2861
     2862    if (event->ctrlKey() || event->metaKey() || event->altKey() || event->altGraphKey())
     2863        return;
     2864
    28622865    ScrollLogicalDirection direction = event->shiftKey() ? ScrollBlockDirectionBackward : ScrollBlockDirectionForward;
    28632866    if (logicalScrollOverflow(direction, ScrollByPage)) {
     
    28762879#endif
    28772880
     2881void EventHandler::defaultBackspaceEventHandler(KeyboardEvent* event)
     2882{
     2883    ASSERT(event->type() == eventNames().keydownEvent);
     2884
     2885    if (event->ctrlKey() || event->metaKey() || event->altKey() || event->altGraphKey())
     2886        return;
     2887
     2888    Page* page = m_frame->page();
     2889    if (!page)
     2890        return;
     2891
     2892    if (event->shiftKey())
     2893        page->goForward();
     2894    else
     2895        page->goBack();
     2896
     2897    event->setDefaultHandled();
     2898}
     2899
     2900
    28782901void EventHandler::defaultArrowEventHandler(FocusDirection focusDirection, KeyboardEvent* event)
    28792902{
     2903    ASSERT(event->type() == eventNames().keydownEvent);
     2904
    28802905    if (event->ctrlKey() || event->metaKey() || event->altGraphKey() || event->shiftKey())
    28812906        return;
     
    28992924void EventHandler::defaultTabEventHandler(KeyboardEvent* event)
    29002925{
     2926    ASSERT(event->type() == eventNames().keydownEvent);
     2927
    29012928    // We should only advance focus on tabs if no special modifier keys are held down.
    29022929    if (event->ctrlKey() || event->metaKey() || event->altGraphKey())
  • trunk/Source/WebCore/page/EventHandler.h

    r83414 r83522  
    346346
    347347    void defaultSpaceEventHandler(KeyboardEvent*);
     348    void defaultBackspaceEventHandler(KeyboardEvent*);
    348349    void defaultTabEventHandler(KeyboardEvent*);
    349350    void defaultArrowEventHandler(FocusDirection, KeyboardEvent*);
  • trunk/Source/WebKit/mac/ChangeLog

    r83464 r83522  
     12011-04-11  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
     6        https://bugs.webkit.org/show_bug.cgi?id=58175
     7        <rdar://problem/9060555>
     8
     9        * WebView/WebFrameView.mm: (-[WebFrameView keyDown:]): Added a comment explaining how this
     10        should be changed to match WebKit2.
     11
    1122011-04-06  Timothy Hatcher  <timothy@apple.com>
    213
  • trunk/Source/WebKit/win/ChangeLog

    r83113 r83522  
     12011-04-11  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
     6        https://bugs.webkit.org/show_bug.cgi?id=58265
     7        <rdar://problem/9221468>
     8
     9        * WebView.cpp: (WebView::keyDown): Removed special handling of Backspace, which is unnecessary
     10        now that WebCore implements it.
     11
    1122011-04-06  Brian Weinstein  <bweinstein@apple.com>
    213
  • trunk/Source/WebKit/win/WebView.cpp

    r83113 r83522  
    19541954    }
    19551955
    1956     // We need to handle back/forward using either Backspace(+Shift) or Ctrl+Left/Right Arrow keys.
    1957     if ((virtualKeyCode == VK_BACK && keyEvent.shiftKey()) || (virtualKeyCode == VK_RIGHT && keyEvent.ctrlKey()))
     1956    // We need to handle back/forward using either Ctrl+Left/Right Arrow keys.
     1957    // FIXME: This logic should probably be in EventHandler::defaultArrowEventHandler().
     1958    // FIXME: Should check that other modifiers aren't pressed.
     1959    if (virtualKeyCode == VK_RIGHT && keyEvent.ctrlKey())
    19581960        return m_page->goForward();
    1959     if (virtualKeyCode == VK_BACK || (virtualKeyCode == VK_LEFT && keyEvent.ctrlKey()))
     1961    if (virtualKeyCode == VK_LEFT && keyEvent.ctrlKey())
    19601962        return m_page->goBack();
    19611963
  • trunk/Source/WebKit2/ChangeLog

    r83519 r83522  
     12011-04-11  Alexey Proskuryakov  <ap@apple.com>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
     6        https://bugs.webkit.org/show_bug.cgi?id=58265
     7        <rdar://problem/9221468>
     8
     9        * WebProcess/WebPage/WebPage.cpp:
     10        (WebKit::WebPage::keyEvent): Added a comment explaining that doing work after DOM event
     11        dispatch isn't great.
     12        * WebProcess/WebPage/mac/WebPageMac.mm:
     13        (WebKit::WebPage::performNonEditingBehaviorForSelector): Added a comment explaining how this
     14        might be moved down to WebCore.
     15        (WebKit::WebPage::performDefaultBehaviorForKeyEvent): This is now empty, since both Space
     16        and Backspace behaviors are implemented in WebCore.
     17
    1182011-04-11  Anders Carlsson  <andersca@apple.com>
    219
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r83460 r83522  
    957957
    958958    bool handled = handleKeyEvent(keyboardEvent, m_page.get());
     959    // FIXME: Platform default behaviors should be performed during normal DOM event dispatch (in most cases, in default keydown event handler).
    959960    if (!handled)
    960961        handled = performDefaultBehaviorForKeyEvent(keyboardEvent);
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm

    r83516 r83522  
    543543bool WebPage::performNonEditingBehaviorForSelector(const String& selector)
    544544{
     545    // FIXME: All these selectors have corresponding Editor commands, but the commands only work in editable content.
     546    // Should such non-editing behaviors be implemented in Editor or EventHandler::defaultArrowEventHandler() perhaps?
    545547    if (selector == "moveUp:")
    546548        scroll(m_page.get(), ScrollUp, ScrollByLine);
     
    575577}
    576578
    577 bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent& keyboardEvent)
    578 {
    579     if (keyboardEvent.type() != WebEvent::KeyDown)
    580         return false;
    581 
    582     switch (keyboardEvent.windowsVirtualKeyCode()) {
    583     case VK_BACK:
    584         // FIXME: Handling Backspace here means that a keypress DOM event will be dispatched when focus
    585         // is outside editable content, which is likely wrong. It should be moved to performNonEditingBehaviorForSelector(),
    586         // which is complicated by the fact that both Backspace and Shift+Backspace get the same command.
    587         if (keyboardEvent.shiftKey())
    588             m_page->goForward();
    589         else
    590             m_page->goBack();
    591         break;
    592     case VK_SPACE:
    593         // Space is not translated to a command by key bindings, so we need to handle it here.
    594         if (keyboardEvent.shiftKey())
    595             logicalScroll(m_page.get(), ScrollBlockDirectionBackward, ScrollByPage);
    596         else
    597             logicalScroll(m_page.get(), ScrollBlockDirectionForward, ScrollByPage);
    598         break;
    599     default:
    600         return false;
    601     }
    602 
    603     return true;
     579bool WebPage::performDefaultBehaviorForKeyEvent(const WebKeyboardEvent&)
     580{
     581    return false;
    604582}
    605583
Note: See TracChangeset for help on using the changeset viewer.