summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-27 19:13:29 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-27 19:13:29 +0000
commit05da7c4dbe3d07def6d4e75b53d300091d5061be (patch)
tree50c53b0521f5964ef4a091f6979b8e946875ad80 /ash
parent4181d4e0e3ffe5159104984d83d78c3f11839efc (diff)
downloadchromium_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.cc4
-rw-r--r--ash/wm/overview/scoped_transform_overview_window.h3
-rw-r--r--ash/wm/overview/window_selector.cc17
-rw-r--r--ash/wm/overview/window_selector_unittest.cc17
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);