diff options
author | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-27 19:13:29 +0000 |
---|---|---|
committer | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-27 19:13:29 +0000 |
commit | 05da7c4dbe3d07def6d4e75b53d300091d5061be (patch) | |
tree | 50c53b0521f5964ef4a091f6979b8e946875ad80 /ash | |
parent | 4181d4e0e3ffe5159104984d83d78c3f11839efc (diff) | |
download | chromium_src-05da7c4dbe3d07def6d4e75b53d300091d5061be.zip chromium_src-05da7c4dbe3d07def6d4e75b53d300091d5061be.tar.gz chromium_src-05da7c4dbe3d07def6d4e75b53d300091d5061be.tar.bz2 |
Ignore windows in overview for computing shelf visibility.
BUG=276506
TEST=WindowSelectorTest.OverviewUndimsShelf
TEST=With overview enabled, maximize a window and enter overview mode. Shelf background should become transparent during overview and return when exiting overview.
R=jamescook@chromium.org
Review URL: https://codereview.chromium.org/24786004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225753 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/wm/overview/scoped_transform_overview_window.cc | 4 | ||||
-rw-r--r-- | ash/wm/overview/scoped_transform_overview_window.h | 3 | ||||
-rw-r--r-- | ash/wm/overview/window_selector.cc | 17 | ||||
-rw-r--r-- | ash/wm/overview/window_selector_unittest.cc | 17 |
4 files changed, 41 insertions, 0 deletions
diff --git a/ash/wm/overview/scoped_transform_overview_window.cc b/ash/wm/overview/scoped_transform_overview_window.cc index 89b7b9a..1d485ef 100644 --- a/ash/wm/overview/scoped_transform_overview_window.cc +++ b/ash/wm/overview/scoped_transform_overview_window.cc @@ -5,6 +5,7 @@ #include "ash/wm/overview/scoped_transform_overview_window.h" #include "ash/shell.h" +#include "ash/wm/window_state.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/client/screen_position_client.h" #include "ui/aura/root_window.h" @@ -160,6 +161,7 @@ ScopedTransformOverviewWindow::ScopedTransformOverviewWindow( layer_(NULL), minimized_(window->GetProperty(aura::client::kShowStateKey) == ui::SHOW_STATE_MINIMIZED), + ignored_by_shelf_(ash::wm::GetWindowState(window)->ignored_by_shelf()), overview_started_(false), original_transform_(window->layer()->GetTargetTransform()) { } @@ -187,6 +189,7 @@ ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() { window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED); } + ash::wm::GetWindowState(window_)->set_ignored_by_shelf(ignored_by_shelf_); } else if (window_copy_) { // If this class still owns a copy of the window, clean up the copy. This // will be the case if the window was destroyed. @@ -288,6 +291,7 @@ void ScopedTransformOverviewWindow:: } void ScopedTransformOverviewWindow::OnOverviewStarted() { + ash::wm::GetWindowState(window_)->set_ignored_by_shelf(true); RestoreWindow(); } diff --git a/ash/wm/overview/scoped_transform_overview_window.h b/ash/wm/overview/scoped_transform_overview_window.h index d6099d3..5873275 100644 --- a/ash/wm/overview/scoped_transform_overview_window.h +++ b/ash/wm/overview/scoped_transform_overview_window.h @@ -88,6 +88,9 @@ class ScopedTransformOverviewWindow { // was not selected. bool minimized_; + // Tracks if this window was ignored by the shelf. + bool ignored_by_shelf_; + // True if the window has been transformed for overview mode. bool overview_started_; diff --git a/ash/wm/overview/window_selector.cc b/ash/wm/overview/window_selector.cc index ebbebec..4dfdc82 100644 --- a/ash/wm/overview/window_selector.cc +++ b/ash/wm/overview/window_selector.cc @@ -6,6 +6,7 @@ #include <algorithm> +#include "ash/root_window_controller.h" #include "ash/shell.h" #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_overview.h" @@ -93,6 +94,17 @@ void WindowSelectorEventFilter::OnKeyEvent(ui::KeyEvent* event) { } } +// Triggers a shelf visibility update on all root window controllers. +void UpdateShelfVisibility() { + Shell::RootWindowControllerList root_window_controllers = + Shell::GetInstance()->GetAllRootWindowControllers(); + for (Shell::RootWindowControllerList::iterator iter = + root_window_controllers.begin(); + iter != root_window_controllers.end(); ++iter) { + (*iter)->UpdateShelfVisibility(); + } +} + } // namespace WindowSelector::WindowSelector(const WindowList& windows, @@ -170,6 +182,10 @@ WindowSelector::~WindowSelector() { kSwitchableWindowContainerIds[i])->RemoveObserver(this); } } + window_overview_.reset(); + // Clearing the window list resets the ignored_by_shelf flag on the windows. + windows_.clear(); + UpdateShelfVisibility(); } void WindowSelector::Step(WindowSelector::Direction direction) { @@ -294,6 +310,7 @@ void WindowSelector::StartOverview() { mode_ == CYCLE ? windows_[selected_window_]->GetRootWindow() : NULL)); if (mode_ == CYCLE) window_overview_->SetSelection(selected_window_); + UpdateShelfVisibility(); } void WindowSelector::RemoveFocusAndSetRestoreWindow() { diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc index 07cc565..d464e84 100644 --- a/ash/wm/overview/window_selector_unittest.cc +++ b/ash/wm/overview/window_selector_unittest.cc @@ -5,6 +5,7 @@ #include "ash/launcher/launcher.h" #include "ash/root_window_controller.h" #include "ash/screen_ash.h" +#include "ash/shelf/shelf_widget.h" #include "ash/shell.h" #include "ash/test/ash_test_base.h" #include "ash/test/launcher_test_api.h" @@ -14,6 +15,7 @@ #include "ash/wm/mru_window_tracker.h" #include "ash/wm/overview/window_selector.h" #include "ash/wm/overview/window_selector_controller.h" +#include "ash/wm/window_state.h" #include "ash/wm/window_util.h" #include "base/basictypes.h" #include "base/compiler_specific.h" @@ -182,6 +184,21 @@ TEST_F(WindowSelectorTest, Basic) { EXPECT_FALSE(GetCursorClient(root_window)->IsCursorLocked()); } +// Tests that the shelf dimming state is removed while in overview and restored +// on exiting overview. +TEST_F(WindowSelectorTest, OverviewUndimsShelf) { + gfx::Rect bounds(0, 0, 400, 400); + scoped_ptr<aura::Window> window1(CreateWindow(bounds)); + wm::WindowState* window_state = wm::GetWindowState(window1.get()); + window_state->Maximize(); + ash::ShelfWidget* shelf = Shell::GetPrimaryRootWindowController()->shelf(); + EXPECT_TRUE(shelf->GetDimsShelf()); + ToggleOverview(); + EXPECT_FALSE(shelf->GetDimsShelf()); + ToggleOverview(); + EXPECT_TRUE(shelf->GetDimsShelf()); +} + // Tests entering overview mode with three windows and cycling through them. TEST_F(WindowSelectorTest, BasicCycle) { gfx::Rect bounds(0, 0, 400, 400); |