| 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/shelf/shelf_layout_manager.h" | 5 #include "ash/shelf/shelf_layout_manager.h" |
| 6 | 6 |
| 7 #include "ash/accelerators/accelerator_controller.h" | 7 #include "ash/accelerators/accelerator_controller.h" |
| 8 #include "ash/accelerators/accelerator_table.h" | 8 #include "ash/accelerators/accelerator_table.h" |
| 9 #include "ash/focus_cycler.h" | 9 #include "ash/focus_cycler.h" |
| 10 #include "ash/public/cpp/config.h" | 10 #include "ash/public/cpp/config.h" |
| 11 #include "ash/public/cpp/shell_window_ids.h" | 11 #include "ash/public/cpp/shell_window_ids.h" |
| 12 #include "ash/root_window_controller.h" | |
| 13 #include "ash/session/session_controller.h" | 12 #include "ash/session/session_controller.h" |
| 14 #include "ash/shelf/shelf.h" | 13 #include "ash/shelf/shelf.h" |
| 15 #include "ash/shelf/shelf_constants.h" | 14 #include "ash/shelf/shelf_constants.h" |
| 16 #include "ash/shelf/shelf_layout_manager_observer.h" | 15 #include "ash/shelf/shelf_layout_manager_observer.h" |
| 17 #include "ash/shelf/shelf_view.h" | 16 #include "ash/shelf/shelf_view.h" |
| 18 #include "ash/shelf/shelf_widget.h" | 17 #include "ash/shelf/shelf_widget.h" |
| 19 #include "ash/shell.h" | 18 #include "ash/shell.h" |
| 20 #include "ash/shell_port.h" | 19 #include "ash/shell_port.h" |
| 21 #include "ash/system/status_area_widget.h" | 20 #include "ash/system/status_area_widget.h" |
| 22 #include "ash/system/tray/system_tray.h" | 21 #include "ash/system/tray/system_tray.h" |
| (...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1069 // Makes sure that when we have dual displays, with one or both shelves are set | 1068 // Makes sure that when we have dual displays, with one or both shelves are set |
| 1070 // to AutoHide, viewing the AppList on one of them doesn't unhide the other | 1069 // to AutoHide, viewing the AppList on one of them doesn't unhide the other |
| 1071 // hidden shelf. | 1070 // hidden shelf. |
| 1072 TEST_F(ShelfLayoutManagerTest, DualDisplayOpenAppListWithShelfAutoHideState) { | 1071 TEST_F(ShelfLayoutManagerTest, DualDisplayOpenAppListWithShelfAutoHideState) { |
| 1073 // Create two displays. | 1072 // Create two displays. |
| 1074 UpdateDisplay("0+0-200x200,+200+0-100x100"); | 1073 UpdateDisplay("0+0-200x200,+200+0-100x100"); |
| 1075 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1074 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1076 EXPECT_EQ(root_windows.size(), 2U); | 1075 EXPECT_EQ(root_windows.size(), 2U); |
| 1077 | 1076 |
| 1078 // Get the shelves in both displays and set them to be 'AutoHide'. | 1077 // Get the shelves in both displays and set them to be 'AutoHide'. |
| 1079 Shelf* shelf_1 = GetRootWindowController(root_windows[0])->shelf(); | 1078 Shelf* shelf_1 = Shelf::ForWindow(root_windows[0]); |
| 1080 Shelf* shelf_2 = GetRootWindowController(root_windows[1])->shelf(); | 1079 Shelf* shelf_2 = Shelf::ForWindow(root_windows[1]); |
| 1081 EXPECT_NE(shelf_1, shelf_2); | 1080 EXPECT_NE(shelf_1, shelf_2); |
| 1082 EXPECT_NE(shelf_1->GetWindow()->GetRootWindow(), | 1081 EXPECT_NE(shelf_1->GetWindow()->GetRootWindow(), |
| 1083 shelf_2->GetWindow()->GetRootWindow()); | 1082 shelf_2->GetWindow()->GetRootWindow()); |
| 1084 shelf_1->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 1083 shelf_1->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 1085 shelf_1->shelf_layout_manager()->LayoutShelf(); | 1084 shelf_1->shelf_layout_manager()->LayoutShelf(); |
| 1086 shelf_2->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 1085 shelf_2->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 1087 shelf_2->shelf_layout_manager()->LayoutShelf(); | 1086 shelf_2->shelf_layout_manager()->LayoutShelf(); |
| 1088 | 1087 |
| 1089 // Create a window in each display and show them in maximized state. | 1088 // Create a window in each display and show them in maximized state. |
| 1090 aura::Window* window_1 = CreateTestWindowInParent(root_windows[0]); | 1089 aura::Window* window_1 = CreateTestWindowInParent(root_windows[0]); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 | 1191 |
| 1193 // Tests the correct behavior of the shelf when there is a system modal window | 1192 // Tests the correct behavior of the shelf when there is a system modal window |
| 1194 // open when we have dual display. | 1193 // open when we have dual display. |
| 1195 TEST_F(ShelfLayoutManagerTest, ShelfWithSystemModalWindowDualDisplay) { | 1194 TEST_F(ShelfLayoutManagerTest, ShelfWithSystemModalWindowDualDisplay) { |
| 1196 // Create two displays. | 1195 // Create two displays. |
| 1197 UpdateDisplay("200x200,100x100"); | 1196 UpdateDisplay("200x200,100x100"); |
| 1198 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1197 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1199 EXPECT_EQ(2U, root_windows.size()); | 1198 EXPECT_EQ(2U, root_windows.size()); |
| 1200 | 1199 |
| 1201 // Get the shelves in both displays and set them to be 'AutoHide'. | 1200 // Get the shelves in both displays and set them to be 'AutoHide'. |
| 1202 Shelf* shelf_1 = GetRootWindowController(root_windows[0])->shelf(); | 1201 Shelf* shelf_1 = Shelf::ForWindow(root_windows[0]); |
| 1203 Shelf* shelf_2 = GetRootWindowController(root_windows[1])->shelf(); | 1202 Shelf* shelf_2 = Shelf::ForWindow(root_windows[1]); |
| 1204 EXPECT_NE(shelf_1, shelf_2); | 1203 EXPECT_NE(shelf_1, shelf_2); |
| 1205 EXPECT_NE(shelf_1->GetWindow()->GetRootWindow(), | 1204 EXPECT_NE(shelf_1->GetWindow()->GetRootWindow(), |
| 1206 shelf_2->GetWindow()->GetRootWindow()); | 1205 shelf_2->GetWindow()->GetRootWindow()); |
| 1207 shelf_1->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 1206 shelf_1->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 1208 shelf_1->shelf_layout_manager()->LayoutShelf(); | 1207 shelf_1->shelf_layout_manager()->LayoutShelf(); |
| 1209 shelf_2->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 1208 shelf_2->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
| 1210 shelf_2->shelf_layout_manager()->LayoutShelf(); | 1209 shelf_2->shelf_layout_manager()->LayoutShelf(); |
| 1211 | 1210 |
| 1212 // Create a window in each display and show them in maximized state. | 1211 // Create a window in each display and show them in maximized state. |
| 1213 aura::Window* window_1 = CreateTestWindowInParent(root_windows[0]); | 1212 aura::Window* window_1 = CreateTestWindowInParent(root_windows[0]); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 | 1258 |
| 1260 wm::GetWindowState(window1)->Activate(); | 1259 wm::GetWindowState(window1)->Activate(); |
| 1261 EXPECT_EQ(SHELF_HIDDEN, shelf->GetVisibilityState()); | 1260 EXPECT_EQ(SHELF_HIDDEN, shelf->GetVisibilityState()); |
| 1262 } | 1261 } |
| 1263 | 1262 |
| 1264 // Test the behavior of the shelf when a window on one display is fullscreen | 1263 // Test the behavior of the shelf when a window on one display is fullscreen |
| 1265 // but the other display has the active window. | 1264 // but the other display has the active window. |
| 1266 TEST_F(ShelfLayoutManagerTest, FullscreenWindowOnSecondDisplay) { | 1265 TEST_F(ShelfLayoutManagerTest, FullscreenWindowOnSecondDisplay) { |
| 1267 UpdateDisplay("800x600,800x600"); | 1266 UpdateDisplay("800x600,800x600"); |
| 1268 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1267 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1269 Shell::RootWindowControllerList root_window_controllers = | |
| 1270 Shell::GetAllRootWindowControllers(); | |
| 1271 | 1268 |
| 1272 // Create windows on either display. | 1269 // Create windows on either display. |
| 1273 aura::Window* window1 = CreateTestWindow(); | 1270 aura::Window* window1 = CreateTestWindow(); |
| 1274 window1->SetBoundsInScreen(gfx::Rect(0, 0, 100, 100), | 1271 window1->SetBoundsInScreen(gfx::Rect(0, 0, 100, 100), |
| 1275 display::Screen::GetScreen()->GetAllDisplays()[0]); | 1272 display::Screen::GetScreen()->GetAllDisplays()[0]); |
| 1276 window1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); | 1273 window1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN); |
| 1277 window1->Show(); | 1274 window1->Show(); |
| 1278 | 1275 |
| 1279 aura::Window* window2 = CreateTestWindow(); | 1276 aura::Window* window2 = CreateTestWindow(); |
| 1280 window2->SetBoundsInScreen(gfx::Rect(800, 0, 100, 100), | 1277 window2->SetBoundsInScreen(gfx::Rect(800, 0, 100, 100), |
| 1281 display::Screen::GetScreen()->GetAllDisplays()[1]); | 1278 display::Screen::GetScreen()->GetAllDisplays()[1]); |
| 1282 window2->Show(); | 1279 window2->Show(); |
| 1283 | 1280 |
| 1284 EXPECT_EQ(root_windows[0], window1->GetRootWindow()); | 1281 EXPECT_EQ(root_windows[0], window1->GetRootWindow()); |
| 1285 EXPECT_EQ(root_windows[1], window2->GetRootWindow()); | 1282 EXPECT_EQ(root_windows[1], window2->GetRootWindow()); |
| 1286 | 1283 |
| 1287 wm::GetWindowState(window2)->Activate(); | 1284 wm::GetWindowState(window2)->Activate(); |
| 1288 EXPECT_EQ( | 1285 EXPECT_EQ( |
| 1289 SHELF_HIDDEN, | 1286 SHELF_HIDDEN, |
| 1290 root_window_controllers[0]->GetShelfLayoutManager()->visibility_state()); | 1287 Shelf::ForWindow(window1)->shelf_layout_manager()->visibility_state()); |
| 1291 EXPECT_EQ( | 1288 EXPECT_EQ( |
| 1292 SHELF_VISIBLE, | 1289 SHELF_VISIBLE, |
| 1293 root_window_controllers[1]->GetShelfLayoutManager()->visibility_state()); | 1290 Shelf::ForWindow(window2)->shelf_layout_manager()->visibility_state()); |
| 1294 } | 1291 } |
| 1295 | 1292 |
| 1296 // Test for Pinned mode. | 1293 // Test for Pinned mode. |
| 1297 TEST_F(ShelfLayoutManagerTest, PinnedWindowHidesShelf) { | 1294 TEST_F(ShelfLayoutManagerTest, PinnedWindowHidesShelf) { |
| 1298 // TODO: investigate failure in mash, http://crbug.com/695686. | 1295 // TODO: investigate failure in mash, http://crbug.com/695686. |
| 1299 if (Shell::GetAshConfig() == Config::MASH) | 1296 if (Shell::GetAshConfig() == Config::MASH) |
| 1300 return; | 1297 return; |
| 1301 | 1298 |
| 1302 Shelf* shelf = GetPrimaryShelf(); | 1299 Shelf* shelf = GetPrimaryShelf(); |
| 1303 | 1300 |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1883 // Open keyboard in sticky mode. | 1880 // Open keyboard in sticky mode. |
| 1884 kb_controller->ShowKeyboard(true); | 1881 kb_controller->ShowKeyboard(true); |
| 1885 layout_manager->OnKeyboardBoundsChanging(keyboard_bounds()); | 1882 layout_manager->OnKeyboardBoundsChanging(keyboard_bounds()); |
| 1886 | 1883 |
| 1887 // Work area should be changed. | 1884 // Work area should be changed. |
| 1888 EXPECT_NE(orig_work_area, | 1885 EXPECT_NE(orig_work_area, |
| 1889 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); | 1886 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); |
| 1890 } | 1887 } |
| 1891 | 1888 |
| 1892 } // namespace ash | 1889 } // namespace ash |
| OLD | NEW |