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

Unified Diff: ash/shell.cc

Issue 9320076: Aura: Switch window mode when screen resolution changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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 | « ash/shell.h ('k') | ash/shell_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/shell.cc
diff --git a/ash/shell.cc b/ash/shell.cc
index 1b065669974cd22ada29c2081cfeb05916ee7a6b..59582e9e199c76cc11610ad79ab0a9465706a938 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -57,6 +57,7 @@ namespace ash {
namespace {
+using aura::Window;
using views::Widget;
// Screen width at or below which we automatically start in compact window mode,
@@ -186,9 +187,11 @@ Shell::Shell(ShellDelegate* delegate)
status_widget_(NULL) {
aura::RootWindow::GetInstance()->SetEventFilter(
new internal::RootWindowEventFilter);
+ aura::RootWindow::GetInstance()->AddRootWindowObserver(this);
}
Shell::~Shell() {
+ aura::RootWindow::GetInstance()->RemoveRootWindowObserver(this);
RemoveRootWindowEventFilter(input_method_filter_.get());
RemoveRootWindowEventFilter(window_modality_controller_.get());
RemoveRootWindowEventFilter(accelerator_filter_.get());
@@ -252,6 +255,21 @@ void Shell::DeleteInstance() {
instance_ = NULL;
}
+void Shell::OnRootWindowResized(const gfx::Size& new_size) {
+ // Developers often run the Aura shell in small windows on their desktop.
+ // Don't switch window modes for them.
+ if (!aura::RootWindow::use_fullscreen_host_window())
+ return;
+
+ // If we're running on a device, a resize event means the user plugged in or
+ // unplugged an external monitor. Change window mode to be appropriate for
+ // the new screen resolution.
+ gfx::Size monitor_size = gfx::Screen::GetPrimaryMonitorSize();
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ WindowMode new_mode = ComputeWindowMode(monitor_size, command_line);
+ ChangeWindowMode(new_mode);
+}
+
void Shell::Init() {
// InputMethodEventFilter must be added first since it has the highest
// priority.
@@ -401,8 +419,15 @@ void Shell::ChangeWindowMode(WindowMode mode) {
SetupCompactWindowMode();
else
SetupNonCompactWindowMode();
- // Force a layout.
- aura::RootWindow::GetInstance()->layout_manager()->OnWindowResized();
+ // Force a layout of all containers.
+ aura::RootWindow* root_window = aura::RootWindow::GetInstance();
+ root_window->layout_manager()->OnWindowResized();
+ for (Window::Windows::const_iterator it = root_window->children().begin();
sky 2012/02/03 21:47:42 Don't the children handle this themselves?
James Cook 2012/02/03 22:02:44 They do, but too early for it to be useful for me.
+ it != root_window->children().end();
+ ++it) {
+ if ((*it)->layout_manager())
+ (*it)->layout_manager()->OnWindowResized();
+ }
}
bool Shell::IsScreenLocked() const {
« no previous file with comments | « ash/shell.h ('k') | ash/shell_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698