diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-04-26 14:13:32 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-04-26 14:17:01 +0200 |
commit | bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd (patch) | |
tree | 7c5654a9ae682e00864e023cf52694505ee5dd4d /layout/base | |
parent | d1b93ee16bcfe882aba5af33e5693df4caae81b3 (diff) | |
download | UXP-bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd.tar UXP-bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd.tar.gz UXP-bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd.tar.lz UXP-bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd.tar.xz UXP-bf0b2ab2ed3a117cd2c561a47ca939d82e11fddd.zip |
Capture delayed events and cancel as necessary. (uplift)PM28.5.0_Release
Resolves #1052
Diffstat (limited to 'layout/base')
-rw-r--r-- | layout/base/nsPresShell.cpp | 12 | ||||
-rw-r--r-- | layout/base/nsPresShell.h | 4 |
2 files changed, 16 insertions, 0 deletions
diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index 5dfbb8dba..d4fbebbf2 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -8192,6 +8192,9 @@ PresShell::HandleEventInternal(WidgetEvent* aEvent, } } } + if (aEvent->mMessage == eKeyDown) { + mIsLastKeyDownCanceled = aEvent->mFlags.mDefaultPrevented; + } break; } case eMouseUp: @@ -8981,6 +8984,9 @@ PresShell::FireOrClearDelayedEvents(bool aFireEvents) !doc->EventHandlingSuppressed()) { nsAutoPtr<DelayedEvent> ev(mDelayedEvents[0].forget()); mDelayedEvents.RemoveElementAt(0); + if (ev->IsKeyPressEvent() && mIsLastKeyDownCanceled) { + continue; + } ev->Dispatch(); } if (!doc->EventHandlingSuppressed()) { @@ -9775,6 +9781,12 @@ PresShell::DelayedKeyEvent::DelayedKeyEvent(WidgetKeyboardEvent* aEvent) : mEvent = keyEvent; } +bool +PresShell::DelayedKeyEvent::IsKeyPressEvent() +{ + return mEvent->mMessage == eKeyPress; +} + // Start of DEBUG only code #ifdef DEBUG diff --git a/layout/base/nsPresShell.h b/layout/base/nsPresShell.h index 7a9056a38..1a8dd3fef 100644 --- a/layout/base/nsPresShell.h +++ b/layout/base/nsPresShell.h @@ -617,6 +617,7 @@ protected: public: virtual ~DelayedEvent() { } virtual void Dispatch() { } + virtual bool IsKeyPressEvent() { return false; } }; class DelayedInputEvent : public DelayedEvent @@ -641,6 +642,7 @@ protected: { public: explicit DelayedKeyEvent(mozilla::WidgetKeyboardEvent* aEvent); + virtual bool IsKeyPressEvent() override; }; // Check if aEvent is a mouse event and record the mouse location for later @@ -951,6 +953,8 @@ protected: // Whether the widget has received a paint message yet. bool mHasReceivedPaintMessage : 1; + bool mIsLastKeyDownCanceled : 1; + static bool sDisableNonTestMouseEvents; }; |