| OLD | NEW |
| 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 1731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1742 | 1742 |
| 1743 | 1743 |
| 1744 bool EventHandler::dispatchDragEvent(const AtomicString& eventType, Node* dragTa
rget, const PlatformMouseEvent& event, Clipboard* clipboard) | 1744 bool EventHandler::dispatchDragEvent(const AtomicString& eventType, Node* dragTa
rget, const PlatformMouseEvent& event, Clipboard* clipboard) |
| 1745 { | 1745 { |
| 1746 FrameView* view = m_frame->view(); | 1746 FrameView* view = m_frame->view(); |
| 1747 | 1747 |
| 1748 // FIXME: We might want to dispatch a dragleave even if the view is gone. | 1748 // FIXME: We might want to dispatch a dragleave even if the view is gone. |
| 1749 if (!view) | 1749 if (!view) |
| 1750 return false; | 1750 return false; |
| 1751 | 1751 |
| 1752 RefPtr<MouseEvent> me = MouseEvent::create(eventType, | 1752 RefPtrWillBeRawPtr<MouseEvent> me = MouseEvent::create(eventType, |
| 1753 true, true, m_frame->document()->domWindow(), | 1753 true, true, m_frame->document()->domWindow(), |
| 1754 0, event.globalPosition().x(), event.globalPosition().y(), event.positio
n().x(), event.position().y(), | 1754 0, event.globalPosition().x(), event.globalPosition().y(), event.positio
n().x(), event.position().y(), |
| 1755 event.movementDelta().x(), event.movementDelta().y(), | 1755 event.movementDelta().x(), event.movementDelta().y(), |
| 1756 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), | 1756 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), |
| 1757 0, nullptr, clipboard); | 1757 0, nullptr, clipboard); |
| 1758 | 1758 |
| 1759 dragTarget->dispatchEvent(me.get(), IGNORE_EXCEPTION); | 1759 dragTarget->dispatchEvent(me.get(), IGNORE_EXCEPTION); |
| 1760 return me->defaultPrevented(); | 1760 return me->defaultPrevented(); |
| 1761 } | 1761 } |
| 1762 | 1762 |
| (...skipping 1358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3121 if (initialKeyEvent.type() == PlatformEvent::KeyDown) | 3121 if (initialKeyEvent.type() == PlatformEvent::KeyDown) |
| 3122 matchedAnAccessKey = handleAccessKey(initialKeyEvent); | 3122 matchedAnAccessKey = handleAccessKey(initialKeyEvent); |
| 3123 | 3123 |
| 3124 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. | 3124 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. |
| 3125 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) | 3125 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) |
| 3126 return !node->dispatchKeyEvent(initialKeyEvent); | 3126 return !node->dispatchKeyEvent(initialKeyEvent); |
| 3127 | 3127 |
| 3128 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; | 3128 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; |
| 3129 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) | 3129 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) |
| 3130 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); | 3130 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); |
| 3131 RefPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEvent, m_frame-
>document()->domWindow()); | 3131 RefPtrWillBeRawPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEve
nt, m_frame->document()->domWindow()); |
| 3132 if (matchedAnAccessKey) | 3132 if (matchedAnAccessKey) |
| 3133 keydown->setDefaultPrevented(true); | 3133 keydown->setDefaultPrevented(true); |
| 3134 keydown->setTarget(node); | 3134 keydown->setTarget(node); |
| 3135 | 3135 |
| 3136 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { | 3136 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { |
| 3137 node->dispatchEvent(keydown, IGNORE_EXCEPTION); | 3137 node->dispatchEvent(keydown, IGNORE_EXCEPTION); |
| 3138 // If frame changed as a result of keydown dispatch, then return true to
avoid sending a subsequent keypress message to the new frame. | 3138 // If frame changed as a result of keydown dispatch, then return true to
avoid sending a subsequent keypress message to the new frame. |
| 3139 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()
->focusController().focusedOrMainFrame(); | 3139 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()
->focusController().focusedOrMainFrame(); |
| 3140 return keydown->defaultHandled() || keydown->defaultPrevented() || chang
edFocusedFrame; | 3140 return keydown->defaultHandled() || keydown->defaultPrevented() || chang
edFocusedFrame; |
| 3141 } | 3141 } |
| 3142 | 3142 |
| 3143 node->dispatchEvent(keydown, IGNORE_EXCEPTION); | 3143 node->dispatchEvent(keydown, IGNORE_EXCEPTION); |
| 3144 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. | 3144 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. |
| 3145 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); | 3145 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); |
| 3146 bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented(
) || changedFocusedFrame; | 3146 bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented(
) || changedFocusedFrame; |
| 3147 if (keydownResult) | 3147 if (keydownResult) |
| 3148 return keydownResult; | 3148 return keydownResult; |
| 3149 | 3149 |
| 3150 // Focus may have changed during keydown handling, so refetch node. | 3150 // Focus may have changed during keydown handling, so refetch node. |
| 3151 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. | 3151 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. |
| 3152 node = eventTargetNodeForDocument(m_frame->document()); | 3152 node = eventTargetNodeForDocument(m_frame->document()); |
| 3153 if (!node) | 3153 if (!node) |
| 3154 return false; | 3154 return false; |
| 3155 | 3155 |
| 3156 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; | 3156 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; |
| 3157 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); | 3157 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); |
| 3158 if (keyPressEvent.text().isEmpty()) | 3158 if (keyPressEvent.text().isEmpty()) |
| 3159 return keydownResult; | 3159 return keydownResult; |
| 3160 RefPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressEvent, m_fram
e->document()->domWindow()); | 3160 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE
vent, m_frame->document()->domWindow()); |
| 3161 keypress->setTarget(node); | 3161 keypress->setTarget(node); |
| 3162 if (keydownResult) | 3162 if (keydownResult) |
| 3163 keypress->setDefaultPrevented(true); | 3163 keypress->setDefaultPrevented(true); |
| 3164 node->dispatchEvent(keypress, IGNORE_EXCEPTION); | 3164 node->dispatchEvent(keypress, IGNORE_EXCEPTION); |
| 3165 | 3165 |
| 3166 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan
dled(); | 3166 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan
dled(); |
| 3167 } | 3167 } |
| 3168 | 3168 |
| 3169 static FocusType focusDirectionForKey(const AtomicString& keyIdentifier) | 3169 static FocusType focusDirectionForKey(const AtomicString& keyIdentifier) |
| 3170 { | 3170 { |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3402 return false; | 3402 return false; |
| 3403 | 3403 |
| 3404 EventTarget* target; | 3404 EventTarget* target; |
| 3405 if (underlyingEvent) | 3405 if (underlyingEvent) |
| 3406 target = underlyingEvent->target(); | 3406 target = underlyingEvent->target(); |
| 3407 else | 3407 else |
| 3408 target = eventTargetNodeForDocument(m_frame->document()); | 3408 target = eventTargetNodeForDocument(m_frame->document()); |
| 3409 if (!target) | 3409 if (!target) |
| 3410 return false; | 3410 return false; |
| 3411 | 3411 |
| 3412 RefPtr<TextEvent> event = TextEvent::create(m_frame->domWindow(), text, inpu
tType); | 3412 RefPtrWillBeRawPtr<TextEvent> event = TextEvent::create(m_frame->domWindow()
, text, inputType); |
| 3413 event->setUnderlyingEvent(underlyingEvent); | 3413 event->setUnderlyingEvent(underlyingEvent); |
| 3414 | 3414 |
| 3415 target->dispatchEvent(event, IGNORE_EXCEPTION); | 3415 target->dispatchEvent(event, IGNORE_EXCEPTION); |
| 3416 return event->defaultHandled(); | 3416 return event->defaultHandled(); |
| 3417 } | 3417 } |
| 3418 | 3418 |
| 3419 void EventHandler::defaultTextInputEventHandler(TextEvent* event) | 3419 void EventHandler::defaultTextInputEventHandler(TextEvent* event) |
| 3420 { | 3420 { |
| 3421 if (m_frame->editor().handleTextEvent(event)) | 3421 if (m_frame->editor().handleTextEvent(event)) |
| 3422 event->setDefaultHandled(); | 3422 event->setDefaultHandled(); |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3777 bool isTouchCancelEvent = (state == PlatformTouchPoint::TouchCancelled); | 3777 bool isTouchCancelEvent = (state == PlatformTouchPoint::TouchCancelled); |
| 3778 RefPtrWillBeRawPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emp
tyList : touches); | 3778 RefPtrWillBeRawPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emp
tyList : touches); |
| 3779 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); | 3779 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); |
| 3780 const EventTargetSet& targetsForState = changedTouches[state].m_targets; | 3780 const EventTargetSet& targetsForState = changedTouches[state].m_targets; |
| 3781 | 3781 |
| 3782 for (EventTargetSet::const_iterator it = targetsForState.begin(); it !=
targetsForState.end(); ++it) { | 3782 for (EventTargetSet::const_iterator it = targetsForState.begin(); it !=
targetsForState.end(); ++it) { |
| 3783 EventTarget* touchEventTarget = it->get(); | 3783 EventTarget* touchEventTarget = it->get(); |
| 3784 RefPtrWillBeRawPtr<TouchList> targetTouches(isTouchCancelEvent ? emp
tyList.get() : touchesByTarget.get(touchEventTarget)); | 3784 RefPtrWillBeRawPtr<TouchList> targetTouches(isTouchCancelEvent ? emp
tyList.get() : touchesByTarget.get(touchEventTarget)); |
| 3785 ASSERT(targetTouches); | 3785 ASSERT(targetTouches); |
| 3786 | 3786 |
| 3787 RefPtr<TouchEvent> touchEvent = | 3787 RefPtrWillBeRawPtr<TouchEvent> touchEvent = |
| 3788 TouchEvent::create(effectiveTouches.get(), targetTouches.get(),
changedTouches[state].m_touches.get(), | 3788 TouchEvent::create(effectiveTouches.get(), targetTouches.get(),
changedTouches[state].m_touches.get(), |
| 3789 stateName, touchEventTarget->toNode()->document().domWindow(
), | 3789 stateName, touchEventTarget->toNode()->document().domWindow(
), |
| 3790 0, 0, 0, 0, event.ctrlKey(), event.altKey(), event.shiftKey(
), event.metaKey()); | 3790 0, 0, 0, 0, event.ctrlKey(), event.altKey(), event.shiftKey(
), event.metaKey()); |
| 3791 touchEventTarget->toNode()->dispatchTouchEvent(touchEvent.get()); | 3791 touchEventTarget->toNode()->dispatchTouchEvent(touchEvent.get()); |
| 3792 swallowedEvent = swallowedEvent || touchEvent->defaultPrevented() ||
touchEvent->defaultHandled(); | 3792 swallowedEvent = swallowedEvent || touchEvent->defaultPrevented() ||
touchEvent->defaultHandled(); |
| 3793 } | 3793 } |
| 3794 } | 3794 } |
| 3795 | 3795 |
| 3796 return swallowedEvent; | 3796 return swallowedEvent; |
| 3797 } | 3797 } |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4042 unsigned EventHandler::accessKeyModifiers() | 4042 unsigned EventHandler::accessKeyModifiers() |
| 4043 { | 4043 { |
| 4044 #if OS(MACOSX) | 4044 #if OS(MACOSX) |
| 4045 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 4045 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
| 4046 #else | 4046 #else |
| 4047 return PlatformEvent::AltKey; | 4047 return PlatformEvent::AltKey; |
| 4048 #endif | 4048 #endif |
| 4049 } | 4049 } |
| 4050 | 4050 |
| 4051 } // namespace WebCore | 4051 } // namespace WebCore |
| OLD | NEW |