Chromium Code Reviews| 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..fbb5961ff62285dd924f51b70fd7cff06a73a8ca 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, |
|
Dmitry Titov
2013/03/14 01:10:25
The naming suggestion:
FULLSCREEN_ON
FULLSCREEN_O
jianli
2013/03/14 19:11:47
Done.
|
| + FULLSCREEN_ENTERED, |
| + FULLSCREEN_EXITED |
| +}; |
| + |
| 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->fullscreen_controller()->IsFullscreenForBrowser() ? |
| + FULLSCREEN_ENTERED : FULLSCREEN_EXITED; |
| + } |
| + |
| + return chrome_fullscreen_state_ == FULLSCREEN_ENTERED; |
| } |
| 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_ENTERED : FULLSCREEN_EXITED; |
| CheckFullScreenMode(); |
| } |