Bug 1332040 - Dispatch resize after fullscreen transistion for headless. r=jrmuizel

MozReview-Commit-ID: Lo17bhJsnww

--HG--
extra : rebase_source : 6266e9141d8bf99ec4dbaaf6b909e6c02ef9b9d6
This commit is contained in:
Brendan Dahl 2018-05-20 17:00:57 -07:00
parent 032c83cdd5
commit 962180171e

View File

@ -417,13 +417,26 @@ HeadlessWidget::MakeFullScreen(bool aFullScreen, nsIScreen* aTargetScreen)
mSizeMode = mLastSizeMode;
}
nsBaseWidget::InfallibleMakeFullScreen(aFullScreen, aTargetScreen);
// Notify the listener first so size mode change events are triggered before
// resize events.
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeMode);
mWidgetListener->FullscreenChanged(aFullScreen);
}
// Real widget backends don't seem to follow a common approach for
// when and how many resize events are triggered during fullscreen
// transitions. InfallibleMakeFullScreen will trigger a resize, but it
// will be ignored if still transitioning to fullscreen, so it must be
// triggered on the next tick.
RefPtr<HeadlessWidget> self(this);
nsCOMPtr<nsIScreen> targetScreen(aTargetScreen);
NS_DispatchToCurrentThread(NS_NewRunnableFunction(
"HeadlessWidget::MakeFullScreen",
[self, targetScreen, aFullScreen]() -> void {
self->InfallibleMakeFullScreen(aFullScreen, targetScreen);
}));
return NS_OK;
}