Bug 1425441 - Move relatedTarget to WidgetEvent

Tag #1375
This commit is contained in:
Matt A. Tobin 2020-04-17 07:34:35 -04:00 • committed by Roy Tam
commit 907e210445
7 changed files with 11 additions and 39 deletions

View file

@ -825,7 +825,7 @@ nsIContent::GetEventTargetParent(EventChainPreVisitor& aVisitor)
((this == aVisitor.mEvent->mOriginalTarget && ((this == aVisitor.mEvent->mOriginalTarget &&
!ChromeOnlyAccess()) || isAnonForEvents || GetShadowRoot())) { !ChromeOnlyAccess()) || isAnonForEvents || GetShadowRoot())) {
nsCOMPtr<nsIContent> relatedTarget = nsCOMPtr<nsIContent> relatedTarget =
do_QueryInterface(aVisitor.mEvent->AsMouseEvent()->relatedTarget); do_QueryInterface(aVisitor.mEvent->AsMouseEvent()->mRelatedTarget);
if (relatedTarget && if (relatedTarget &&
relatedTarget->OwnerDoc() == OwnerDoc()) { relatedTarget->OwnerDoc() == OwnerDoc()) {

View file

@ -158,18 +158,11 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Event)
tmp->mEvent->mTarget = nullptr; tmp->mEvent->mTarget = nullptr;
tmp->mEvent->mCurrentTarget = nullptr; tmp->mEvent->mCurrentTarget = nullptr;
tmp->mEvent->mOriginalTarget = nullptr; tmp->mEvent->mOriginalTarget = nullptr;
tmp->mEvent->mRelatedTarget = nullptr;
switch (tmp->mEvent->mClass) { switch (tmp->mEvent->mClass) {
case eMouseEventClass:
case eMouseScrollEventClass:
case eWheelEventClass:
case eSimpleGestureEventClass:
case ePointerEventClass:
tmp->mEvent->AsMouseEventBase()->relatedTarget = nullptr;
break;
case eDragEventClass: { case eDragEventClass: {
WidgetDragEvent* dragEvent = tmp->mEvent->AsDragEvent(); WidgetDragEvent* dragEvent = tmp->mEvent->AsDragEvent();
dragEvent->mDataTransfer = nullptr; dragEvent->mDataTransfer = nullptr;
dragEvent->relatedTarget = nullptr;
break; break;
} }
case eClipboardEventClass: case eClipboardEventClass:
@ -178,9 +171,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Event)
case eMutationEventClass: case eMutationEventClass:
tmp->mEvent->AsMutationEvent()->mRelatedNode = nullptr; tmp->mEvent->AsMutationEvent()->mRelatedNode = nullptr;
break; break;
case eFocusEventClass:
tmp->mEvent->AsFocusEvent()->mRelatedTarget = nullptr;
break;
default: default:
break; break;
} }
@ -196,21 +186,12 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Event)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mTarget) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mTarget)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mCurrentTarget) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mCurrentTarget)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mOriginalTarget) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mOriginalTarget)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEvent->mRelatedTarget)
switch (tmp->mEvent->mClass) { switch (tmp->mEvent->mClass) {
case eMouseEventClass:
case eMouseScrollEventClass:
case eWheelEventClass:
case eSimpleGestureEventClass:
case ePointerEventClass:
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->relatedTarget");
cb.NoteXPCOMChild(tmp->mEvent->AsMouseEventBase()->relatedTarget);
break;
case eDragEventClass: { case eDragEventClass: {
WidgetDragEvent* dragEvent = tmp->mEvent->AsDragEvent(); WidgetDragEvent* dragEvent = tmp->mEvent->AsDragEvent();
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->mDataTransfer"); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->mDataTransfer");
cb.NoteXPCOMChild(dragEvent->mDataTransfer); cb.NoteXPCOMChild(dragEvent->mDataTransfer);
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->relatedTarget");
cb.NoteXPCOMChild(dragEvent->relatedTarget);
break; break;
} }
case eClipboardEventClass: case eClipboardEventClass:
@ -221,10 +202,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Event)
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->mRelatedNode"); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->mRelatedNode");
cb.NoteXPCOMChild(tmp->mEvent->AsMutationEvent()->mRelatedNode); cb.NoteXPCOMChild(tmp->mEvent->AsMutationEvent()->mRelatedNode);
break; break;
case eFocusEventClass:
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mEvent->mRelatedTarget");
cb.NoteXPCOMChild(tmp->mEvent->AsFocusEvent()->mRelatedTarget);
break;
default: default:
break; break;
} }

View file

@ -3906,13 +3906,13 @@ CreateMouseOrPointerWidgetEvent(WidgetMouseEvent* aMouseEvent,
newPointerEvent->mWidth = sourcePointer->mWidth; newPointerEvent->mWidth = sourcePointer->mWidth;
newPointerEvent->mHeight = sourcePointer->mHeight; newPointerEvent->mHeight = sourcePointer->mHeight;
newPointerEvent->inputSource = sourcePointer->inputSource; newPointerEvent->inputSource = sourcePointer->inputSource;
newPointerEvent->relatedTarget = aRelatedContent; newPointerEvent->mRelatedTarget = aRelatedContent;
aNewEvent = newPointerEvent.forget(); aNewEvent = newPointerEvent.forget();
} else { } else {
aNewEvent = aNewEvent =
new WidgetMouseEvent(aMouseEvent->IsTrusted(), aMessage, new WidgetMouseEvent(aMouseEvent->IsTrusted(), aMessage,
aMouseEvent->mWidget, WidgetMouseEvent::eReal); aMouseEvent->mWidget, WidgetMouseEvent::eReal);
aNewEvent->relatedTarget = aRelatedContent; aNewEvent->mRelatedTarget = aRelatedContent;
} }
aNewEvent->mRefPoint = aMouseEvent->mRefPoint; aNewEvent->mRefPoint = aMouseEvent->mRefPoint;
aNewEvent->mModifiers = aMouseEvent->mModifiers; aNewEvent->mModifiers = aMouseEvent->mModifiers;

View file

@ -79,7 +79,7 @@ MouseEvent::InitMouseEvent(const nsAString& aType,
case ePointerEventClass: case ePointerEventClass:
case eSimpleGestureEventClass: { case eSimpleGestureEventClass: {
WidgetMouseEventBase* mouseEventBase = mEvent->AsMouseEventBase(); WidgetMouseEventBase* mouseEventBase = mEvent->AsMouseEventBase();
mouseEventBase->relatedTarget = aRelatedTarget; mouseEventBase->mRelatedTarget = aRelatedTarget;
mouseEventBase->button = aButton; mouseEventBase->button = aButton;
mouseEventBase->InitBasicModifiers(aCtrlKey, aAltKey, aShiftKey, aMetaKey); mouseEventBase->InitBasicModifiers(aCtrlKey, aAltKey, aShiftKey, aMetaKey);
mClientPoint.x = aClientX; mClientPoint.x = aClientX;
@ -295,8 +295,7 @@ MouseEvent::GetRelatedTarget()
case eDragEventClass: case eDragEventClass:
case ePointerEventClass: case ePointerEventClass:
case eSimpleGestureEventClass: case eSimpleGestureEventClass:
relatedTarget = relatedTarget = mEvent->AsMouseEventBase()->mRelatedTarget;
do_QueryInterface(mEvent->AsMouseEventBase()->relatedTarget);
break; break;
default: default:
break; break;

View file

@ -423,6 +423,9 @@ public:
nsCOMPtr<dom::EventTarget> mCurrentTarget; nsCOMPtr<dom::EventTarget> mCurrentTarget;
nsCOMPtr<dom::EventTarget> mOriginalTarget; nsCOMPtr<dom::EventTarget> mOriginalTarget;
/// The possible related target
nsCOMPtr<dom::EventTarget> mRelatedTarget;
nsTArray<EventTargetChainItem>* mPath; nsTArray<EventTargetChainItem>* mPath;
dom::EventTarget* GetDOMEventTarget() const; dom::EventTarget* GetDOMEventTarget() const;
@ -442,6 +445,7 @@ public:
mTarget = aCopyTargets ? aEvent.mTarget : nullptr; mTarget = aCopyTargets ? aEvent.mTarget : nullptr;
mCurrentTarget = aCopyTargets ? aEvent.mCurrentTarget : nullptr; mCurrentTarget = aCopyTargets ? aEvent.mCurrentTarget : nullptr;
mOriginalTarget = aCopyTargets ? aEvent.mOriginalTarget : nullptr; mOriginalTarget = aCopyTargets ? aEvent.mOriginalTarget : nullptr;
mRelatedTarget = aCopyTargets ? aEvent.mRelatedTarget : nullptr;
} }
/** /**

View file

@ -212,9 +212,6 @@ public:
return result; return result;
} }
/// The possible related target
nsCOMPtr<dom::EventTarget> mRelatedTarget;
bool mFromRaise; bool mFromRaise;
bool mIsRefocus; bool mIsRefocus;
@ -222,7 +219,6 @@ public:
{ {
AssignUIEventData(aEvent, aCopyTargets); AssignUIEventData(aEvent, aCopyTargets);
mRelatedTarget = aCopyTargets ? aEvent.mRelatedTarget : nullptr;
mFromRaise = aEvent.mFromRaise; mFromRaise = aEvent.mFromRaise;
mIsRefocus = aEvent.mIsRefocus; mIsRefocus = aEvent.mIsRefocus;
} }

View file

@ -110,9 +110,6 @@ public:
MOZ_CRASH("WidgetMouseEventBase must not be most-subclass"); MOZ_CRASH("WidgetMouseEventBase must not be most-subclass");
} }
/// The possible related target
nsCOMPtr<nsISupports> relatedTarget;
enum buttonType enum buttonType
{ {
eLeftButton = 0, eLeftButton = 0,
@ -162,7 +159,6 @@ public:
{ {
AssignInputEventData(aEvent, aCopyTargets); AssignInputEventData(aEvent, aCopyTargets);
relatedTarget = aCopyTargets ? aEvent.relatedTarget : nullptr;
button = aEvent.button; button = aEvent.button;
buttons = aEvent.buttons; buttons = aEvent.buttons;
pressure = aEvent.pressure; pressure = aEvent.pressure;