Bug 1653949 - Part 4: Add MouseExitFromWidget event to the delayed event queue if event handling is suppressed; r=smaug

So that we won't lost it if it happens in nested event loop.

Differential Revision: https://phabricator.services.mozilla.com/D86953
This commit is contained in:
Edgar Chen 2020-08-27 17:19:07 +00:00
parent 85d4338685
commit e4efe37095
2 changed files with 3 additions and 1 deletions

View File

@ -7610,7 +7610,8 @@ bool PresShell::EventHandler::MaybeDiscardOrDelayMouseEvent(
(aGUIEvent->mMessage == eMouseUp || (aGUIEvent->mMessage == eMouseUp ||
// contextmenu is triggered after right mouseup on Windows and // contextmenu is triggered after right mouseup on Windows and
// right mousedown on other platforms. // right mousedown on other platforms.
aGUIEvent->mMessage == eContextMenu)) { aGUIEvent->mMessage == eContextMenu ||
aGUIEvent->mMessage == eMouseExitFromWidget)) {
UniquePtr<DelayedMouseEvent> delayedMouseEvent = UniquePtr<DelayedMouseEvent> delayedMouseEvent =
MakeUnique<DelayedMouseEvent>(aGUIEvent->AsMouseEvent()); MakeUnique<DelayedMouseEvent>(aGUIEvent->AsMouseEvent());
PushDelayedEventIntoQueue(std::move(delayedMouseEvent)); PushDelayedEventIntoQueue(std::move(delayedMouseEvent));

View File

@ -292,6 +292,7 @@ class WidgetMouseEvent : public WidgetMouseEventBase,
AssignMouseEventBaseData(aEvent, aCopyTargets); AssignMouseEventBaseData(aEvent, aCopyTargets);
AssignPointerHelperData(aEvent, /* aCopyCoalescedEvents */ true); AssignPointerHelperData(aEvent, /* aCopyCoalescedEvents */ true);
mExitFrom = aEvent.mExitFrom;
mIgnoreRootScrollFrame = aEvent.mIgnoreRootScrollFrame; mIgnoreRootScrollFrame = aEvent.mIgnoreRootScrollFrame;
mClickCount = aEvent.mClickCount; mClickCount = aEvent.mClickCount;
mUseLegacyNonPrimaryDispatch = aEvent.mUseLegacyNonPrimaryDispatch; mUseLegacyNonPrimaryDispatch = aEvent.mUseLegacyNonPrimaryDispatch;