From 0dcf061dc1c4bfc4e02489f9659c45bbde244eb4 Mon Sep 17 00:00:00 2001 From: deepak1556 Date: Tue, 19 May 2015 14:06:19 +0530 Subject: [PATCH] check if window is html or forced fullscreen --- atom/browser/api/atom_api_web_contents.cc | 2 ++ atom/browser/lib/guest-view-manager.coffee | 2 ++ atom/browser/native_window.cc | 18 ++++++++++++++++-- atom/browser/native_window.h | 7 +++++-- .../lib/web-view/guest-view-internal.coffee | 2 ++ docs/api/web-view-tag.md | 8 ++++++++ 6 files changed, 35 insertions(+), 4 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index b0a6217988bc..f72a4c4d1683 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -221,6 +221,7 @@ void WebContents::EnterFullscreenModeForTab(content::WebContents* source, if (window) { window->SetHtmlApiFullscreen(true); source->GetRenderViewHost()->WasResized(); + Emit("enter-html-full-screen"); } } @@ -229,6 +230,7 @@ void WebContents::ExitFullscreenModeForTab(content::WebContents* source) { if (window) { window->SetHtmlApiFullscreen(false); source->GetRenderViewHost()->WasResized(); + Emit("leave-html-full-screen"); } } diff --git a/atom/browser/lib/guest-view-manager.coffee b/atom/browser/lib/guest-view-manager.coffee index 9403466f27a7..f0d2a89318d6 100644 --- a/atom/browser/lib/guest-view-manager.coffee +++ b/atom/browser/lib/guest-view-manager.coffee @@ -20,6 +20,8 @@ supportedWebViewEvents = [ 'destroyed' 'page-title-set' 'page-favicon-updated' + 'enter-html-full-screen' + 'leave-html-full-screen' ] nextInstanceId = 0 diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 7d00483b20cc..79ea407f3da4 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -99,7 +99,7 @@ NativeWindow::NativeWindow(content::WebContents* web_contents, is_closed_(false), node_integration_(true), has_dialog_attached_(false), - fullscreen_(false), + html_fullscreen_(false), zoom_factor_(1.0), weak_factory_(this), inspectable_web_contents_( @@ -806,8 +806,22 @@ void NativeWindow::ScheduleUnresponsiveEvent(int ms) { } void NativeWindow::SetHtmlApiFullscreen(bool enter_fullscreen) { + // Window is already in fullscreen mode, save the state. + if (enter_fullscreen && IsFullscreen()) { + forced_fullscreen_ = true; + html_fullscreen_ = true; + return; + } + + // Exit html fullscreen state but not window's fullscreen mode. + if (!enter_fullscreen && forced_fullscreen_) { + html_fullscreen_ = false; + return; + } + SetFullScreen(enter_fullscreen); - fullscreen_ = enter_fullscreen; + html_fullscreen_ = enter_fullscreen; + forced_fullscreen_ = false; } void NativeWindow::NotifyWindowUnresponsive() { diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index ae53fba76f1e..f23c27ebf770 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -220,7 +220,7 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, bool has_frame() const { return has_frame_; } - bool IsHtmlApiFullscreen() const { return fullscreen_; } + bool IsHtmlApiFullscreen() const { return html_fullscreen_; } void set_has_dialog_attached(bool has_dialog_attached) { has_dialog_attached_ = has_dialog_attached; @@ -349,7 +349,10 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, bool has_dialog_attached_; // Whether window is fullscreened by HTML5 api. - bool fullscreen_; + bool html_fullscreen_; + + // Whether window is fullscreened by window api. + bool forced_fullscreen_; // Closure that would be called when window is unresponsive when closing, // it should be cancelled when we can prove that the window is responsive. diff --git a/atom/renderer/lib/web-view/guest-view-internal.coffee b/atom/renderer/lib/web-view/guest-view-internal.coffee index fb1b40d27e1f..e856896ae61d 100644 --- a/atom/renderer/lib/web-view/guest-view-internal.coffee +++ b/atom/renderer/lib/web-view/guest-view-internal.coffee @@ -22,6 +22,8 @@ WEB_VIEW_EVENTS = 'destroyed': [] 'page-title-set': ['title', 'explicitSet'] 'page-favicon-updated': ['favicons'] + 'enter-html-full-screen': [] + 'leave-html-full-screen': [] dispatchEvent = (webView, event, args...) -> throw new Error("Unkown event #{event}") unless WEB_VIEW_EVENTS[event]? diff --git a/docs/api/web-view-tag.md b/docs/api/web-view-tag.md index 5536920c5b7b..f607f0d225ba 100644 --- a/docs/api/web-view-tag.md +++ b/docs/api/web-view-tag.md @@ -361,6 +361,14 @@ url. Fired when page receives favicon urls. +### enter-html-full-screen + +Fired when page enters fullscreen triggered by html api. + +### leave-html-full-screen + +Fired when page leaves fullscreen triggered by html api. + ### console-message * `level` Integer