OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "ash/shelf/shelf_widget.h" | 5 #include "ash/shelf/shelf_widget.h" |
6 | 6 |
7 #include "ash/root_window_controller.h" | 7 #include "ash/root_window_controller.h" |
8 #include "ash/shelf/shelf.h" | 8 #include "ash/shelf/shelf.h" |
9 #include "ash/shelf/shelf_delegate.h" | 9 #include "ash/shelf/shelf_delegate.h" |
10 #include "ash/shelf/shelf_layout_manager.h" | 10 #include "ash/shelf/shelf_layout_manager.h" |
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 // window-targeter should find |widget| as the target (instead of the | 221 // window-targeter should find |widget| as the target (instead of the |
222 // shelf). | 222 // shelf). |
223 gfx::Point event_location(widget_bounds.x() + 5, shelf_bounds.y() + 1); | 223 gfx::Point event_location(widget_bounds.x() + 5, shelf_bounds.y() + 1); |
224 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, | 224 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, |
225 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); | 225 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
226 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); | 226 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); |
227 EXPECT_EQ(widget->GetNativeWindow(), target); | 227 EXPECT_EQ(widget->GetNativeWindow(), target); |
228 } | 228 } |
229 | 229 |
230 // Change shelf alignment to verify that the targeter insets are updated. | 230 // Change shelf alignment to verify that the targeter insets are updated. |
231 shelf_layout_manager->SetAlignment(wm::SHELF_ALIGNMENT_LEFT); | 231 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
| 232 shelf->SetAlignment(wm::SHELF_ALIGNMENT_LEFT); |
232 shelf_layout_manager->LayoutShelf(); | 233 shelf_layout_manager->LayoutShelf(); |
233 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); | 234 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); |
234 { | 235 { |
235 // Create a mouse-event targeting the right edge of the shelf widget. The | 236 // Create a mouse-event targeting the right edge of the shelf widget. The |
236 // window-targeter should find |widget| as the target (instead of the | 237 // window-targeter should find |widget| as the target (instead of the |
237 // shelf). | 238 // shelf). |
238 gfx::Point event_location(shelf_bounds.right() - 1, widget_bounds.y() + 5); | 239 gfx::Point event_location(shelf_bounds.right() - 1, widget_bounds.y() + 5); |
239 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, | 240 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, |
240 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); | 241 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
241 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); | 242 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); |
242 EXPECT_EQ(widget->GetNativeWindow(), target); | 243 EXPECT_EQ(widget->GetNativeWindow(), target); |
243 } | 244 } |
244 | 245 |
245 // Now restore shelf alignment (bottom) and auto-hide (hidden) the shelf. | 246 // Now restore shelf alignment (bottom) and auto-hide (hidden) the shelf. |
246 shelf_layout_manager->SetAlignment(wm::SHELF_ALIGNMENT_BOTTOM); | 247 shelf->SetAlignment(wm::SHELF_ALIGNMENT_BOTTOM); |
247 shelf_layout_manager->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 248 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
248 shelf_layout_manager->LayoutShelf(); | 249 shelf_layout_manager->LayoutShelf(); |
249 EXPECT_EQ(SHELF_AUTO_HIDE, shelf_layout_manager->visibility_state()); | 250 EXPECT_EQ(SHELF_AUTO_HIDE, shelf_layout_manager->visibility_state()); |
250 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf_layout_manager->auto_hide_state()); | 251 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf_layout_manager->auto_hide_state()); |
251 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); | 252 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); |
252 EXPECT_TRUE(!shelf_bounds.IsEmpty()); | 253 EXPECT_TRUE(!shelf_bounds.IsEmpty()); |
253 | 254 |
254 // Move |widget| so it still overlaps the shelf. | 255 // Move |widget| so it still overlaps the shelf. |
255 widget->SetBounds(gfx::Rect(0, | 256 widget->SetBounds(gfx::Rect(0, |
256 shelf_bounds.y() - kWindowHeight + kOverlapSize, | 257 shelf_bounds.y() - kWindowHeight + kOverlapSize, |
257 kWindowWidth, kWindowHeight)); | 258 kWindowWidth, kWindowHeight)); |
258 widget_bounds = widget->GetWindowBoundsInScreen(); | 259 widget_bounds = widget->GetWindowBoundsInScreen(); |
259 EXPECT_TRUE(widget_bounds.Intersects(shelf_bounds)); | 260 EXPECT_TRUE(widget_bounds.Intersects(shelf_bounds)); |
260 { | 261 { |
261 // Create a mouse-event targeting the top of the shelf widget. This time, | 262 // Create a mouse-event targeting the top of the shelf widget. This time, |
262 // window-target should find the shelf as the target. | 263 // window-target should find the shelf as the target. |
263 gfx::Point event_location(widget_bounds.x() + 5, shelf_bounds.y() + 1); | 264 gfx::Point event_location(widget_bounds.x() + 5, shelf_bounds.y() + 1); |
264 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, | 265 ui::MouseEvent mouse(ui::ET_MOUSE_MOVED, event_location, event_location, |
265 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); | 266 ui::EventTimeForNow(), ui::EF_NONE, ui::EF_NONE); |
266 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); | 267 ui::EventTarget* target = targeter->FindTargetForEvent(root, &mouse); |
267 EXPECT_EQ(shelf_widget->GetNativeWindow(), target); | 268 EXPECT_EQ(shelf_widget->GetNativeWindow(), target); |
268 } | 269 } |
269 } | 270 } |
270 | 271 |
271 // Tests that the shelf has a slightly larger hit-region for touch-events when | 272 // Tests that the shelf has a slightly larger hit-region for touch-events when |
272 // it's in the auto-hidden state. | 273 // it's in the auto-hidden state. |
273 TEST_F(ShelfWidgetTest, HiddenShelfHitTestTouch) { | 274 TEST_F(ShelfWidgetTest, HiddenShelfHitTestTouch) { |
| 275 Shelf* shelf = Shelf::ForPrimaryDisplay(); |
274 ShelfWidget* shelf_widget = GetShelfWidget(); | 276 ShelfWidget* shelf_widget = GetShelfWidget(); |
275 gfx::Rect shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); | 277 gfx::Rect shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); |
276 EXPECT_TRUE(!shelf_bounds.IsEmpty()); | 278 EXPECT_TRUE(!shelf_bounds.IsEmpty()); |
277 ShelfLayoutManager* shelf_layout_manager = | 279 ShelfLayoutManager* shelf_layout_manager = |
278 shelf_widget->shelf_layout_manager(); | 280 shelf_widget->shelf_layout_manager(); |
279 ASSERT_TRUE(shelf_layout_manager); | 281 ASSERT_TRUE(shelf_layout_manager); |
280 EXPECT_EQ(SHELF_VISIBLE, shelf_layout_manager->visibility_state()); | 282 EXPECT_EQ(SHELF_VISIBLE, shelf_layout_manager->visibility_state()); |
281 | 283 |
282 // Create a widget to make sure that the shelf does auto-hide. | 284 // Create a widget to make sure that the shelf does auto-hide. |
283 views::Widget* widget = new views::Widget; | 285 views::Widget* widget = new views::Widget; |
(...skipping 10 matching lines...) Expand all Loading... |
294 // should not find the shelf as the target. | 296 // should not find the shelf as the target. |
295 { | 297 { |
296 gfx::Point event_location(20, shelf_bounds.y() - 1); | 298 gfx::Point event_location(20, shelf_bounds.y() - 1); |
297 ui::TouchEvent touch(ui::ET_TOUCH_PRESSED, event_location, 0, | 299 ui::TouchEvent touch(ui::ET_TOUCH_PRESSED, event_location, 0, |
298 ui::EventTimeForNow()); | 300 ui::EventTimeForNow()); |
299 EXPECT_NE(shelf_widget->GetNativeWindow(), | 301 EXPECT_NE(shelf_widget->GetNativeWindow(), |
300 targeter->FindTargetForEvent(root, &touch)); | 302 targeter->FindTargetForEvent(root, &touch)); |
301 } | 303 } |
302 | 304 |
303 // Now auto-hide (hidden) the shelf. | 305 // Now auto-hide (hidden) the shelf. |
304 shelf_layout_manager->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | 306 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); |
305 shelf_layout_manager->LayoutShelf(); | 307 shelf_layout_manager->LayoutShelf(); |
306 EXPECT_EQ(SHELF_AUTO_HIDE, shelf_layout_manager->visibility_state()); | 308 EXPECT_EQ(SHELF_AUTO_HIDE, shelf_layout_manager->visibility_state()); |
307 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf_layout_manager->auto_hide_state()); | 309 EXPECT_EQ(SHELF_AUTO_HIDE_HIDDEN, shelf_layout_manager->auto_hide_state()); |
308 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); | 310 shelf_bounds = shelf_widget->GetWindowBoundsInScreen(); |
309 EXPECT_TRUE(!shelf_bounds.IsEmpty()); | 311 EXPECT_TRUE(!shelf_bounds.IsEmpty()); |
310 | 312 |
311 // Touch just over the shelf again. This time, the targeter should find the | 313 // Touch just over the shelf again. This time, the targeter should find the |
312 // shelf as the target. | 314 // shelf as the target. |
313 { | 315 { |
314 gfx::Point event_location(20, shelf_bounds.y() - 1); | 316 gfx::Point event_location(20, shelf_bounds.y() - 1); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 SetSessionStarted(true); | 411 SetSessionStarted(true); |
410 | 412 |
411 ShelfWidget* shelf_widget = GetShelfWidget(); | 413 ShelfWidget* shelf_widget = GetShelfWidget(); |
412 ASSERT_NE(nullptr, shelf_widget); | 414 ASSERT_NE(nullptr, shelf_widget); |
413 Shelf* shelf = shelf_widget->shelf(); | 415 Shelf* shelf = shelf_widget->shelf(); |
414 ASSERT_NE(nullptr, shelf); | 416 ASSERT_NE(nullptr, shelf); |
415 ShelfLayoutManager* shelf_layout_manager = | 417 ShelfLayoutManager* shelf_layout_manager = |
416 shelf_widget->shelf_layout_manager(); | 418 shelf_widget->shelf_layout_manager(); |
417 ASSERT_NE(nullptr, shelf_layout_manager); | 419 ASSERT_NE(nullptr, shelf_layout_manager); |
418 | 420 |
419 EXPECT_EQ(initial_alignment, shelf_layout_manager->GetAlignment()); | 421 EXPECT_EQ(initial_alignment, shelf->alignment()); |
420 EXPECT_EQ(initial_auto_hide_behavior, | 422 EXPECT_EQ(initial_auto_hide_behavior, shelf->auto_hide_behavior()); |
421 shelf_layout_manager->auto_hide_behavior()); | |
422 EXPECT_EQ(expected_shelf_visibility_state, | 423 EXPECT_EQ(expected_shelf_visibility_state, |
423 shelf_layout_manager->visibility_state()); | 424 shelf_layout_manager->visibility_state()); |
424 EXPECT_EQ(expected_shelf_auto_hide_state, | 425 EXPECT_EQ(expected_shelf_auto_hide_state, |
425 shelf_layout_manager->auto_hide_state()); | 426 shelf_layout_manager->auto_hide_state()); |
426 } | 427 } |
427 | 428 |
428 private: | 429 private: |
429 ShelfWidgetTestShellDelegate* shelf_widget_test_shell_delegate_; | 430 ShelfWidgetTestShellDelegate* shelf_widget_test_shell_delegate_; |
430 DISALLOW_COPY_AND_ASSIGN(ShelfWidgetTestWithDelegate); | 431 DISALLOW_COPY_AND_ASSIGN(ShelfWidgetTestWithDelegate); |
431 }; | 432 }; |
(...skipping 22 matching lines...) Expand all Loading... |
454 } | 455 } |
455 | 456 |
456 TEST_F(ShelfWidgetTestWithDelegate, CreateLockedShelf) { | 457 TEST_F(ShelfWidgetTestWithDelegate, CreateLockedShelf) { |
457 // The auto hide state 'HIDDEN' is returned for any non-auto-hide behavior. | 458 // The auto hide state 'HIDDEN' is returned for any non-auto-hide behavior. |
458 TestCreateShelfWithInitialValues(wm::SHELF_ALIGNMENT_BOTTOM_LOCKED, | 459 TestCreateShelfWithInitialValues(wm::SHELF_ALIGNMENT_BOTTOM_LOCKED, |
459 SHELF_AUTO_HIDE_BEHAVIOR_NEVER, | 460 SHELF_AUTO_HIDE_BEHAVIOR_NEVER, |
460 SHELF_VISIBLE, SHELF_AUTO_HIDE_HIDDEN); | 461 SHELF_VISIBLE, SHELF_AUTO_HIDE_HIDDEN); |
461 } | 462 } |
462 | 463 |
463 } // namespace ash | 464 } // namespace ash |
OLD | NEW |