| Index: chrome/browser/ui/panels/display_settings_provider.cc
|
| diff --git a/chrome/browser/ui/panels/display_settings_provider.cc b/chrome/browser/ui/panels/display_settings_provider.cc
|
| index af3ee889832a1b069566ab289c3ece219b27f37f..093a1a286c82248d8e72d7e41baca254ba33d5ce 100644
|
| --- a/chrome/browser/ui/panels/display_settings_provider.cc
|
| +++ b/chrome/browser/ui/panels/display_settings_provider.cc
|
| @@ -5,16 +5,69 @@
|
| #include "chrome/browser/ui/panels/display_settings_provider.h"
|
|
|
| #include "base/logging.h"
|
| +#include "chrome/browser/fullscreen.h"
|
| #include "ui/gfx/screen.h"
|
|
|
| +namespace {
|
| +// The polling interval to check any display settings change, like full-screen
|
| +// mode changes.
|
| +const int kFullScreenModeCheckIntervalMs = 1000;
|
| +} // namespace
|
| +
|
| DisplaySettingsProvider::DisplaySettingsProvider()
|
| - : display_area_observer_(NULL),
|
| - desktop_bar_observer_(NULL) {
|
| + : is_full_screen_(false) {
|
| }
|
|
|
| DisplaySettingsProvider::~DisplaySettingsProvider() {
|
| }
|
|
|
| +void DisplaySettingsProvider::AddObserver(Observer* observer) {
|
| + switch (observer->type()) {
|
| + case DISPLAY_AREA_OBSERVER:
|
| + display_area_observers_.AddObserver(
|
| + static_cast<DisplayAreaObserver*>(observer));
|
| + break;
|
| + case DESKTOP_BAR_OBSERVER:
|
| + desktop_bar_observers_.AddObserver(
|
| + static_cast<DesktopBarObserver*>(observer));
|
| + break;
|
| + case FULL_SCREEN_OBSERVER:
|
| + full_screen_observers_.AddObserver(
|
| + static_cast<FullScreenObserver*>(observer));
|
| + if (full_screen_observers_.size() == 1) {
|
| + full_screen_mode_timer_.Start(FROM_HERE,
|
| + base::TimeDelta::FromMilliseconds(kFullScreenModeCheckIntervalMs),
|
| + this, &DisplaySettingsProvider::CheckFullScreenMode);
|
| + }
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| +}
|
| +
|
| +void DisplaySettingsProvider::RemoveObserver(Observer* observer) {
|
| + switch (observer->type()) {
|
| + case DISPLAY_AREA_OBSERVER:
|
| + display_area_observers_.RemoveObserver(
|
| + static_cast<DisplayAreaObserver*>(observer));
|
| + break;
|
| + case DESKTOP_BAR_OBSERVER:
|
| + desktop_bar_observers_.RemoveObserver(
|
| + static_cast<DesktopBarObserver*>(observer));
|
| + break;
|
| + case FULL_SCREEN_OBSERVER:
|
| + full_screen_observers_.RemoveObserver(
|
| + static_cast<FullScreenObserver*>(observer));
|
| + if (full_screen_observers_.size() == 0)
|
| + full_screen_mode_timer_.Stop();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| +}
|
| +
|
| gfx::Rect DisplaySettingsProvider::GetDisplayArea() {
|
| // Do the first-time initialization if not yet.
|
| if (adjusted_work_area_.IsEmpty())
|
| @@ -47,8 +100,11 @@ void DisplaySettingsProvider::OnAutoHidingDesktopBarChanged() {
|
| gfx::Rect old_adjusted_work_area = adjusted_work_area_;
|
| AdjustWorkAreaForAutoHidingDesktopBars();
|
|
|
| - if (old_adjusted_work_area != adjusted_work_area_ && display_area_observer_)
|
| - display_area_observer_->OnDisplayAreaChanged(adjusted_work_area_);
|
| + if (old_adjusted_work_area != adjusted_work_area_) {
|
| + FOR_EACH_OBSERVER(DisplayAreaObserver,
|
| + display_area_observers_,
|
| + OnDisplayAreaChanged(adjusted_work_area_));
|
| + }
|
| }
|
|
|
| bool DisplaySettingsProvider::IsAutoHidingDesktopBarEnabled(
|
| @@ -87,6 +143,17 @@ void DisplaySettingsProvider::AdjustWorkAreaForAutoHidingDesktopBars() {
|
| }
|
| }
|
|
|
| +void DisplaySettingsProvider::CheckFullScreenMode() {
|
| + bool is_full_screen = IsFullScreenMode();
|
| + if (is_full_screen == is_full_screen_)
|
| + return;
|
| + is_full_screen_ = is_full_screen;
|
| +
|
| + FOR_EACH_OBSERVER(FullScreenObserver,
|
| + full_screen_observers_,
|
| + OnFullScreenModeChanged(is_full_screen_));
|
| +}
|
| +
|
| #if defined(USE_AURA)
|
| // static
|
| DisplaySettingsProvider* DisplaySettingsProvider::Create() {
|
|
|