diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp index a69c59c13a9d..e92216f14ad9 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -9918,6 +9918,7 @@ PresShell::DelayedKeyEvent::DelayedKeyEvent(WidgetKeyboardEvent* aEvent) : aEvent->mWidget); keyEvent->AssignKeyEventData(*aEvent, false); keyEvent->mFlags.mIsSynthesizedForTests = aEvent->mFlags.mIsSynthesizedForTests; + keyEvent->mFlags.mIsSuppressedOrDelayed = true; mEvent = keyEvent; } diff --git a/widget/BasicEvents.h b/widget/BasicEvents.h index 9484d3a3a1e3..2f4bf15d9f99 100644 --- a/widget/BasicEvents.h +++ b/widget/BasicEvents.h @@ -132,9 +132,12 @@ public: // Similar to mComposed. Set it to true to allow events cross the boundary // between native non-anonymous content and native anonymouse content bool mComposedInNativeAnonymousContent : 1; - // True if the event is suppressed or delayed. This is used when parent side - // process the key event after content side, parent side may drop the key - // event if it was suppressed or delayed in content side. + // Set to true for events which are suppressed or delayed so that later a + // DelayedEvent of it is dispatched. This is used when parent side process + // the key event after content side, and may drop the event if the event + // was suppressed or delayed in contents side. + // It is also set to true for the events (in a DelayedInputEvent), which will + // be dispatched afterwards. bool mIsSuppressedOrDelayed : 1; // If the event is being handled in target phase, returns true. diff --git a/widget/PuppetWidget.cpp b/widget/PuppetWidget.cpp index aa4e5bb3e670..c877cb36c5b4 100644 --- a/widget/PuppetWidget.cpp +++ b/widget/PuppetWidget.cpp @@ -326,7 +326,8 @@ PuppetWidget::DispatchEvent(WidgetGUIEvent* event, nsEventStatus& aStatus) "Unexpected event dispatch!"); AutoCacheNativeKeyCommands autoCache(this); - if (event->mFlags.mIsSynthesizedForTests && !mNativeKeyCommandsValid) { + if ((event->mFlags.mIsSynthesizedForTests || + event->mFlags.mIsSuppressedOrDelayed) && !mNativeKeyCommandsValid) { WidgetKeyboardEvent* keyEvent = event->AsKeyboardEvent(); if (keyEvent) { mTabChild->RequestNativeKeyBindings(&autoCache, keyEvent);