Bug 1315862 Part1: Stop dispatching pointer events in the system group. r=masayuki,smaug
MozReview-Commit-ID: 8Xqp3bxlRFt
--- a/dom/events/EventDispatcher.cpp
+++ b/dom/events/EventDispatcher.cpp
@@ -402,17 +402,18 @@ EventTargetChainItem::HandleEventTargetC
}
if (aVisitor.mEvent->mFlags.mInSystemGroup) {
item.PostHandleEvent(aVisitor);
}
}
}
aVisitor.mEvent->mFlags.mInBubblingPhase = false;
- if (!aVisitor.mEvent->mFlags.mInSystemGroup) {
+ if (!aVisitor.mEvent->mFlags.mInSystemGroup &&
+ aVisitor.mEvent->IsAllowedToDispatchInSystemGroup()) {
// Dispatch to the system event group. Make sure to clear the
// STOP_DISPATCH flag since this resets for each event group.
aVisitor.mEvent->mFlags.mPropagationStopped = false;
aVisitor.mEvent->mFlags.mImmediatePropagationStopped = false;
// Setting back the original target of the event.
aVisitor.mEvent->mTarget = aVisitor.mEvent->mOriginalTarget;
--- a/widget/BasicEvents.h
+++ b/widget/BasicEvents.h
@@ -546,16 +546,20 @@ public:
* the last focused window.
*/
bool IsTargetedAtFocusedContent() const;
/**
* Whether the event should cause a DOM event.
*/
bool IsAllowedToDispatchDOMEvent() const;
/**
+ * Whether the event should be dispatched in system group.
+ */
+ bool IsAllowedToDispatchInSystemGroup() const;
+ /**
* Initialize mComposed
*/
void SetDefaultComposed()
{
switch (mClass) {
case eCompositionEventClass:
mFlags.mComposed = mMessage == eCompositionStart ||
mMessage == eCompositionUpdate ||
--- a/widget/WidgetEventImpl.cpp
+++ b/widget/WidgetEventImpl.cpp
@@ -400,16 +400,25 @@ WidgetEvent::IsAllowedToDispatchDOMEvent
case eContentCommandEventClass:
return false;
default:
return true;
}
}
+bool
+WidgetEvent::IsAllowedToDispatchInSystemGroup() const
+{
+ // We don't expect to implement default behaviors with pointer events because
+ // if we do, prevent default on mouse events can't prevent default behaviors
+ // anymore.
+ return mClass != ePointerEventClass;
+}
+
/******************************************************************************
* mozilla::WidgetInputEvent
******************************************************************************/
/* static */
Modifier
WidgetInputEvent::GetModifier(const nsAString& aDOMKeyName)
{