1 /* 2 * Copyright (C) 1999 Lars Knoll (knoll (at) kde.org) 3 * (C) 1999 Antti Koivisto (koivisto (at) kde.org) 4 * (C) 2001 Dirk Mueller (mueller (at) kde.org) 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 8 * Copyright (C) 2011 Google Inc. All rights reserved. 9 * 10 * This library is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU Library General Public 12 * License as published by the Free Software Foundation; either 13 * version 2 of the License, or (at your option) any later version. 14 * 15 * This library is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * Library General Public License for more details. 19 * 20 * You should have received a copy of the GNU Library General Public License 21 * along with this library; see the file COPYING.LIB. If not, write to 22 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 23 * Boston, MA 02110-1301, USA. 24 */ 25 26 #ifndef EventDispatcher_h 27 #define EventDispatcher_h 28 29 #include <wtf/Forward.h> 30 #include <wtf/Vector.h> 31 32 namespace WebCore { 33 34 class Event; 35 class EventContext; 36 class EventDispatchMediator; 37 class EventTarget; 38 class FrameView; 39 class Node; 40 class PlatformKeyboardEvent; 41 class PlatformMouseEvent; 42 class PlatformWheelEvent; 43 44 enum EventDispatchBehavior { 45 RetargetEvent, 46 StayInsideShadowDOM 47 }; 48 49 class EventDispatcher { 50 public: 51 static bool dispatchEvent(Node*, const EventDispatchMediator&); 52 static void dispatchScopedEvent(Node*, PassRefPtr<Event>); 53 54 static void dispatchSimulatedClick(Node*, PassRefPtr<Event> underlyingEvent, bool sendMouseEvents, bool showPressedLook); 55 56 bool dispatchEvent(PassRefPtr<Event>); 57 PassRefPtr<EventTarget> adjustRelatedTarget(Event*, PassRefPtr<EventTarget>); 58 Node* node() const; 59 60 private: 61 EventDispatcher(Node*); 62 63 PassRefPtr<EventTarget> adjustToShadowBoundaries(PassRefPtr<Node> relatedTarget, const Vector<Node*> relatedTargetAncestors); 64 EventDispatchBehavior determineDispatchBehavior(Event*); 65 void ensureEventAncestors(Event*); 66 const EventContext* topEventContext(); 67 68 Vector<EventContext> m_ancestors; 69 RefPtr<Node> m_node; 70 RefPtr<EventTarget> m_originalTarget; 71 RefPtr<FrameView> m_view; 72 bool m_ancestorsInitialized; 73 }; 74 75 inline Node* EventDispatcher::node() const 76 { 77 return m_node.get(); 78 } 79 80 } 81 82 #endif 83