| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/common/wm/workspace/workspace_layout_manager.h" | 5 #include "ash/common/wm/workspace/workspace_layout_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "ash/aura/wm_window_aura.h" | 10 #include "ash/aura/wm_window_aura.h" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 #include "ui/views/widget/widget.h" | 39 #include "ui/views/widget/widget.h" |
| 40 #include "ui/views/widget/widget_delegate.h" | 40 #include "ui/views/widget/widget_delegate.h" |
| 41 #include "ui/wm/core/window_util.h" | 41 #include "ui/wm/core/window_util.h" |
| 42 | 42 |
| 43 namespace ash { | 43 namespace ash { |
| 44 namespace { | 44 namespace { |
| 45 | 45 |
| 46 class MaximizeDelegateView : public views::WidgetDelegateView { | 46 class MaximizeDelegateView : public views::WidgetDelegateView { |
| 47 public: | 47 public: |
| 48 explicit MaximizeDelegateView(const gfx::Rect& initial_bounds) | 48 explicit MaximizeDelegateView(const gfx::Rect& initial_bounds) |
| 49 : initial_bounds_(initial_bounds) { | 49 : initial_bounds_(initial_bounds) {} |
| 50 } | |
| 51 ~MaximizeDelegateView() override {} | 50 ~MaximizeDelegateView() override {} |
| 52 | 51 |
| 53 bool GetSavedWindowPlacement(const views::Widget* widget, | 52 bool GetSavedWindowPlacement(const views::Widget* widget, |
| 54 gfx::Rect* bounds, | 53 gfx::Rect* bounds, |
| 55 ui::WindowShowState* show_state) const override { | 54 ui::WindowShowState* show_state) const override { |
| 56 *bounds = initial_bounds_; | 55 *bounds = initial_bounds_; |
| 57 *show_state = ui::SHOW_STATE_MAXIMIZED; | 56 *show_state = ui::SHOW_STATE_MAXIMIZED; |
| 58 return true; | 57 return true; |
| 59 } | 58 } |
| 60 | 59 |
| 61 private: | 60 private: |
| 62 const gfx::Rect initial_bounds_; | 61 const gfx::Rect initial_bounds_; |
| 63 | 62 |
| 64 DISALLOW_COPY_AND_ASSIGN(MaximizeDelegateView); | 63 DISALLOW_COPY_AND_ASSIGN(MaximizeDelegateView); |
| 65 }; | 64 }; |
| 66 | 65 |
| 67 class TestShellObserver : public ShellObserver { | 66 class TestShellObserver : public ShellObserver { |
| 68 public: | 67 public: |
| 69 TestShellObserver() : call_count_(0), | 68 TestShellObserver() : call_count_(0), is_fullscreen_(false) { |
| 70 is_fullscreen_(false) { | |
| 71 WmShell::Get()->AddShellObserver(this); | 69 WmShell::Get()->AddShellObserver(this); |
| 72 } | 70 } |
| 73 | 71 |
| 74 ~TestShellObserver() override { WmShell::Get()->RemoveShellObserver(this); } | 72 ~TestShellObserver() override { WmShell::Get()->RemoveShellObserver(this); } |
| 75 | 73 |
| 76 void OnFullscreenStateChanged(bool is_fullscreen, | 74 void OnFullscreenStateChanged(bool is_fullscreen, |
| 77 WmWindow* root_window) override { | 75 WmWindow* root_window) override { |
| 78 call_count_++; | 76 call_count_++; |
| 79 is_fullscreen_ = is_fullscreen; | 77 is_fullscreen_ = is_fullscreen; |
| 80 } | 78 } |
| 81 | 79 |
| 82 int call_count() const { | 80 int call_count() const { return call_count_; } |
| 83 return call_count_; | |
| 84 } | |
| 85 | 81 |
| 86 bool is_fullscreen() const { | 82 bool is_fullscreen() const { return is_fullscreen_; } |
| 87 return is_fullscreen_; | |
| 88 } | |
| 89 | 83 |
| 90 private: | 84 private: |
| 91 int call_count_; | 85 int call_count_; |
| 92 bool is_fullscreen_; | 86 bool is_fullscreen_; |
| 93 | 87 |
| 94 DISALLOW_COPY_AND_ASSIGN(TestShellObserver); | 88 DISALLOW_COPY_AND_ASSIGN(TestShellObserver); |
| 95 }; | 89 }; |
| 96 | 90 |
| 97 } // namespace | 91 } // namespace |
| 98 | 92 |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 264 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 271 | 265 |
| 272 std::unique_ptr<aura::Window> window( | 266 std::unique_ptr<aura::Window> window( |
| 273 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); | 267 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); |
| 274 EXPECT_EQ(root_windows[0], window->GetRootWindow()); | 268 EXPECT_EQ(root_windows[0], window->GetRootWindow()); |
| 275 | 269 |
| 276 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 270 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
| 277 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40)); | 271 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40)); |
| 278 // Maximize the window in 2nd display as the restore bounds | 272 // Maximize the window in 2nd display as the restore bounds |
| 279 // is inside 2nd display. | 273 // is inside 2nd display. |
| 280 window->SetProperty(aura::client::kShowStateKey, | 274 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
| 281 ui::SHOW_STATE_FULLSCREEN); | |
| 282 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 275 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
| 283 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); | 276 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); |
| 284 | 277 |
| 285 window_state->Restore(); | 278 window_state->Restore(); |
| 286 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 279 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
| 287 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString()); | 280 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString()); |
| 288 | 281 |
| 289 // If the restore bounds intersects with the current display, | 282 // If the restore bounds intersects with the current display, |
| 290 // don't move. | 283 // don't move. |
| 291 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40)); | 284 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40)); |
| 292 window->SetProperty(aura::client::kShowStateKey, | 285 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
| 293 ui::SHOW_STATE_FULLSCREEN); | |
| 294 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 286 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
| 295 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); | 287 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); |
| 296 | 288 |
| 297 window_state->Restore(); | 289 window_state->Restore(); |
| 298 EXPECT_EQ(root_windows[1], window->GetRootWindow()); | 290 EXPECT_EQ(root_windows[1], window->GetRootWindow()); |
| 299 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString()); | 291 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString()); |
| 300 } | 292 } |
| 301 | 293 |
| 302 // WindowObserver implementation used by DontClobberRestoreBoundsWindowObserver. | 294 // WindowObserver implementation used by DontClobberRestoreBoundsWindowObserver. |
| 303 // This code mirrors what BrowserFrameAsh does. In particular when this code | 295 // This code mirrors what BrowserFrameAsh does. In particular when this code |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 343 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
| 352 window_state->Activate(); | 344 window_state->Activate(); |
| 353 | 345 |
| 354 std::unique_ptr<aura::Window> window2( | 346 std::unique_ptr<aura::Window> window2( |
| 355 CreateTestWindowInShellWithBounds(gfx::Rect(12, 20, 30, 40))); | 347 CreateTestWindowInShellWithBounds(gfx::Rect(12, 20, 30, 40))); |
| 356 ::wm::AddTransientChild(window.get(), window2.get()); | 348 ::wm::AddTransientChild(window.get(), window2.get()); |
| 357 window2->Show(); | 349 window2->Show(); |
| 358 | 350 |
| 359 window_observer.set_window(window2.get()); | 351 window_observer.set_window(window2.get()); |
| 360 window_state->Maximize(); | 352 window_state->Maximize(); |
| 361 EXPECT_EQ("10,20 30x40", | 353 EXPECT_EQ("10,20 30x40", window_state->GetRestoreBoundsInScreen().ToString()); |
| 362 window_state->GetRestoreBoundsInScreen().ToString()); | |
| 363 window->RemoveObserver(&window_observer); | 354 window->RemoveObserver(&window_observer); |
| 364 } | 355 } |
| 365 | 356 |
| 366 // Verifies when a window is maximized all descendant windows have a size. | 357 // Verifies when a window is maximized all descendant windows have a size. |
| 367 TEST_F(WorkspaceLayoutManagerTest, ChildBoundsResetOnMaximize) { | 358 TEST_F(WorkspaceLayoutManagerTest, ChildBoundsResetOnMaximize) { |
| 368 std::unique_ptr<aura::Window> window( | 359 std::unique_ptr<aura::Window> window( |
| 369 CreateTestWindowInShellWithBounds(gfx::Rect(10, 20, 30, 40))); | 360 CreateTestWindowInShellWithBounds(gfx::Rect(10, 20, 30, 40))); |
| 370 window->Show(); | 361 window->Show(); |
| 371 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 362 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
| 372 window_state->Activate(); | 363 window_state->Activate(); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 bounds.Intersect(root_window_bounds); | 449 bounds.Intersect(root_window_bounds); |
| 459 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29); | 450 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29); |
| 460 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29); | 451 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29); |
| 461 } | 452 } |
| 462 | 453 |
| 463 // Verifies the size of a window is enforced to be smaller than the work area. | 454 // Verifies the size of a window is enforced to be smaller than the work area. |
| 464 TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) { | 455 TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) { |
| 465 // Normal window bounds shouldn't be changed. | 456 // Normal window bounds shouldn't be changed. |
| 466 gfx::Size work_area( | 457 gfx::Size work_area( |
| 467 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size()); | 458 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size()); |
| 468 const gfx::Rect window_bounds( | 459 const gfx::Rect window_bounds(100, 101, work_area.width() + 1, |
| 469 100, 101, work_area.width() + 1, work_area.height() + 2); | 460 work_area.height() + 2); |
| 470 std::unique_ptr<aura::Window> window( | 461 std::unique_ptr<aura::Window> window( |
| 471 CreateTestWindowInShellWithBounds(window_bounds)); | 462 CreateTestWindowInShellWithBounds(window_bounds)); |
| 472 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), | 463 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), |
| 473 window->bounds().ToString()); | 464 window->bounds().ToString()); |
| 474 | 465 |
| 475 // Directly setting the bounds triggers a slightly different code path. Verify | 466 // Directly setting the bounds triggers a slightly different code path. Verify |
| 476 // that too. | 467 // that too. |
| 477 window->SetBounds(window_bounds); | 468 window->SetBounds(window_bounds); |
| 478 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), | 469 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), |
| 479 window->bounds().ToString()); | 470 window->bounds().ToString()); |
| 480 } | 471 } |
| 481 | 472 |
| 482 TEST_F(WorkspaceLayoutManagerTest, NotifyFullscreenChanges) { | 473 TEST_F(WorkspaceLayoutManagerTest, NotifyFullscreenChanges) { |
| 483 TestShellObserver observer; | 474 TestShellObserver observer; |
| 484 std::unique_ptr<aura::Window> window1( | 475 std::unique_ptr<aura::Window> window1( |
| 485 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); | 476 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); |
| 486 std::unique_ptr<aura::Window> window2( | 477 std::unique_ptr<aura::Window> window2( |
| 487 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); | 478 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); |
| 488 wm::WindowState* window_state1 = wm::GetWindowState(window1.get()); | 479 wm::WindowState* window_state1 = wm::GetWindowState(window1.get()); |
| 489 wm::WindowState* window_state2 = wm::GetWindowState(window2.get()); | 480 wm::WindowState* window_state2 = wm::GetWindowState(window2.get()); |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 906 // Return the order of windows (top most first) as they are in the default | 897 // Return the order of windows (top most first) as they are in the default |
| 907 // container. If the window is visible it will be a big letter, otherwise a | 898 // container. If the window is visible it will be a big letter, otherwise a |
| 908 // small one. The backdrop will be an X and unknown windows will be shown as | 899 // small one. The backdrop will be an X and unknown windows will be shown as |
| 909 // '!'. | 900 // '!'. |
| 910 std::string GetWindowOrderAsString(aura::Window* backdrop, | 901 std::string GetWindowOrderAsString(aura::Window* backdrop, |
| 911 aura::Window* wa, | 902 aura::Window* wa, |
| 912 aura::Window* wb, | 903 aura::Window* wb, |
| 913 aura::Window* wc) { | 904 aura::Window* wc) { |
| 914 std::string result; | 905 std::string result; |
| 915 for (int i = static_cast<int>(default_container()->children().size()) - 1; | 906 for (int i = static_cast<int>(default_container()->children().size()) - 1; |
| 916 i >= 0; | 907 i >= 0; --i) { |
| 917 --i) { | |
| 918 if (!result.empty()) | 908 if (!result.empty()) |
| 919 result += ","; | 909 result += ","; |
| 920 if (default_container()->children()[i] == wa) | 910 if (default_container()->children()[i] == wa) |
| 921 result += default_container()->children()[i]->IsVisible() ? "A" : "a"; | 911 result += default_container()->children()[i]->IsVisible() ? "A" : "a"; |
| 922 else if (default_container()->children()[i] == wb) | 912 else if (default_container()->children()[i] == wb) |
| 923 result += default_container()->children()[i]->IsVisible() ? "B" : "b"; | 913 result += default_container()->children()[i]->IsVisible() ? "B" : "b"; |
| 924 else if (default_container()->children()[i] == wc) | 914 else if (default_container()->children()[i] == wc) |
| 925 result += default_container()->children()[i]->IsVisible() ? "C" : "c"; | 915 result += default_container()->children()[i]->IsVisible() ? "C" : "c"; |
| 926 else if (default_container()->children()[i] == backdrop) | 916 else if (default_container()->children()[i] == backdrop) |
| 927 result += default_container()->children()[i]->IsVisible() ? "X" : "x"; | 917 result += default_container()->children()[i]->IsVisible() ? "X" : "x"; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 991 | 981 |
| 992 // Create 2 more windows and check that they are also in the container. | 982 // Create 2 more windows and check that they are also in the container. |
| 993 std::unique_ptr<aura::Window> window2( | 983 std::unique_ptr<aura::Window> window2( |
| 994 CreateTestWindow(gfx::Rect(10, 2, 3, 4))); | 984 CreateTestWindow(gfx::Rect(10, 2, 3, 4))); |
| 995 std::unique_ptr<aura::Window> window3( | 985 std::unique_ptr<aura::Window> window3( |
| 996 CreateTestWindow(gfx::Rect(20, 2, 3, 4))); | 986 CreateTestWindow(gfx::Rect(20, 2, 3, 4))); |
| 997 window2->Show(); | 987 window2->Show(); |
| 998 window3->Show(); | 988 window3->Show(); |
| 999 | 989 |
| 1000 aura::Window* backdrop = nullptr; | 990 aura::Window* backdrop = nullptr; |
| 1001 EXPECT_EQ("C,B,A", | 991 EXPECT_EQ("C,B,A", GetWindowOrderAsString(backdrop, window1.get(), |
| 1002 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 992 window2.get(), window3.get())); |
| 1003 window3.get())); | |
| 1004 | 993 |
| 1005 // Turn on the backdrop mode and check that the window shows up where it | 994 // Turn on the backdrop mode and check that the window shows up where it |
| 1006 // should be (second highest number). | 995 // should be (second highest number). |
| 1007 ShowTopWindowBackdrop(true); | 996 ShowTopWindowBackdrop(true); |
| 1008 backdrop = default_container()->children()[2]; | 997 backdrop = default_container()->children()[2]; |
| 1009 EXPECT_EQ("C,X,B,A", | 998 EXPECT_EQ("C,X,B,A", GetWindowOrderAsString(backdrop, window1.get(), |
| 1010 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 999 window2.get(), window3.get())); |
| 1011 window3.get())); | |
| 1012 | 1000 |
| 1013 // Switch the order of windows and check that it still remains in that | 1001 // Switch the order of windows and check that it still remains in that |
| 1014 // location. | 1002 // location. |
| 1015 default_container()->StackChildAtTop(window2.get()); | 1003 default_container()->StackChildAtTop(window2.get()); |
| 1016 EXPECT_EQ("B,X,C,A", | 1004 EXPECT_EQ("B,X,C,A", GetWindowOrderAsString(backdrop, window1.get(), |
| 1017 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 1005 window2.get(), window3.get())); |
| 1018 window3.get())); | |
| 1019 | 1006 |
| 1020 // Make the top window invisible and check. | 1007 // Make the top window invisible and check. |
| 1021 window2.get()->Hide(); | 1008 window2.get()->Hide(); |
| 1022 EXPECT_EQ("b,C,X,A", | 1009 EXPECT_EQ("b,C,X,A", GetWindowOrderAsString(backdrop, window1.get(), |
| 1023 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 1010 window2.get(), window3.get())); |
| 1024 window3.get())); | |
| 1025 // Then delete window after window and see that everything is in order. | 1011 // Then delete window after window and see that everything is in order. |
| 1026 window1.reset(); | 1012 window1.reset(); |
| 1027 EXPECT_EQ("b,C,X", | 1013 EXPECT_EQ("b,C,X", GetWindowOrderAsString(backdrop, window1.get(), |
| 1028 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 1014 window2.get(), window3.get())); |
| 1029 window3.get())); | |
| 1030 window3.reset(); | 1015 window3.reset(); |
| 1031 EXPECT_EQ("b,x", | 1016 EXPECT_EQ("b,x", GetWindowOrderAsString(backdrop, window1.get(), |
| 1032 GetWindowOrderAsString(backdrop, window1.get(), window2.get(), | 1017 window2.get(), window3.get())); |
| 1033 window3.get())); | |
| 1034 ShowTopWindowBackdrop(false); | 1018 ShowTopWindowBackdrop(false); |
| 1035 EXPECT_EQ("b", GetWindowOrderAsString(nullptr, window1.get(), window2.get(), | 1019 EXPECT_EQ("b", GetWindowOrderAsString(nullptr, window1.get(), window2.get(), |
| 1036 window3.get())); | 1020 window3.get())); |
| 1037 } | 1021 } |
| 1038 | 1022 |
| 1039 // Tests that when hidding the shelf, that the backdrop resizes to fill the | 1023 // Tests that when hidding the shelf, that the backdrop resizes to fill the |
| 1040 // entire workspace area. | 1024 // entire workspace area. |
| 1041 TEST_F(WorkspaceLayoutManagerBackdropTest, ShelfVisibilityChangesBounds) { | 1025 TEST_F(WorkspaceLayoutManagerBackdropTest, ShelfVisibilityChangesBounds) { |
| 1042 Shelf* shelf = Shelf::ForPrimaryDisplay(); | 1026 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
| 1043 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager(); | 1027 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager(); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 layout_manager_->OnKeyboardBoundsChanging(keyboard_bounds_); | 1068 layout_manager_->OnKeyboardBoundsChanging(keyboard_bounds_); |
| 1085 restore_work_area_insets_ = | 1069 restore_work_area_insets_ = |
| 1086 display::Screen::GetScreen()->GetPrimaryDisplay().GetWorkAreaInsets(); | 1070 display::Screen::GetScreen()->GetPrimaryDisplay().GetWorkAreaInsets(); |
| 1087 Shell::GetInstance()->SetDisplayWorkAreaInsets( | 1071 Shell::GetInstance()->SetDisplayWorkAreaInsets( |
| 1088 Shell::GetPrimaryRootWindow(), | 1072 Shell::GetPrimaryRootWindow(), |
| 1089 gfx::Insets(0, 0, keyboard_bounds_.height(), 0)); | 1073 gfx::Insets(0, 0, keyboard_bounds_.height(), 0)); |
| 1090 } | 1074 } |
| 1091 | 1075 |
| 1092 void HideKeyboard() { | 1076 void HideKeyboard() { |
| 1093 Shell::GetInstance()->SetDisplayWorkAreaInsets( | 1077 Shell::GetInstance()->SetDisplayWorkAreaInsets( |
| 1094 Shell::GetPrimaryRootWindow(), | 1078 Shell::GetPrimaryRootWindow(), restore_work_area_insets_); |
| 1095 restore_work_area_insets_); | |
| 1096 layout_manager_->OnKeyboardBoundsChanging(gfx::Rect()); | 1079 layout_manager_->OnKeyboardBoundsChanging(gfx::Rect()); |
| 1097 } | 1080 } |
| 1098 | 1081 |
| 1099 void SetKeyboardBounds(const gfx::Rect& bounds) { | 1082 void SetKeyboardBounds(const gfx::Rect& bounds) { keyboard_bounds_ = bounds; } |
| 1100 keyboard_bounds_ = bounds; | |
| 1101 } | |
| 1102 | 1083 |
| 1103 private: | 1084 private: |
| 1104 gfx::Insets restore_work_area_insets_; | 1085 gfx::Insets restore_work_area_insets_; |
| 1105 gfx::Rect keyboard_bounds_; | 1086 gfx::Rect keyboard_bounds_; |
| 1106 WorkspaceLayoutManager* layout_manager_; | 1087 WorkspaceLayoutManager* layout_manager_; |
| 1107 | 1088 |
| 1108 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerKeyboardTest); | 1089 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerKeyboardTest); |
| 1109 }; | 1090 }; |
| 1110 | 1091 |
| 1111 // Tests that when a child window gains focus the top level window containing it | 1092 // Tests that when a child window gains focus the top level window containing it |
| 1112 // is resized to fit the remaining workspace area. | 1093 // is resized to fit the remaining workspace area. |
| 1113 TEST_F(WorkspaceLayoutManagerKeyboardTest, ChildWindowFocused) { | 1094 TEST_F(WorkspaceLayoutManagerKeyboardTest, ChildWindowFocused) { |
| 1114 gfx::Rect work_area( | 1095 gfx::Rect work_area( |
| 1115 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); | 1096 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); |
| 1116 gfx::Rect keyboard_bounds(work_area.x(), | 1097 gfx::Rect keyboard_bounds(work_area.x(), |
| 1117 work_area.y() + work_area.height() / 2, | 1098 work_area.y() + work_area.height() / 2, |
| 1118 work_area.width(), | 1099 work_area.width(), work_area.height() / 2); |
| 1119 work_area.height() / 2); | |
| 1120 | 1100 |
| 1121 SetKeyboardBounds(keyboard_bounds); | 1101 SetKeyboardBounds(keyboard_bounds); |
| 1122 | 1102 |
| 1123 aura::test::TestWindowDelegate delegate1; | 1103 aura::test::TestWindowDelegate delegate1; |
| 1124 std::unique_ptr<aura::Window> parent_window( | 1104 std::unique_ptr<aura::Window> parent_window( |
| 1125 CreateTestWindowInShellWithDelegate(&delegate1, -1, work_area)); | 1105 CreateTestWindowInShellWithDelegate(&delegate1, -1, work_area)); |
| 1126 aura::test::TestWindowDelegate delegate2; | 1106 aura::test::TestWindowDelegate delegate2; |
| 1127 std::unique_ptr<aura::Window> window( | 1107 std::unique_ptr<aura::Window> window( |
| 1128 CreateTestWindowInShellWithDelegate(&delegate2, -1, work_area)); | 1108 CreateTestWindowInShellWithDelegate(&delegate2, -1, work_area)); |
| 1129 parent_window->AddChild(window.get()); | 1109 parent_window->AddChild(window.get()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1144 HideKeyboard(); | 1124 HideKeyboard(); |
| 1145 EXPECT_EQ(initial_window_bounds.ToString(), | 1125 EXPECT_EQ(initial_window_bounds.ToString(), |
| 1146 parent_window->bounds().ToString()); | 1126 parent_window->bounds().ToString()); |
| 1147 } | 1127 } |
| 1148 | 1128 |
| 1149 TEST_F(WorkspaceLayoutManagerKeyboardTest, AdjustWindowForA11yKeyboard) { | 1129 TEST_F(WorkspaceLayoutManagerKeyboardTest, AdjustWindowForA11yKeyboard) { |
| 1150 gfx::Rect work_area( | 1130 gfx::Rect work_area( |
| 1151 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); | 1131 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); |
| 1152 gfx::Rect keyboard_bounds(work_area.x(), | 1132 gfx::Rect keyboard_bounds(work_area.x(), |
| 1153 work_area.y() + work_area.height() / 2, | 1133 work_area.y() + work_area.height() / 2, |
| 1154 work_area.width(), | 1134 work_area.width(), work_area.height() / 2); |
| 1155 work_area.height() / 2); | |
| 1156 | 1135 |
| 1157 SetKeyboardBounds(keyboard_bounds); | 1136 SetKeyboardBounds(keyboard_bounds); |
| 1158 | 1137 |
| 1159 aura::test::TestWindowDelegate delegate; | 1138 aura::test::TestWindowDelegate delegate; |
| 1160 std::unique_ptr<aura::Window> window( | 1139 std::unique_ptr<aura::Window> window( |
| 1161 CreateTestWindowInShellWithDelegate(&delegate, -1, work_area)); | 1140 CreateTestWindowInShellWithDelegate(&delegate, -1, work_area)); |
| 1162 | 1141 |
| 1163 int available_height = | 1142 int available_height = |
| 1164 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() - | 1143 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() - |
| 1165 keyboard_bounds.height(); | 1144 keyboard_bounds.height(); |
| 1166 | 1145 |
| 1167 wm::ActivateWindow(window.get()); | 1146 wm::ActivateWindow(window.get()); |
| 1168 | 1147 |
| 1169 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString()); | 1148 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString()); |
| 1170 ShowKeyboard(); | 1149 ShowKeyboard(); |
| 1171 EXPECT_EQ(gfx::Rect(work_area.origin(), | 1150 EXPECT_EQ(gfx::Rect(work_area.origin(), |
| 1172 gfx::Size(work_area.width(), available_height)).ToString(), | 1151 gfx::Size(work_area.width(), available_height)) |
| 1152 .ToString(), |
| 1173 window->bounds().ToString()); | 1153 window->bounds().ToString()); |
| 1174 HideKeyboard(); | 1154 HideKeyboard(); |
| 1175 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString()); | 1155 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString()); |
| 1176 | 1156 |
| 1177 gfx::Rect small_window_bound(50, 50, 100, 500); | 1157 gfx::Rect small_window_bound(50, 50, 100, 500); |
| 1178 window->SetBounds(small_window_bound); | 1158 window->SetBounds(small_window_bound); |
| 1179 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString()); | 1159 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString()); |
| 1180 ShowKeyboard(); | 1160 ShowKeyboard(); |
| 1181 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(), | 1161 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(), |
| 1182 window->bounds().ToString()); | 1162 window->bounds().ToString()); |
| 1183 HideKeyboard(); | 1163 HideKeyboard(); |
| 1184 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString()); | 1164 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString()); |
| 1185 | 1165 |
| 1186 gfx::Rect occluded_window_bounds(50, | 1166 gfx::Rect occluded_window_bounds( |
| 1187 keyboard_bounds.y() + keyboard_bounds.height()/2, 50, | 1167 50, keyboard_bounds.y() + keyboard_bounds.height() / 2, 50, |
| 1188 keyboard_bounds.height()/2); | 1168 keyboard_bounds.height() / 2); |
| 1189 window->SetBounds(occluded_window_bounds); | 1169 window->SetBounds(occluded_window_bounds); |
| 1190 EXPECT_EQ(occluded_window_bounds.ToString(), | 1170 EXPECT_EQ(occluded_window_bounds.ToString(), |
| 1191 occluded_window_bounds.ToString()); | 1171 occluded_window_bounds.ToString()); |
| 1192 ShowKeyboard(); | 1172 ShowKeyboard(); |
| 1193 EXPECT_EQ(gfx::Rect(50, | 1173 EXPECT_EQ( |
| 1194 keyboard_bounds.y() - keyboard_bounds.height()/2, | 1174 gfx::Rect(50, keyboard_bounds.y() - keyboard_bounds.height() / 2, |
| 1195 occluded_window_bounds.width(), | 1175 occluded_window_bounds.width(), occluded_window_bounds.height()) |
| 1196 occluded_window_bounds.height()).ToString(), | 1176 .ToString(), |
| 1197 window->bounds().ToString()); | 1177 window->bounds().ToString()); |
| 1198 HideKeyboard(); | 1178 HideKeyboard(); |
| 1199 EXPECT_EQ(occluded_window_bounds.ToString(), window->bounds().ToString()); | 1179 EXPECT_EQ(occluded_window_bounds.ToString(), window->bounds().ToString()); |
| 1200 } | 1180 } |
| 1201 | 1181 |
| 1202 } // namespace ash | 1182 } // namespace ash |
| OLD | NEW |