зеркало из 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;
|
mWindow->mFullScreen = mFullscreen;
|
||||||
}
|
}
|
||||||
// Toggle the fullscreen state on the widget
|
// Toggle the fullscreen state on the widget
|
||||||
mWindow->SetWidgetFullscreen(nsPIDOMWindow::eForFullscreenAPI,
|
if (!mWindow->SetWidgetFullscreen(nsPIDOMWindow::eForFullscreenAPI,
|
||||||
mFullscreen, mWidget, mScreen);
|
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.
|
// Set observer for the next content paint.
|
||||||
nsCOMPtr<nsIObserver> observer = new Observer(this);
|
nsCOMPtr<nsIObserver> observer = new Observer(this);
|
||||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||||
|
@ -5994,14 +5998,14 @@ MakeWidgetFullscreen(nsGlobalWindow* aWindow, gfx::VRDeviceProxy* aHMD,
|
||||||
}
|
}
|
||||||
nsCOMPtr<nsIScreen> screen = aHMD ? aHMD->GetScreen() : nullptr;
|
nsCOMPtr<nsIScreen> screen = aHMD ? aHMD->GetScreen() : nullptr;
|
||||||
if (!performTransition) {
|
if (!performTransition) {
|
||||||
aWindow->SetWidgetFullscreen(aReason, aFullscreen, widget, screen);
|
return aWindow->SetWidgetFullscreen(aReason, aFullscreen, widget, screen);
|
||||||
} else {
|
} else {
|
||||||
nsCOMPtr<nsIRunnable> task =
|
nsCOMPtr<nsIRunnable> task =
|
||||||
new FullscreenTransitionTask(duration, aWindow, aFullscreen,
|
new FullscreenTransitionTask(duration, aWindow, aFullscreen,
|
||||||
widget, screen, transitionData);
|
widget, screen, transitionData);
|
||||||
task->Run();
|
task->Run();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
|
@ -6105,7 +6109,7 @@ nsGlobalWindow::SetFullscreenInternal(FullscreenReason aReason,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
bool
|
||||||
nsGlobalWindow::SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen,
|
nsGlobalWindow::SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen,
|
||||||
nsIWidget* aWidget, nsIScreen* aScreen)
|
nsIWidget* aWidget, nsIScreen* aScreen)
|
||||||
{
|
{
|
||||||
|
@ -6117,13 +6121,12 @@ nsGlobalWindow::SetWidgetFullscreen(FullscreenReason aReason, bool aIsFullscreen
|
||||||
if (nsCOMPtr<nsIPresShell> presShell = mDocShell->GetPresShell()) {
|
if (nsCOMPtr<nsIPresShell> presShell = mDocShell->GetPresShell()) {
|
||||||
presShell->SetIsInFullscreenChange(true);
|
presShell->SetIsInFullscreenChange(true);
|
||||||
}
|
}
|
||||||
if (aReason == nsPIDOMWindow::eForFullscreenMode) {
|
nsresult rv = aReason == nsPIDOMWindow::eForFullscreenMode ?
|
||||||
// If we enter fullscreen for fullscreen mode, we want
|
// If we enter fullscreen for fullscreen mode, we want
|
||||||
// the native system behavior.
|
// the native system behavior.
|
||||||
aWidget->MakeFullScreenWithNativeTransition(aIsFullscreen, aScreen);
|
aWidget->MakeFullScreenWithNativeTransition(aIsFullscreen, aScreen) :
|
||||||
} else {
|
|
||||||
aWidget->MakeFullScreen(aIsFullscreen, aScreen);
|
aWidget->MakeFullScreen(aIsFullscreen, aScreen);
|
||||||
}
|
return NS_SUCCEEDED(rv);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* virtual */ void
|
/* virtual */ void
|
||||||
|
|
|
@ -473,7 +473,7 @@ public:
|
||||||
FullscreenReason aReason, bool aIsFullscreen,
|
FullscreenReason aReason, bool aIsFullscreen,
|
||||||
mozilla::gfx::VRDeviceProxy *aHMD = nullptr) override final;
|
mozilla::gfx::VRDeviceProxy *aHMD = nullptr) override final;
|
||||||
virtual void FinishFullscreenChange(bool aIsFullscreen) 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);
|
nsIWidget* aWidget, nsIScreen* aScreen);
|
||||||
bool FullScreen() const;
|
bool FullScreen() const;
|
||||||
|
|
||||||
|
|
|
@ -1142,6 +1142,10 @@ class nsIWidget : public nsISupports {
|
||||||
* if possible. (If not, it behaves as if aTargetScreen is null.)
|
* if possible. (If not, it behaves as if aTargetScreen is null.)
|
||||||
* If !aFullScreen, aTargetScreen is ignored.
|
* If !aFullScreen, aTargetScreen is ignored.
|
||||||
* aTargetScreen support is currently only implemented on Windows.
|
* 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;
|
NS_IMETHOD MakeFullScreen(bool aFullScreen, nsIScreen* aTargetScreen = nullptr) = 0;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче