Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Side by Side Diff: Source/core/page/EventHandler.cpp

Issue 852083002: Propagate focus type to plugins (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Moved Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/page/EventHandler.h ('k') | Source/core/page/FocusController.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org)
4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies)
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 1925 matching lines...) Expand 10 before | Expand all | Expand 10 after
1936 // Only change the focus when clicking scrollbars if it can transfered to a 1936 // Only change the focus when clicking scrollbars if it can transfered to a
1937 // mouse focusable node. 1937 // mouse focusable node.
1938 if (!element && targetedEvent.hitTestResult().scrollbar()) 1938 if (!element && targetedEvent.hitTestResult().scrollbar())
1939 return true; 1939 return true;
1940 1940
1941 if (Page* page = m_frame->page()) { 1941 if (Page* page = m_frame->page()) {
1942 // If focus shift is blocked, we eat the event. Note we should never 1942 // If focus shift is blocked, we eat the event. Note we should never
1943 // clear swallowEvent if the page already set it (e.g., by canceling 1943 // clear swallowEvent if the page already set it (e.g., by canceling
1944 // default behavior). 1944 // default behavior).
1945 if (element) { 1945 if (element) {
1946 if (!page->focusController().setFocusedElement(element, m_frame, Foc usTypeMouse)) 1946 if (!page->focusController().setFocusedElement(element, m_frame, Web FocusTypeMouse))
1947 return true; 1947 return true;
1948 } else { 1948 } else {
1949 // We call setFocusedElement even with !element in order to blur 1949 // We call setFocusedElement even with !element in order to blur
1950 // current focus element when a link is clicked; this is expected by 1950 // current focus element when a link is clicked; this is expected by
1951 // some sites that rely on onChange handlers running from form 1951 // some sites that rely on onChange handlers running from form
1952 // fields before the button click is processed. 1952 // fields before the button click is processed.
1953 if (!page->focusController().setFocusedElement(0, m_frame)) 1953 if (!page->focusController().setFocusedElement(0, m_frame))
1954 return true; 1954 return true;
1955 } 1955 }
1956 } 1956 }
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after
3093 return keydownResult; 3093 return keydownResult;
3094 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE vent, m_frame->document()->domWindow()); 3094 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE vent, m_frame->document()->domWindow());
3095 keypress->setTarget(node); 3095 keypress->setTarget(node);
3096 if (keydownResult) 3096 if (keydownResult)
3097 keypress->setDefaultPrevented(true); 3097 keypress->setDefaultPrevented(true);
3098 node->dispatchEvent(keypress, IGNORE_EXCEPTION); 3098 node->dispatchEvent(keypress, IGNORE_EXCEPTION);
3099 3099
3100 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan dled(); 3100 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan dled();
3101 } 3101 }
3102 3102
3103 static FocusType focusDirectionForKey(const AtomicString& keyIdentifier) 3103 static WebFocusType focusDirectionForKey(const AtomicString& keyIdentifier)
3104 { 3104 {
3105 DEFINE_STATIC_LOCAL(AtomicString, Down, ("Down", AtomicString::ConstructFrom Literal)); 3105 DEFINE_STATIC_LOCAL(AtomicString, Down, ("Down", AtomicString::ConstructFrom Literal));
3106 DEFINE_STATIC_LOCAL(AtomicString, Up, ("Up", AtomicString::ConstructFromLite ral)); 3106 DEFINE_STATIC_LOCAL(AtomicString, Up, ("Up", AtomicString::ConstructFromLite ral));
3107 DEFINE_STATIC_LOCAL(AtomicString, Left, ("Left", AtomicString::ConstructFrom Literal)); 3107 DEFINE_STATIC_LOCAL(AtomicString, Left, ("Left", AtomicString::ConstructFrom Literal));
3108 DEFINE_STATIC_LOCAL(AtomicString, Right, ("Right", AtomicString::ConstructFr omLiteral)); 3108 DEFINE_STATIC_LOCAL(AtomicString, Right, ("Right", AtomicString::ConstructFr omLiteral));
3109 3109
3110 FocusType retVal = FocusTypeNone; 3110 WebFocusType retVal = WebFocusTypeNone;
3111 3111
3112 if (keyIdentifier == Down) 3112 if (keyIdentifier == Down)
3113 retVal = FocusTypeDown; 3113 retVal = WebFocusTypeDown;
3114 else if (keyIdentifier == Up) 3114 else if (keyIdentifier == Up)
3115 retVal = FocusTypeUp; 3115 retVal = WebFocusTypeUp;
3116 else if (keyIdentifier == Left) 3116 else if (keyIdentifier == Left)
3117 retVal = FocusTypeLeft; 3117 retVal = WebFocusTypeLeft;
3118 else if (keyIdentifier == Right) 3118 else if (keyIdentifier == Right)
3119 retVal = FocusTypeRight; 3119 retVal = WebFocusTypeRight;
3120 3120
3121 return retVal; 3121 return retVal;
3122 } 3122 }
3123 3123
3124 void EventHandler::defaultKeyboardEventHandler(KeyboardEvent* event) 3124 void EventHandler::defaultKeyboardEventHandler(KeyboardEvent* event)
3125 { 3125 {
3126 if (event->type() == EventTypeNames::keydown) { 3126 if (event->type() == EventTypeNames::keydown) {
3127 // Clear caret blinking suspended state to make sure that caret blinks 3127 // Clear caret blinking suspended state to make sure that caret blinks
3128 // when we type again after long pressing on an empty input field. 3128 // when we type again after long pressing on an empty input field.
3129 if (m_frame && m_frame->selection().isCaretBlinkingSuspended()) 3129 if (m_frame && m_frame->selection().isCaretBlinkingSuspended())
3130 m_frame->selection().setCaretBlinkingSuspended(false); 3130 m_frame->selection().setCaretBlinkingSuspended(false);
3131 3131
3132 m_frame->editor().handleKeyboardEvent(event); 3132 m_frame->editor().handleKeyboardEvent(event);
3133 if (event->defaultHandled()) 3133 if (event->defaultHandled())
3134 return; 3134 return;
3135 if (event->keyIdentifier() == "U+0009") 3135 if (event->keyIdentifier() == "U+0009")
3136 defaultTabEventHandler(event); 3136 defaultTabEventHandler(event);
3137 else if (event->keyIdentifier() == "U+0008") 3137 else if (event->keyIdentifier() == "U+0008")
3138 defaultBackspaceEventHandler(event); 3138 defaultBackspaceEventHandler(event);
3139 else if (event->keyIdentifier() == "U+001B") 3139 else if (event->keyIdentifier() == "U+001B")
3140 defaultEscapeEventHandler(event); 3140 defaultEscapeEventHandler(event);
3141 else { 3141 else {
3142 FocusType type = focusDirectionForKey(AtomicString(event->keyIdentif ier())); 3142 WebFocusType type = focusDirectionForKey(AtomicString(event->keyIden tifier()));
3143 if (type != FocusTypeNone) 3143 if (type != WebFocusTypeNone)
3144 defaultArrowEventHandler(type, event); 3144 defaultArrowEventHandler(type, event);
3145 } 3145 }
3146 } 3146 }
3147 if (event->type() == EventTypeNames::keypress) { 3147 if (event->type() == EventTypeNames::keypress) {
3148 m_frame->editor().handleKeyboardEvent(event); 3148 m_frame->editor().handleKeyboardEvent(event);
3149 if (event->defaultHandled()) 3149 if (event->defaultHandled())
3150 return; 3150 return;
3151 if (event->charCode() == ' ') 3151 if (event->charCode() == ' ')
3152 defaultSpaceEventHandler(event); 3152 defaultSpaceEventHandler(event);
3153 } 3153 }
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
3380 if (event->ctrlKey() || event->metaKey() || event->altKey()) 3380 if (event->ctrlKey() || event->metaKey() || event->altKey())
3381 return; 3381 return;
3382 3382
3383 if (!m_frame->editor().behavior().shouldNavigateBackOnBackspace()) 3383 if (!m_frame->editor().behavior().shouldNavigateBackOnBackspace())
3384 return; 3384 return;
3385 bool handledEvent = m_frame->loader().client()->navigateBackForward(event->s hiftKey() ? 1 : -1); 3385 bool handledEvent = m_frame->loader().client()->navigateBackForward(event->s hiftKey() ? 1 : -1);
3386 if (handledEvent) 3386 if (handledEvent)
3387 event->setDefaultHandled(); 3387 event->setDefaultHandled();
3388 } 3388 }
3389 3389
3390 void EventHandler::defaultArrowEventHandler(FocusType focusType, KeyboardEvent* event) 3390 void EventHandler::defaultArrowEventHandler(WebFocusType focusType, KeyboardEven t* event)
3391 { 3391 {
3392 ASSERT(event->type() == EventTypeNames::keydown); 3392 ASSERT(event->type() == EventTypeNames::keydown);
3393 3393
3394 if (event->ctrlKey() || event->metaKey() || event->shiftKey()) 3394 if (event->ctrlKey() || event->metaKey() || event->shiftKey())
3395 return; 3395 return;
3396 3396
3397 Page* page = m_frame->page(); 3397 Page* page = m_frame->page();
3398 if (!page) 3398 if (!page)
3399 return; 3399 return;
3400 3400
(...skipping 23 matching lines...) Expand all
3424 if (event->altKey()) 3424 if (event->altKey())
3425 return; 3425 return;
3426 #endif 3426 #endif
3427 3427
3428 Page* page = m_frame->page(); 3428 Page* page = m_frame->page();
3429 if (!page) 3429 if (!page)
3430 return; 3430 return;
3431 if (!page->tabKeyCyclesThroughElements()) 3431 if (!page->tabKeyCyclesThroughElements())
3432 return; 3432 return;
3433 3433
3434 FocusType focusType = event->shiftKey() ? FocusTypeBackward : FocusTypeForwa rd; 3434 WebFocusType focusType = event->shiftKey() ? WebFocusTypeBackward : WebFocus TypeForward;
3435 3435
3436 // Tabs can be used in design mode editing. 3436 // Tabs can be used in design mode editing.
3437 if (m_frame->document()->inDesignMode()) 3437 if (m_frame->document()->inDesignMode())
3438 return; 3438 return;
3439 3439
3440 if (page->focusController().advanceFocus(focusType)) 3440 if (page->focusController().advanceFocus(focusType))
3441 event->setDefaultHandled(); 3441 event->setDefaultHandled();
3442 } 3442 }
3443 3443
3444 void EventHandler::defaultEscapeEventHandler(KeyboardEvent* event) 3444 void EventHandler::defaultEscapeEventHandler(KeyboardEvent* event)
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after
3879 unsigned EventHandler::accessKeyModifiers() 3879 unsigned EventHandler::accessKeyModifiers()
3880 { 3880 {
3881 #if OS(MACOSX) 3881 #if OS(MACOSX)
3882 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; 3882 return PlatformEvent::CtrlKey | PlatformEvent::AltKey;
3883 #else 3883 #else
3884 return PlatformEvent::AltKey; 3884 return PlatformEvent::AltKey;
3885 #endif 3885 #endif
3886 } 3886 }
3887 3887
3888 } // namespace blink 3888 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/page/EventHandler.h ('k') | Source/core/page/FocusController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698