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 1354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3117 if (initialKeyEvent.type() == PlatformEvent::KeyDown) | 3117 if (initialKeyEvent.type() == PlatformEvent::KeyDown) |
3118 matchedAnAccessKey = handleAccessKey(initialKeyEvent); | 3118 matchedAnAccessKey = handleAccessKey(initialKeyEvent); |
3119 | 3119 |
3120 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. | 3120 // FIXME: it would be fair to let an input method handle KeyUp events before
DOM dispatch. |
3121 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) | 3121 if (initialKeyEvent.type() == PlatformEvent::KeyUp || initialKeyEvent.type()
== PlatformEvent::Char) |
3122 return !node->dispatchKeyEvent(initialKeyEvent); | 3122 return !node->dispatchKeyEvent(initialKeyEvent); |
3123 | 3123 |
3124 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; | 3124 PlatformKeyboardEvent keyDownEvent = initialKeyEvent; |
3125 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) | 3125 if (keyDownEvent.type() != PlatformEvent::RawKeyDown) |
3126 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); | 3126 keyDownEvent.disambiguateKeyDownEvent(PlatformEvent::RawKeyDown); |
3127 RefPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEvent, m_frame-
>document()->domWindow()); | 3127 RefPtrWillBeRawPtr<KeyboardEvent> keydown = KeyboardEvent::create(keyDownEve
nt, m_frame->document()->domWindow()); |
3128 if (matchedAnAccessKey) | 3128 if (matchedAnAccessKey) |
3129 keydown->setDefaultPrevented(true); | 3129 keydown->setDefaultPrevented(true); |
3130 keydown->setTarget(node); | 3130 keydown->setTarget(node); |
3131 | 3131 |
3132 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { | 3132 if (initialKeyEvent.type() == PlatformEvent::RawKeyDown) { |
3133 node->dispatchEvent(keydown, IGNORE_EXCEPTION); | 3133 node->dispatchEvent(keydown, IGNORE_EXCEPTION); |
3134 // If frame changed as a result of keydown dispatch, then return true to
avoid sending a subsequent keypress message to the new frame. | 3134 // If frame changed as a result of keydown dispatch, then return true to
avoid sending a subsequent keypress message to the new frame. |
3135 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()
->focusController().focusedOrMainFrame(); | 3135 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()
->focusController().focusedOrMainFrame(); |
3136 return keydown->defaultHandled() || keydown->defaultPrevented() || chang
edFocusedFrame; | 3136 return keydown->defaultHandled() || keydown->defaultPrevented() || chang
edFocusedFrame; |
3137 } | 3137 } |
3138 | 3138 |
3139 node->dispatchEvent(keydown, IGNORE_EXCEPTION); | 3139 node->dispatchEvent(keydown, IGNORE_EXCEPTION); |
3140 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. | 3140 // If frame changed as a result of keydown dispatch, then return early to av
oid sending a subsequent keypress message to the new frame. |
3141 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); | 3141 bool changedFocusedFrame = m_frame->page() && m_frame != m_frame->page()->fo
cusController().focusedOrMainFrame(); |
3142 bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented(
) || changedFocusedFrame; | 3142 bool keydownResult = keydown->defaultHandled() || keydown->defaultPrevented(
) || changedFocusedFrame; |
3143 if (keydownResult) | 3143 if (keydownResult) |
3144 return keydownResult; | 3144 return keydownResult; |
3145 | 3145 |
3146 // Focus may have changed during keydown handling, so refetch node. | 3146 // Focus may have changed during keydown handling, so refetch node. |
3147 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. | 3147 // But if we are dispatching a fake backward compatibility keypress, then we
pretend that the keypress happened on the original node. |
3148 node = eventTargetNodeForDocument(m_frame->document()); | 3148 node = eventTargetNodeForDocument(m_frame->document()); |
3149 if (!node) | 3149 if (!node) |
3150 return false; | 3150 return false; |
3151 | 3151 |
3152 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; | 3152 PlatformKeyboardEvent keyPressEvent = initialKeyEvent; |
3153 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); | 3153 keyPressEvent.disambiguateKeyDownEvent(PlatformEvent::Char); |
3154 if (keyPressEvent.text().isEmpty()) | 3154 if (keyPressEvent.text().isEmpty()) |
3155 return keydownResult; | 3155 return keydownResult; |
3156 RefPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressEvent, m_fram
e->document()->domWindow()); | 3156 RefPtrWillBeRawPtr<KeyboardEvent> keypress = KeyboardEvent::create(keyPressE
vent, m_frame->document()->domWindow()); |
3157 keypress->setTarget(node); | 3157 keypress->setTarget(node); |
3158 if (keydownResult) | 3158 if (keydownResult) |
3159 keypress->setDefaultPrevented(true); | 3159 keypress->setDefaultPrevented(true); |
3160 node->dispatchEvent(keypress, IGNORE_EXCEPTION); | 3160 node->dispatchEvent(keypress, IGNORE_EXCEPTION); |
3161 | 3161 |
3162 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan
dled(); | 3162 return keydownResult || keypress->defaultPrevented() || keypress->defaultHan
dled(); |
3163 } | 3163 } |
3164 | 3164 |
3165 static FocusType focusDirectionForKey(const AtomicString& keyIdentifier) | 3165 static FocusType focusDirectionForKey(const AtomicString& keyIdentifier) |
3166 { | 3166 { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3398 return false; | 3398 return false; |
3399 | 3399 |
3400 EventTarget* target; | 3400 EventTarget* target; |
3401 if (underlyingEvent) | 3401 if (underlyingEvent) |
3402 target = underlyingEvent->target(); | 3402 target = underlyingEvent->target(); |
3403 else | 3403 else |
3404 target = eventTargetNodeForDocument(m_frame->document()); | 3404 target = eventTargetNodeForDocument(m_frame->document()); |
3405 if (!target) | 3405 if (!target) |
3406 return false; | 3406 return false; |
3407 | 3407 |
3408 RefPtr<TextEvent> event = TextEvent::create(m_frame->domWindow(), text, inpu
tType); | 3408 RefPtrWillBeRawPtr<TextEvent> event = TextEvent::create(m_frame->domWindow()
, text, inputType); |
3409 event->setUnderlyingEvent(underlyingEvent); | 3409 event->setUnderlyingEvent(underlyingEvent); |
3410 | 3410 |
3411 target->dispatchEvent(event, IGNORE_EXCEPTION); | 3411 target->dispatchEvent(event, IGNORE_EXCEPTION); |
3412 return event->defaultHandled(); | 3412 return event->defaultHandled(); |
3413 } | 3413 } |
3414 | 3414 |
3415 void EventHandler::defaultTextInputEventHandler(TextEvent* event) | 3415 void EventHandler::defaultTextInputEventHandler(TextEvent* event) |
3416 { | 3416 { |
3417 if (m_frame->editor().handleTextEvent(event)) | 3417 if (m_frame->editor().handleTextEvent(event)) |
3418 event->setDefaultHandled(); | 3418 event->setDefaultHandled(); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3773 bool isTouchCancelEvent = (state == PlatformTouchPoint::TouchCancelled); | 3773 bool isTouchCancelEvent = (state == PlatformTouchPoint::TouchCancelled); |
3774 RefPtrWillBeRawPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emp
tyList : touches); | 3774 RefPtrWillBeRawPtr<TouchList>& effectiveTouches(isTouchCancelEvent ? emp
tyList : touches); |
3775 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); | 3775 const AtomicString& stateName(eventNameForTouchPointState(static_cast<Pl
atformTouchPoint::State>(state))); |
3776 const EventTargetSet& targetsForState = changedTouches[state].m_targets; | 3776 const EventTargetSet& targetsForState = changedTouches[state].m_targets; |
3777 | 3777 |
3778 for (EventTargetSet::const_iterator it = targetsForState.begin(); it !=
targetsForState.end(); ++it) { | 3778 for (EventTargetSet::const_iterator it = targetsForState.begin(); it !=
targetsForState.end(); ++it) { |
3779 EventTarget* touchEventTarget = it->get(); | 3779 EventTarget* touchEventTarget = it->get(); |
3780 RefPtrWillBeRawPtr<TouchList> targetTouches(isTouchCancelEvent ? emp
tyList.get() : touchesByTarget.get(touchEventTarget)); | 3780 RefPtrWillBeRawPtr<TouchList> targetTouches(isTouchCancelEvent ? emp
tyList.get() : touchesByTarget.get(touchEventTarget)); |
3781 ASSERT(targetTouches); | 3781 ASSERT(targetTouches); |
3782 | 3782 |
3783 RefPtr<TouchEvent> touchEvent = | 3783 RefPtrWillBeRawPtr<TouchEvent> touchEvent = |
3784 TouchEvent::create(effectiveTouches.get(), targetTouches.get(),
changedTouches[state].m_touches.get(), | 3784 TouchEvent::create(effectiveTouches.get(), targetTouches.get(),
changedTouches[state].m_touches.get(), |
3785 stateName, touchEventTarget->toNode()->document().domWindow(
), | 3785 stateName, touchEventTarget->toNode()->document().domWindow(
), |
3786 0, 0, 0, 0, event.ctrlKey(), event.altKey(), event.shiftKey(
), event.metaKey()); | 3786 0, 0, 0, 0, event.ctrlKey(), event.altKey(), event.shiftKey(
), event.metaKey()); |
3787 touchEventTarget->toNode()->dispatchTouchEvent(touchEvent.get()); | 3787 touchEventTarget->toNode()->dispatchTouchEvent(touchEvent.get()); |
3788 swallowedEvent = swallowedEvent || touchEvent->defaultPrevented() ||
touchEvent->defaultHandled(); | 3788 swallowedEvent = swallowedEvent || touchEvent->defaultPrevented() ||
touchEvent->defaultHandled(); |
3789 } | 3789 } |
3790 } | 3790 } |
3791 | 3791 |
3792 return swallowedEvent; | 3792 return swallowedEvent; |
3793 } | 3793 } |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4038 unsigned EventHandler::accessKeyModifiers() | 4038 unsigned EventHandler::accessKeyModifiers() |
4039 { | 4039 { |
4040 #if OS(MACOSX) | 4040 #if OS(MACOSX) |
4041 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; | 4041 return PlatformEvent::CtrlKey | PlatformEvent::AltKey; |
4042 #else | 4042 #else |
4043 return PlatformEvent::AltKey; | 4043 return PlatformEvent::AltKey; |
4044 #endif | 4044 #endif |
4045 } | 4045 } |
4046 | 4046 |
4047 } // namespace WebCore | 4047 } // namespace WebCore |
OLD | NEW |