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

Unified Diff: chrome/browser/ui/panels/display_settings_provider.cc

Issue 10051020: Move full-screen detection logic from PanelManager to DisplaySettingsProvider. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix linux asan Created 8 years, 8 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
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..b2fed3f6228ead887c82e15ce5c9eae7913e514a 100644
--- a/chrome/browser/ui/panels/display_settings_provider.cc
+++ b/chrome/browser/ui/panels/display_settings_provider.cc
@@ -5,16 +5,61 @@
#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::AddDisplayAreaObserver(
+ DisplayAreaObserver* observer) {
+ display_area_observers_.AddObserver(observer);
+}
+
+void DisplaySettingsProvider::RemoveDisplayAreaObserver(
+ DisplayAreaObserver* observer) {
+ display_area_observers_.RemoveObserver(observer);
+}
+
+void DisplaySettingsProvider::AddDesktopBarObserver(
+ DesktopBarObserver* observer) {
+ desktop_bar_observers_.AddObserver(observer);
+}
+
+void DisplaySettingsProvider::RemoveDesktopBarObserver(
+ DesktopBarObserver* observer) {
+ desktop_bar_observers_.RemoveObserver(observer);
+}
+
+void DisplaySettingsProvider::AddFullScreenObserver(
+ FullScreenObserver* observer) {
+ full_screen_observers_.AddObserver(observer);
+
+ if (full_screen_observers_.size() == 1) {
+ full_screen_mode_timer_.Start(FROM_HERE,
+ base::TimeDelta::FromMilliseconds(kFullScreenModeCheckIntervalMs),
+ this, &DisplaySettingsProvider::CheckFullScreenMode);
+ }
+}
+
+void DisplaySettingsProvider::RemoveFullScreenObserver(
+ FullScreenObserver* observer) {
+ full_screen_observers_.RemoveObserver(observer);
+
+ if (full_screen_observers_.size() == 0)
+ full_screen_mode_timer_.Stop();
+}
+
gfx::Rect DisplaySettingsProvider::GetDisplayArea() {
// Do the first-time initialization if not yet.
if (adjusted_work_area_.IsEmpty())
@@ -47,8 +92,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 +135,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() {
« no previous file with comments | « chrome/browser/ui/panels/display_settings_provider.h ('k') | chrome/browser/ui/panels/display_settings_provider_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698