зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1189622 part 2 - Allow widget's MakeFullScreen to fail, and call FinishFullscreenChange directly if that happens. r=smaug
--HG-- extra : source : a851e10d72b71dbd7bab21e3e6ef80214f680b9b
This commit is contained in:
Родитель
5e959008be
Коммит
42b9ed4bfc
|
@ -5914,8 +5914,12 @@ FullscreenTransitionTask::Run()
|
|||
mWindow->mFullScreen = mFullscreen;
|
||||
}
|
||||
// Toggle the fullscreen state on the widget
|
||||
mWindow->SetWidgetFullscreen(nsPIDOMWindow::eForFullscreenAPI,
|
||||
mFullscreen, mWidget, mScreen);
|
||||
if (!mWindow->SetWidgetFullscreen(nsPIDOMWindow::eForFullscreenAPI,
|
||||
mFullscreen, mWidget, mScreen)) {
|
||||
// Fail to setup the widget, call FinishFullscreenChange to
|
||||
// complete fullscreen change directly.
|
||||
mWindow->FinishFullscreenChange(mFullscreen);
|
||||
}
|
||||
// Set observer for the next content paint.
|
||||
nsCOMPtr<nsIObserver> observer = new Observer(this);
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
|
@ -5994,14 +5998,14 @@ MakeWidgetFullscreen(nsGlobalWindow* aWindow, gfx::VRDeviceProxy* aHMD,
|
|||
}
|
||||
nsCOMPtr<nsIScreen> screen = aHMD ? aHMD->GetScreen() : nullptr;
|
||||
if (!performTransition) {
|
||||
aWindow->SetWidgetFullscreen(aReason, aFullscreen, widget, screen);
|
||||
return aWindow->SetWidgetFullscreen(aReason, aFullscreen, widget, screen);
|
||||
} else {
|
||||
nsCOMPtr<nsIRunnable> task =
|
||||
new FullscreenTransitionTask(duration, aWindow, aFullscreen,
|
||||
widget, screen, transitionData);
|
||||
task->Run();
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -6105,7 +6109,7 @@ nsGlobalWindow::SetFullscreenInternal(FullscreenReason aReason,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
nsGlobalWindow::SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen,
|
||||
nsIWidget* aWidget, nsIScreen* aScreen)
|
||||
{
|
||||
|
@ -6117,13 +6121,12 @@ nsGlobalWindow::SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen
|
|||
if (nsCOMPtr<nsIPresShell> presShell = mDocShell->GetPresShell()) {
|
||||
presShell->SetIsInFullscreenChange(true);
|
||||
}
|
||||
if (aReason == nsPIDOMWindow::eForFullscreenMode) {
|
||||
nsresult rv = aReason == nsPIDOMWindow::eForFullscreenMode ?
|
||||
// If we enter fullscreen for fullscreen mode, we want
|
||||
// the native system behavior.
|
||||
aWidget->MakeFullScreenWithNativeTransition(aIsFullscreen, aScreen);
|
||||
} else {
|
||||
aWidget->MakeFullScreenWithNativeTransition(aIsFullscreen, aScreen) :
|
||||
aWidget->MakeFullScreen(aIsFullscreen, aScreen);
|
||||
}
|
||||
return NS_SUCCEEDED(rv);
|
||||
}
|
||||
|
||||
/* virtual */ void
|
||||
|
|
|
@ -473,7 +473,7 @@ public:
|
|||
FullscreenReason aReason, bool aIsFullscreen,
|
||||
mozilla::gfx::VRDeviceProxy *aHMD = nullptr) override final;
|
||||
virtual void FinishFullscreenChange(bool aIsFullscreen) override final;
|
||||
void SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen,
|
||||
bool SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen,
|
||||
nsIWidget* aWidget, nsIScreen* aScreen);
|
||||
bool FullScreen() const;
|
||||
|
||||
|
|
|
@ -1142,6 +1142,10 @@ class nsIWidget : public nsISupports {
|
|||
* if possible. (If not, it behaves as if aTargetScreen is null.)
|
||||
* If !aFullScreen, aTargetScreen is ignored.
|
||||
* aTargetScreen support is currently only implemented on Windows.
|
||||
*
|
||||
* @return NS_OK if the widget is setup properly for fullscreen and
|
||||
* FullscreenChanged callback has been or will be called. If other
|
||||
* value is returned, the caller should continue the change itself.
|
||||
*/
|
||||
NS_IMETHOD MakeFullScreen(bool aFullScreen, nsIScreen* aTargetScreen = nullptr) = 0;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче