OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <algorithm> | 5 #include <algorithm> |
6 | 6 |
7 #include "ash/accessibility_delegate.h" | 7 #include "ash/accessibility_delegate.h" |
8 #include "ash/drag_drop/drag_drop_controller.h" | 8 #include "ash/drag_drop/drag_drop_controller.h" |
9 #include "ash/root_window_controller.h" | 9 #include "ash/root_window_controller.h" |
10 #include "ash/screen_util.h" | 10 #include "ash/screen_util.h" |
(...skipping 28 matching lines...) Expand all Loading... | |
39 #include "ui/aura/test/test_window_delegate.h" | 39 #include "ui/aura/test/test_window_delegate.h" |
40 #include "ui/aura/test/test_windows.h" | 40 #include "ui/aura/test/test_windows.h" |
41 #include "ui/aura/window.h" | 41 #include "ui/aura/window.h" |
42 #include "ui/aura/window_event_dispatcher.h" | 42 #include "ui/aura/window_event_dispatcher.h" |
43 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | 43 #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
44 #include "ui/events/test/event_generator.h" | 44 #include "ui/events/test/event_generator.h" |
45 #include "ui/gfx/geometry/point_conversions.h" | 45 #include "ui/gfx/geometry/point_conversions.h" |
46 #include "ui/gfx/geometry/rect_conversions.h" | 46 #include "ui/gfx/geometry/rect_conversions.h" |
47 #include "ui/gfx/transform.h" | 47 #include "ui/gfx/transform.h" |
48 #include "ui/gfx/transform_util.h" | 48 #include "ui/gfx/transform_util.h" |
49 #include "ui/views/controls/label.h" | 49 #include "ui/views/controls/button/label_button.h" |
50 #include "ui/views/widget/native_widget_aura.h" | 50 #include "ui/views/widget/native_widget_aura.h" |
51 #include "ui/views/widget/widget_delegate.h" | 51 #include "ui/views/widget/widget_delegate.h" |
52 #include "ui/wm/core/window_util.h" | 52 #include "ui/wm/core/window_util.h" |
53 #include "ui/wm/public/activation_delegate.h" | 53 #include "ui/wm/public/activation_delegate.h" |
54 | 54 |
55 namespace ash { | 55 namespace ash { |
56 namespace { | 56 namespace { |
57 | 57 |
58 typedef std::vector<aura::Window*> WindowList; | 58 typedef std::vector<aura::Window*> WindowList; |
59 typedef std::map<const aura::Window*, int> WindowIndexMap; | 59 typedef std::map<const aura::Window*, int> WindowIndexMap; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
108 aura::Window* CreateNonActivatableWindow(const gfx::Rect& bounds) { | 108 aura::Window* CreateNonActivatableWindow(const gfx::Rect& bounds) { |
109 aura::Window* window = CreateWindow(bounds); | 109 aura::Window* window = CreateWindow(bounds); |
110 aura::client::SetActivationDelegate(window, | 110 aura::client::SetActivationDelegate(window, |
111 &non_activatable_activation_delegate_); | 111 &non_activatable_activation_delegate_); |
112 EXPECT_FALSE(ash::wm::CanActivateWindow(window)); | 112 EXPECT_FALSE(ash::wm::CanActivateWindow(window)); |
113 return window; | 113 return window; |
114 } | 114 } |
115 | 115 |
116 aura::Window* CreatePanelWindow(const gfx::Rect& bounds) { | 116 aura::Window* CreatePanelWindow(const gfx::Rect& bounds) { |
117 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( | 117 aura::Window* window = CreateTestWindowInShellWithDelegateAndType( |
118 nullptr, ui::wm::WINDOW_TYPE_PANEL, 0, bounds); | 118 |
119 | |
120 &delegate_, ui::wm::WINDOW_TYPE_PANEL, 0, bounds); | |
119 test::TestShelfDelegate::instance()->AddShelfItem(window); | 121 test::TestShelfDelegate::instance()->AddShelfItem(window); |
120 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); | 122 shelf_view_test()->RunMessageLoopUntilAnimationsDone(); |
121 return window; | 123 return window; |
122 } | 124 } |
123 | 125 |
124 views::Widget* CreatePanelWindowWidget(const gfx::Rect& bounds) { | 126 views::Widget* CreatePanelWindowWidget(const gfx::Rect& bounds) { |
125 views::Widget* widget = new views::Widget; | 127 views::Widget* widget = new views::Widget; |
126 views::Widget::InitParams params; | 128 views::Widget::InitParams params; |
127 params.bounds = bounds; | 129 params.bounds = bounds; |
128 params.type = views::Widget::InitParams::TYPE_PANEL; | 130 params.type = views::Widget::InitParams::TYPE_PANEL; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
221 WindowSelector* ws = ash::Shell::GetInstance()-> | 223 WindowSelector* ws = ash::Shell::GetInstance()-> |
222 window_selector_controller()->window_selector_.get(); | 224 window_selector_controller()->window_selector_.get(); |
223 return ws->text_filter_widget_->GetNativeWindow()->layer()-> | 225 return ws->text_filter_widget_->GetNativeWindow()->layer()-> |
224 GetTargetTransform().IsIdentity(); | 226 GetTargetTransform().IsIdentity(); |
225 } | 227 } |
226 | 228 |
227 views::Widget* GetCloseButton(ash::WindowSelectorItem* window) { | 229 views::Widget* GetCloseButton(ash::WindowSelectorItem* window) { |
228 return &(window->close_button_widget_); | 230 return &(window->close_button_widget_); |
229 } | 231 } |
230 | 232 |
231 views::Label* GetLabelView(ash::WindowSelectorItem* window) { | 233 views::LabelButton* GetLabelButtonView(ash::WindowSelectorItem* window) { |
232 return window->window_label_view_; | 234 return window->window_label_button_view_; |
233 } | 235 } |
234 | 236 |
235 // Tests that a window is contained within a given WindowSelectorItem, and | 237 // Tests that a window is contained within a given WindowSelectorItem, and |
236 // that both the window and its matching close button are within the same | 238 // that both the window and its matching close button are within the same |
237 // screen. | 239 // screen. |
238 void IsWindowAndCloseButtonInScreen(aura::Window* window, | 240 void IsWindowAndCloseButtonInScreen(aura::Window* window, |
239 WindowSelectorItem* window_item) { | 241 WindowSelectorItem* window_item) { |
240 aura::Window* root_window = window_item->root_window(); | 242 aura::Window* root_window = window_item->root_window(); |
241 EXPECT_TRUE(window_item->Contains(window)); | 243 EXPECT_TRUE(window_item->Contains(window)); |
242 EXPECT_TRUE(root_window->GetBoundsInScreen().Contains( | 244 EXPECT_TRUE(root_window->GetBoundsInScreen().Contains( |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
368 | 370 |
369 event_generator.ReleaseTouchId(kTouchId); | 371 event_generator.ReleaseTouchId(kTouchId); |
370 } | 372 } |
371 | 373 |
372 // Tests that we do not crash and a window is selected when appropriate when | 374 // Tests that we do not crash and a window is selected when appropriate when |
373 // we click on a window during touch. | 375 // we click on a window during touch. |
374 TEST_F(WindowSelectorTest, ClickOnWindowDuringTouch) { | 376 TEST_F(WindowSelectorTest, ClickOnWindowDuringTouch) { |
375 gfx::Rect bounds(0, 0, 400, 400); | 377 gfx::Rect bounds(0, 0, 400, 400); |
376 scoped_ptr<aura::Window> window1(CreateWindow(bounds)); | 378 scoped_ptr<aura::Window> window1(CreateWindow(bounds)); |
377 scoped_ptr<aura::Window> window2(CreateWindow(bounds)); | 379 scoped_ptr<aura::Window> window2(CreateWindow(bounds)); |
378 wm::ActivateWindow(window2.get()); | 380 wm::ActivateWindow(window1.get()); |
379 EXPECT_FALSE(wm::IsActiveWindow(window1.get())); | 381 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); |
380 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); | 382 EXPECT_FALSE(wm::IsActiveWindow(window2.get())); |
381 | 383 |
382 ToggleOverview(); | 384 ToggleOverview(); |
383 | 385 |
384 gfx::Rect window1_bounds = | 386 gfx::Rect window1_bounds = |
385 gfx::ToEnclosingRect(GetTransformedBoundsInRootWindow(window1.get())); | 387 gfx::ToEnclosingRect(GetTransformedBoundsInRootWindow(window1.get())); |
386 ui::test::EventGenerator event_generator(window1->GetRootWindow(), | 388 ui::test::EventGenerator event_generator(window1->GetRootWindow(), |
387 window1_bounds.CenterPoint()); | 389 window1_bounds.CenterPoint()); |
388 | 390 |
389 // Clicking on |window2| while touching on |window1| should not cause a | 391 // Clicking on |window2| while touching on |window1| should not cause a |
390 // crash, and overview mode should remain engaged because |window1| | 392 // crash, overview mode should be disengaged and |window2| should be active. |
391 // has capture. | |
392 const int kTouchId = 19; | 393 const int kTouchId = 19; |
393 event_generator.PressTouchId(kTouchId); | 394 event_generator.PressTouchId(kTouchId); |
394 event_generator.MoveMouseToCenterOf(window2.get()); | 395 event_generator.MoveMouseToCenterOf(window2.get()); |
395 event_generator.ClickLeftButton(); | 396 event_generator.ClickLeftButton(); |
396 EXPECT_TRUE(IsSelecting()); | 397 EXPECT_FALSE(IsSelecting()); |
398 EXPECT_TRUE(wm::IsActiveWindow(window2.get())); | |
397 event_generator.ReleaseTouchId(kTouchId); | 399 event_generator.ReleaseTouchId(kTouchId); |
398 | 400 |
401 ToggleOverview(); | |
402 | |
399 // Clicking on |window1| while touching on |window1| should not cause | 403 // Clicking on |window1| while touching on |window1| should not cause |
400 // a crash, overview mode should be disengaged, and |window1| should | 404 // a crash, overview mode should be disengaged, and |window1| should |
401 // be active. | 405 // be active. |
402 event_generator.MoveMouseToCenterOf(window1.get()); | 406 event_generator.MoveMouseToCenterOf(window1.get()); |
403 event_generator.PressTouchId(kTouchId); | 407 event_generator.PressTouchId(kTouchId); |
404 event_generator.ClickLeftButton(); | 408 event_generator.ClickLeftButton(); |
405 EXPECT_FALSE(IsSelecting()); | 409 EXPECT_FALSE(IsSelecting()); |
406 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); | 410 EXPECT_TRUE(wm::IsActiveWindow(window1.get())); |
407 EXPECT_FALSE(wm::IsActiveWindow(window2.get())); | 411 EXPECT_FALSE(wm::IsActiveWindow(window2.get())); |
408 event_generator.ReleaseTouchId(kTouchId); | 412 event_generator.ReleaseTouchId(kTouchId); |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
923 RunAllPendingInMessageLoop(); | 927 RunAllPendingInMessageLoop(); |
924 } | 928 } |
925 | 929 |
926 // Test that a label is created under the window on entering overview mode. | 930 // Test that a label is created under the window on entering overview mode. |
927 TEST_F(WindowSelectorTest, CreateLabelUnderWindow) { | 931 TEST_F(WindowSelectorTest, CreateLabelUnderWindow) { |
928 scoped_ptr<aura::Window> window(CreateWindow(gfx::Rect(0, 0, 100, 100))); | 932 scoped_ptr<aura::Window> window(CreateWindow(gfx::Rect(0, 0, 100, 100))); |
929 base::string16 window_title = base::UTF8ToUTF16("My window"); | 933 base::string16 window_title = base::UTF8ToUTF16("My window"); |
930 window->SetTitle(window_title); | 934 window->SetTitle(window_title); |
931 ToggleOverview(); | 935 ToggleOverview(); |
932 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back(); | 936 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back(); |
933 views::Label* label = GetLabelView(window_item); | 937 views::LabelButton* label = GetLabelButtonView(window_item); |
934 // Has the label view been created? | 938 // Has the label view been created? |
935 ASSERT_TRUE(label); | 939 ASSERT_TRUE(label); |
936 | 940 |
937 // Verify the label matches the window title. | 941 // Verify the label matches the window title. |
938 EXPECT_EQ(label->text(), window_title); | 942 EXPECT_EQ(label->GetText(), window_title); |
939 | 943 |
940 // Update the window title and check that the label is updated, too. | 944 // Update the window title and check that the label is updated, too. |
941 base::string16 updated_title = base::UTF8ToUTF16("Updated title"); | 945 base::string16 updated_title = base::UTF8ToUTF16("Updated title"); |
942 window->SetTitle(updated_title); | 946 window->SetTitle(updated_title); |
943 EXPECT_EQ(label->text(), updated_title); | 947 EXPECT_EQ(label->GetText(), updated_title); |
944 | 948 |
945 // Labels are located based on target_bounds, not the actual window item | 949 // Labels are located based on target_bounds, not the actual window item |
946 // bounds. | 950 // bounds. |
947 gfx::Rect target_bounds(window_item->target_bounds()); | 951 gfx::Rect target_bounds(window_item->target_bounds()); |
948 gfx::Rect expected_label_bounds(target_bounds.x(), | 952 gfx::Rect expected_label_bounds(target_bounds.x(), |
949 target_bounds.bottom() - label-> | 953 target_bounds.bottom() - label-> |
950 GetPreferredSize().height(), | 954 GetPreferredSize().height(), |
951 target_bounds.width(), | 955 target_bounds.width(), |
952 label->GetPreferredSize().height()); | 956 label->GetPreferredSize().height()); |
953 gfx::Rect real_label_bounds = label->GetWidget()->GetNativeWindow()->bounds(); | 957 gfx::Rect real_label_bounds = label->GetWidget()->GetNativeWindow()->bounds(); |
954 EXPECT_EQ(real_label_bounds, expected_label_bounds); | 958 EXPECT_EQ(real_label_bounds, expected_label_bounds); |
955 } | 959 } |
956 | 960 |
957 // Tests that a label is created for the active panel in a group of panels in | 961 // Tests that a label is created for the active panel in a group of panels in |
958 // overview mode. | 962 // overview mode. |
959 TEST_F(WindowSelectorTest, CreateLabelUnderPanel) { | 963 TEST_F(WindowSelectorTest, CreateLabelUnderPanel) { |
960 scoped_ptr<aura::Window> panel1(CreatePanelWindow(gfx::Rect(0, 0, 100, 100))); | 964 scoped_ptr<aura::Window> panel1(CreatePanelWindow(gfx::Rect(0, 0, 100, 100))); |
961 scoped_ptr<aura::Window> panel2(CreatePanelWindow(gfx::Rect(0, 0, 100, 100))); | 965 scoped_ptr<aura::Window> panel2(CreatePanelWindow(gfx::Rect(0, 0, 100, 100))); |
962 base::string16 panel1_title = base::UTF8ToUTF16("My panel"); | 966 base::string16 panel1_title = base::UTF8ToUTF16("My panel"); |
963 base::string16 panel2_title = base::UTF8ToUTF16("Another panel"); | 967 base::string16 panel2_title = base::UTF8ToUTF16("Another panel"); |
964 base::string16 updated_panel1_title = base::UTF8ToUTF16("WebDriver Torso"); | 968 base::string16 updated_panel1_title = base::UTF8ToUTF16("WebDriver Torso"); |
965 base::string16 updated_panel2_title = base::UTF8ToUTF16("Da panel"); | 969 base::string16 updated_panel2_title = base::UTF8ToUTF16("Da panel"); |
966 panel1->SetTitle(panel1_title); | 970 panel1->SetTitle(panel1_title); |
967 panel2->SetTitle(panel2_title); | 971 panel2->SetTitle(panel2_title); |
968 wm::ActivateWindow(panel1.get()); | 972 wm::ActivateWindow(panel1.get()); |
969 ToggleOverview(); | 973 ToggleOverview(); |
970 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back(); | 974 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back(); |
971 views::Label* label = GetLabelView(window_item); | 975 views::LabelButton* label = GetLabelButtonView(window_item); |
972 // Has the label view been created? | 976 // Has the label view been created? |
973 ASSERT_TRUE(label); | 977 ASSERT_TRUE(label); |
974 | 978 |
975 // Verify the label matches the active window title. | 979 // Verify the label matches the active window title. |
976 EXPECT_EQ(label->text(), panel1_title); | 980 EXPECT_EQ(label->GetText(), panel1_title); |
977 // Verify that updating the title also updates the label. | 981 // Verify that updating the title also updates the label. |
978 panel1->SetTitle(updated_panel1_title); | 982 panel1->SetTitle(updated_panel1_title); |
979 EXPECT_EQ(label->text(), updated_panel1_title); | 983 EXPECT_EQ(label->GetText(), updated_panel1_title); |
980 // After destroying the first panel, the label should match the second panel. | 984 // After destroying the first panel, the label should match the second panel. |
981 panel1.reset(); | 985 panel1.reset(); |
982 label = GetLabelView(window_item); | 986 label = GetLabelButtonView(window_item); |
983 EXPECT_EQ(label->text(), panel2_title); | 987 EXPECT_EQ(label->GetText(), panel2_title); |
984 // Also test updating the title on the second panel. | 988 // Also test updating the title on the second panel. |
985 panel2->SetTitle(updated_panel2_title); | 989 panel2->SetTitle(updated_panel2_title); |
986 EXPECT_EQ(label->text(), updated_panel2_title); | 990 EXPECT_EQ(label->GetText(), updated_panel2_title); |
987 } | 991 } |
988 | 992 |
989 // Tests that overview updates the window positions if the display orientation | 993 // Tests that overview updates the window positions if the display orientation |
990 // changes. | 994 // changes. |
991 TEST_F(WindowSelectorTest, DisplayOrientationChanged) { | 995 TEST_F(WindowSelectorTest, DisplayOrientationChanged) { |
992 if (!SupportsHostWindowResize()) | 996 if (!SupportsHostWindowResize()) |
993 return; | 997 return; |
994 | 998 |
995 aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); | 999 aura::Window* root_window = Shell::GetInstance()->GetPrimaryRootWindow(); |
996 UpdateDisplay("600x200"); | 1000 UpdateDisplay("600x200"); |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1190 event_generator1.ClickLeftButton(); | 1194 event_generator1.ClickLeftButton(); |
1191 EXPECT_TRUE(widget1->IsClosed()); | 1195 EXPECT_TRUE(widget1->IsClosed()); |
1192 RunAllPendingInMessageLoop(); | 1196 RunAllPendingInMessageLoop(); |
1193 EXPECT_TRUE(IsSelecting()); | 1197 EXPECT_TRUE(IsSelecting()); |
1194 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).front(); | 1198 WindowSelectorItem* window_item = GetWindowItemsForRoot(0).front(); |
1195 EXPECT_FALSE(window_item->empty()); | 1199 EXPECT_FALSE(window_item->empty()); |
1196 EXPECT_TRUE(window_item->Contains(window2)); | 1200 EXPECT_TRUE(window_item->Contains(window2)); |
1197 EXPECT_TRUE(GetCloseButton(window_item)->IsVisible()); | 1201 EXPECT_TRUE(GetCloseButton(window_item)->IsVisible()); |
1198 | 1202 |
1199 | 1203 |
1200 views::Label* label = GetLabelView(window_item); | 1204 views::LabelButton* label = GetLabelButtonView(window_item); |
1201 EXPECT_EQ(label->text(), panel2_title); | 1205 EXPECT_EQ(label->GetText(), panel2_title); |
1202 | 1206 |
1203 gfx::RectF bounds2 = GetTransformedBoundsInRootWindow(window2); | 1207 gfx::RectF bounds2 = GetTransformedBoundsInRootWindow(window2); |
1204 gfx::Point point2(bounds2.top_right().x() - 1, bounds2.top_right().y() - 1); | 1208 gfx::Point point2(bounds2.top_right().x() - 1, bounds2.top_right().y() - 1); |
1205 ui::test::EventGenerator event_generator2(window2->GetRootWindow(), point2); | 1209 ui::test::EventGenerator event_generator2(window2->GetRootWindow(), point2); |
1206 | 1210 |
1207 EXPECT_FALSE(widget2->IsClosed()); | 1211 EXPECT_FALSE(widget2->IsClosed()); |
1208 event_generator2.ClickLeftButton(); | 1212 event_generator2.ClickLeftButton(); |
1209 EXPECT_TRUE(widget2->IsClosed()); | 1213 EXPECT_TRUE(widget2->IsClosed()); |
1210 RunAllPendingInMessageLoop(); | 1214 RunAllPendingInMessageLoop(); |
1211 EXPECT_FALSE(IsSelecting()); | 1215 EXPECT_FALSE(IsSelecting()); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1342 | 1346 |
1343 // Switch to overview mode. | 1347 // Switch to overview mode. |
1344 ToggleOverview(); | 1348 ToggleOverview(); |
1345 ASSERT_TRUE(IsSelecting()); | 1349 ASSERT_TRUE(IsSelecting()); |
1346 | 1350 |
1347 // Tap should now exit overview mode. | 1351 // Tap should now exit overview mode. |
1348 generator.GestureTapAt(point_in_background_page); | 1352 generator.GestureTapAt(point_in_background_page); |
1349 EXPECT_FALSE(IsSelecting()); | 1353 EXPECT_FALSE(IsSelecting()); |
1350 } | 1354 } |
1351 | 1355 |
1352 // Tests that the transparent overlays z-order matches the windows z-order. | |
Nina
2015/01/09 15:43:48
This test is no longer needed as we are actually t
| |
1353 TEST_F(WindowSelectorTest, PanelStackOrdering) { | |
1354 gfx::Rect bounds1(0, 0, 100, 100); | |
1355 gfx::Rect bounds2(10, 0, 100, 100); | |
1356 gfx::Rect bounds3(20, 0, 100, 100); | |
1357 scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds1)); | |
1358 scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds2)); | |
1359 scoped_ptr<aura::Window> panel3(CreatePanelWindow(bounds3)); | |
1360 | |
1361 wm::ActivateWindow(panel2.get()); | |
1362 wm::ActivateWindow(panel3.get()); | |
1363 wm::ActivateWindow(panel1.get()); | |
1364 | |
1365 WindowIndexMap z_order; | |
1366 GetWindowIndexMap(panel1->parent()->children(), &z_order); | |
1367 ASSERT_GT(z_order[panel1.get()], z_order[panel2.get()]); | |
1368 ASSERT_GT(z_order[panel2.get()], z_order[panel3.get()]); | |
1369 | |
1370 WindowList mru_windows = ash::Shell::GetInstance()->mru_window_tracker()-> | |
1371 BuildMruWindowList(); | |
1372 WindowIndexMap mru_rank; | |
1373 GetWindowIndexMap(mru_windows, &mru_rank); | |
1374 ASSERT_LT(mru_rank[panel1.get()], mru_rank[panel3.get()]); | |
1375 ASSERT_LT(mru_rank[panel3.get()], mru_rank[panel2.get()]); | |
1376 | |
1377 ToggleOverview(); | |
1378 | |
1379 gfx::Rect panel1_transformed_bounds( | |
1380 gfx::ToEnclosingRect(GetTransformedTargetBounds(panel1.get()))); | |
1381 gfx::Rect panel2_transformed_bounds( | |
1382 gfx::ToEnclosingRect(GetTransformedTargetBounds(panel2.get()))); | |
1383 gfx::Rect panel3_transformed_bounds( | |
1384 gfx::ToEnclosingRect(GetTransformedTargetBounds(panel3.get()))); | |
1385 | |
1386 gfx::Rect target_rect(panel2_transformed_bounds); | |
1387 target_rect.Intersect(panel3_transformed_bounds); | |
1388 target_rect.Subtract(panel1_transformed_bounds); | |
1389 gfx::Point tap_target(target_rect.CenterPoint()); | |
1390 | |
1391 ASSERT_TRUE(panel3_transformed_bounds.Contains(tap_target)); | |
1392 | |
1393 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | |
1394 generator.GestureTapAt(tap_target); | |
1395 EXPECT_EQ(panel2.get(), GetFocusedWindow()); | |
1396 } | |
1397 | |
1398 // Tests that individual panels can be selected on a secondary display. | 1356 // Tests that individual panels can be selected on a secondary display. |
1399 TEST_F(WindowSelectorTest, PanelSelectionOnSecondaryDisplay) { | 1357 TEST_F(WindowSelectorTest, PanelSelectionOnSecondaryDisplay) { |
1400 if (!SupportsMultipleDisplays()) | 1358 if (!SupportsMultipleDisplays()) |
1401 return; | 1359 return; |
1402 | 1360 |
1403 UpdateDisplay("600x400,600x400"); | 1361 UpdateDisplay("600x400,600x400"); |
1404 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | |
1405 | 1362 |
1406 gfx::Rect bounds1(700, 0, 100, 100); | 1363 gfx::Rect bounds1(700, 0, 100, 100); |
1407 gfx::Rect bounds2(710, 0, 100, 100); | 1364 gfx::Rect bounds2(710, 0, 100, 100); |
1408 scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds1)); | 1365 scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds1)); |
1409 scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds2)); | 1366 scoped_ptr<aura::Window> panel2(CreatePanelWindow(bounds2)); |
1410 | 1367 |
1411 wm::ActivateWindow(panel2.get()); | 1368 wm::ActivateWindow(panel2.get()); |
1412 wm::ActivateWindow(panel1.get()); | 1369 wm::ActivateWindow(panel1.get()); |
1413 | 1370 |
1414 WindowList mru_windows = ash::Shell::GetInstance()->mru_window_tracker()-> | 1371 WindowList mru_windows = ash::Shell::GetInstance()->mru_window_tracker()-> |
1415 BuildMruWindowList(); | 1372 BuildMruWindowList(); |
1416 WindowIndexMap mru_rank; | 1373 WindowIndexMap mru_rank; |
1417 GetWindowIndexMap(mru_windows, &mru_rank); | 1374 GetWindowIndexMap(mru_windows, &mru_rank); |
1418 ASSERT_LT(mru_rank[panel1.get()], mru_rank[panel2.get()]); | 1375 ASSERT_LT(mru_rank[panel1.get()], mru_rank[panel2.get()]); |
1419 ASSERT_EQ(panel1.get(), GetFocusedWindow()); | 1376 ASSERT_EQ(panel1.get(), GetFocusedWindow()); |
1420 | 1377 |
1421 ToggleOverview(); | 1378 ToggleOverview(); |
1422 | 1379 |
1423 gfx::Rect panel2_transformed_bounds( | 1380 gfx::Rect panel2_transformed_bounds( |
1424 gfx::ToEnclosingRect(GetTransformedBoundsInRootWindow(panel2.get()))); | 1381 gfx::ToEnclosingRect(GetTransformedBoundsInRootWindow(panel2.get()))); |
1425 gfx::Point tap_target(panel2_transformed_bounds.right() - 2, | 1382 gfx::Point tap_target(panel2_transformed_bounds.right() - 2, |
1426 panel2_transformed_bounds.bottom() - 2); | 1383 panel2_transformed_bounds.bottom() - 2); |
1427 | 1384 |
1428 ui::test::EventGenerator generator(root_windows[1]); | 1385 ui::test::EventGenerator generator(panel2->GetRootWindow()); |
1429 generator.GestureTapAt(tap_target); | 1386 generator.GestureTapAt(tap_target); |
1430 EXPECT_EQ(panel2.get(), GetFocusedWindow()); | 1387 EXPECT_EQ(panel2.get(), GetFocusedWindow()); |
1431 } | 1388 } |
1432 | 1389 |
1433 } // namespace ash | 1390 } // namespace ash |
OLD | NEW |