Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1123)

Unified Diff: chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm

Issue 12430013: Fix panel showing logic when Chrome enters the fullscreen mode (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix per feedback Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/panels/panel_cocoa.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm
diff --git a/chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm b/chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm
index 7cf4fb0e8870d6dae1cb6550b8749829666ff8e4..eda4ad08baf5f9375c281791bdd1d730e23250c8 100644
--- a/chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm
+++ b/chrome/browser/ui/cocoa/panels/display_settings_provider_cocoa.mm
@@ -3,17 +3,26 @@
// found in the LICENSE file.
#include "base/mac/mac_util.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/cocoa/last_active_browser_cocoa.h"
+#include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
#include "chrome/browser/ui/panels/display_settings_provider.h"
-#include "ui/base/work_area_watcher_observer.h"
#import "chrome/browser/app_controller_mac.h"
#include "chrome/common/chrome_notification_types.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/notification_service.h"
#include "content/public/browser/notification_source.h"
+#include "ui/base/work_area_watcher_observer.h"
namespace {
+enum ChromeFullScreenState {
+ FULLSCREEN_UNKNOWN,
+ FULLSCREEN_ON,
+ FULLSCREEN_OFF
+};
+
class DisplaySettingsProviderCocoa : public DisplaySettingsProvider,
public ui::WorkAreaWatcherObserver,
public content::NotificationObserver {
@@ -24,7 +33,7 @@ class DisplaySettingsProviderCocoa : public DisplaySettingsProvider,
protected:
// Overridden from DisplaySettingsProvider:
virtual bool NeedsPeriodicFullScreenCheck() const OVERRIDE;
- virtual bool IsFullScreen() const OVERRIDE;
+ virtual bool IsFullScreen() OVERRIDE;
// Overridden from ui::WorkAreaWatcherObserver:
virtual void WorkAreaChanged() OVERRIDE;
@@ -36,7 +45,7 @@ class DisplaySettingsProviderCocoa : public DisplaySettingsProvider,
private:
content::NotificationRegistrar registrar_;
- bool is_chrome_fullscreen_;
+ ChromeFullScreenState chrome_fullscreen_state_;
DISALLOW_COPY_AND_ASSIGN(DisplaySettingsProviderCocoa);
};
@@ -48,7 +57,7 @@ DisplaySettingsProviderCocoa::DisplaySettingsProviderCocoa()
// This will get automatically fixed when DisplaySettingsProvider is changed
// to be initialized before any chrome window is created with planning
// refactor effort to move it out of panel scope.
- : is_chrome_fullscreen_(false) {
+ : chrome_fullscreen_state_(FULLSCREEN_UNKNOWN) {
AppController* appController = static_cast<AppController*>([NSApp delegate]);
[appController addObserverForWorkAreaChange:this];
@@ -73,11 +82,20 @@ bool DisplaySettingsProviderCocoa::NeedsPeriodicFullScreenCheck() const {
return !base::mac::IsOSLionOrLater();
}
-bool DisplaySettingsProviderCocoa::IsFullScreen() const {
+bool DisplaySettingsProviderCocoa::IsFullScreen() {
// For Lion and later, we only need to check if chrome enters fullscreen mode
// (see detailed reason above in NeedsPeriodicFullScreenCheck).
- return base::mac::IsOSLionOrLater() ? is_chrome_fullscreen_ :
- DisplaySettingsProvider::IsFullScreen();
+ if (!base::mac::IsOSLionOrLater())
+ return DisplaySettingsProvider::IsFullScreen();
+
+ if (chrome_fullscreen_state_ == FULLSCREEN_UNKNOWN) {
+ Browser* browser = chrome::GetLastActiveBrowser();
+ chrome_fullscreen_state_ =
+ browser && browser->fullscreen_controller()->IsFullscreenForBrowser() ?
+ FULLSCREEN_ON : FULLSCREEN_OFF;
+ }
+
+ return chrome_fullscreen_state_ == FULLSCREEN_ON;
}
void DisplaySettingsProviderCocoa::WorkAreaChanged() {
@@ -89,7 +107,8 @@ void DisplaySettingsProviderCocoa::Observe(
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK_EQ(chrome::NOTIFICATION_FULLSCREEN_CHANGED, type);
- is_chrome_fullscreen_ = *(content::Details<bool>(details)).ptr();
+ chrome_fullscreen_state_ = *(content::Details<bool>(details)).ptr() ?
+ FULLSCREEN_ON : FULLSCREEN_OFF;
CheckFullScreenMode();
}
« no previous file with comments | « no previous file | chrome/browser/ui/cocoa/panels/panel_cocoa.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698