Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: ash/wm/immersive_fullscreen_controller.cc

Issue 97943002: Enable revealing the top-of-window views in immersive fullscreen when the owning window is inactive (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "ash/wm/immersive_fullscreen_controller.h" 5 #include "ash/wm/immersive_fullscreen_controller.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/wm/window_state.h" 10 #include "ash/wm/window_state.h"
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 // Reset the located event and the focus revealed locks so that they do not 280 // Reset the located event and the focus revealed locks so that they do not
281 // affect whether the top-of-window views are hidden. 281 // affect whether the top-of-window views are hidden.
282 located_event_revealed_lock_.reset(); 282 located_event_revealed_lock_.reset();
283 focus_revealed_lock_.reset(); 283 focus_revealed_lock_.reset();
284 284
285 // Try doing the animation. 285 // Try doing the animation.
286 MaybeEndReveal(ANIMATE_SLOW); 286 MaybeEndReveal(ANIMATE_SLOW);
287 287
288 if (reveal_state_ == REVEALED) { 288 if (reveal_state_ == REVEALED) {
289 // Reveal was unsuccessful. Reacquire the revealed locks if appropriate. 289 // Reveal was unsuccessful. Reacquire the revealed locks if appropriate.
290 UpdateLocatedEventRevealedLock(NULL, ALLOW_REVEAL_WHILE_CLOSING_NO); 290 UpdateLocatedEventRevealedLock(NULL);
291 UpdateFocusRevealedLock(); 291 UpdateFocusRevealedLock();
292 } 292 }
293 } else { 293 } else {
294 // Stop cursor-at-top tracking. 294 // Stop cursor-at-top tracking.
295 top_edge_hover_timer_.Stop(); 295 top_edge_hover_timer_.Stop();
296 reveal_state_ = CLOSED; 296 reveal_state_ = CLOSED;
297 297
298 delegate_->OnImmersiveFullscreenExited(); 298 delegate_->OnImmersiveFullscreenExited();
299 } 299 }
300 } 300 }
(...skipping 24 matching lines...) Expand all
325 std::vector<gfx::Rect> bounds_in_screen( 325 std::vector<gfx::Rect> bounds_in_screen(
326 delegate_->GetVisibleBoundsInScreen()); 326 delegate_->GetVisibleBoundsInScreen());
327 DCHECK(!bounds_in_screen.empty()); 327 DCHECK(!bounds_in_screen.empty());
328 int bottommost_in_screen = bounds_in_screen[0].bottom(); 328 int bottommost_in_screen = bounds_in_screen[0].bottom();
329 for (size_t i = 1; i < bounds_in_screen.size(); ++i) { 329 for (size_t i = 1; i < bounds_in_screen.size(); ++i) {
330 if (bounds_in_screen[i].bottom() > bottommost_in_screen) 330 if (bounds_in_screen[i].bottom() > bottommost_in_screen)
331 bottommost_in_screen = bounds_in_screen[i].bottom(); 331 bottommost_in_screen = bounds_in_screen[i].bottom();
332 } 332 }
333 gfx::Point cursor_pos(0, bottommost_in_screen + 100); 333 gfx::Point cursor_pos(0, bottommost_in_screen + 100);
334 aura::Env::GetInstance()->set_last_mouse_location(cursor_pos); 334 aura::Env::GetInstance()->set_last_mouse_location(cursor_pos);
335 UpdateLocatedEventRevealedLock(NULL, ALLOW_REVEAL_WHILE_CLOSING_NO); 335 UpdateLocatedEventRevealedLock(NULL);
336 } 336 }
337 337
338 //////////////////////////////////////////////////////////////////////////////// 338 ////////////////////////////////////////////////////////////////////////////////
339 // ui::EventHandler overrides: 339 // ui::EventHandler overrides:
340 340
341 void ImmersiveFullscreenController::OnMouseEvent(ui::MouseEvent* event) { 341 void ImmersiveFullscreenController::OnMouseEvent(ui::MouseEvent* event) {
342 if (!enabled_) 342 if (!enabled_)
343 return; 343 return;
344 344
345 if (event->type() != ui::ET_MOUSE_MOVED && 345 if (event->type() != ui::ET_MOUSE_MOVED &&
346 event->type() != ui::ET_MOUSE_PRESSED && 346 event->type() != ui::ET_MOUSE_PRESSED &&
347 event->type() != ui::ET_MOUSE_RELEASED && 347 event->type() != ui::ET_MOUSE_RELEASED &&
348 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { 348 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
349 return; 349 return;
350 } 350 }
351 351
352 // Mouse hover should not initiate revealing the top-of-window views while 352 // Mouse hover can initiate revealing the top-of-window views while |widget_|
353 // |native_window_| is inactive. 353 // is inactive.
354 if (!views::Widget::GetWidgetForNativeWindow(native_window_)->IsActive())
355 return;
356 354
357 // Mouse hover should not initiate revealing the top-of-window views while 355 if (reveal_state_ == SLIDING_OPEN || reveal_state_ == REVEALED) {
358 // a window has mouse capture. 356 top_edge_hover_timer_.Stop();
359 if (aura::client::GetCaptureWindow(native_window_)) 357 UpdateLocatedEventRevealedLock(event);
360 return; 358 } else if (event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
361 359 // Trigger a reveal if the cursor pauses at the top of the screen for a
362 if (IsRevealed()) 360 // while.
363 UpdateLocatedEventRevealedLock(event, ALLOW_REVEAL_WHILE_CLOSING_NO);
364
365 // Trigger a reveal if the cursor pauses at the top of the screen for a
366 // while.
367 if (event->type() != ui::ET_MOUSE_CAPTURE_CHANGED)
368 UpdateTopEdgeHoverTimer(event); 361 UpdateTopEdgeHoverTimer(event);
362 }
369 } 363 }
370 364
371 void ImmersiveFullscreenController::OnTouchEvent(ui::TouchEvent* event) { 365 void ImmersiveFullscreenController::OnTouchEvent(ui::TouchEvent* event) {
372 if (!enabled_ || event->type() != ui::ET_TOUCH_PRESSED) 366 if (!enabled_ || event->type() != ui::ET_TOUCH_PRESSED)
373 return; 367 return;
374 368
375 UpdateLocatedEventRevealedLock(event, ALLOW_REVEAL_WHILE_CLOSING_NO); 369 // Touch should not initiate revealing the top-of-window views while |widget_|
370 // is inactive.
371 if (!widget_->IsActive())
372 return;
373
374 UpdateLocatedEventRevealedLock(event);
376 } 375 }
377 376
378 void ImmersiveFullscreenController::OnGestureEvent(ui::GestureEvent* event) { 377 void ImmersiveFullscreenController::OnGestureEvent(ui::GestureEvent* event) {
379 if (!enabled_) 378 if (!enabled_)
380 return; 379 return;
381 380
382 // Touch gestures should not initiate revealing the top-of-window views while 381 // Touch gestures should not initiate revealing the top-of-window views while
383 // |native_window_| is inactive. 382 // |widget_| is inactive.
384 if (!views::Widget::GetWidgetForNativeWindow(native_window_)->IsActive()) 383 if (!widget_->IsActive())
385 return; 384 return;
386 385
387 switch (event->type()) { 386 switch (event->type()) {
388 case ui::ET_GESTURE_SCROLL_BEGIN: 387 case ui::ET_GESTURE_SCROLL_BEGIN:
389 if (ShouldHandleGestureEvent(GetEventLocationInScreen(*event))) { 388 if (ShouldHandleGestureEvent(GetEventLocationInScreen(*event))) {
390 gesture_begun_ = true; 389 gesture_begun_ = true;
391 event->SetHandled(); 390 event->SetHandled();
392 } 391 }
393 break; 392 break;
394 case ui::ET_GESTURE_SCROLL_UPDATE: 393 case ui::ET_GESTURE_SCROLL_UPDATE:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 native_window_ = NULL; 428 native_window_ = NULL;
430 429
431 // Set |enabled_| to false such that any calls to MaybeStartReveal() and 430 // Set |enabled_| to false such that any calls to MaybeStartReveal() and
432 // MaybeEndReveal() have no effect. 431 // MaybeEndReveal() have no effect.
433 enabled_ = false; 432 enabled_ = false;
434 } 433 }
435 434
436 void ImmersiveFullscreenController::OnWidgetActivationChanged( 435 void ImmersiveFullscreenController::OnWidgetActivationChanged(
437 views::Widget* widget, 436 views::Widget* widget,
438 bool active) { 437 bool active) {
439 // Mouse hover should not initiate revealing the top-of-window views while
440 // |native_window_| is inactive.
441 top_edge_hover_timer_.Stop();
442
443 UpdateFocusRevealedLock(); 438 UpdateFocusRevealedLock();
444
445 // Allow the top-of-window views to stay revealed if all of the revealed locks
446 // were released in the process of activating |widget| but the mouse is still
447 // hovered above the top-of-window views. For instance, if the bubble which
448 // has been keeping the top-of-window views revealed is hidden but the mouse
449 // is hovered above the top-of-window views, the top-of-window views should
450 // stay revealed. We cannot call UpdateLocatedEventRevealedLock() from
451 // BubbleManager::UpdateRevealedLock() because |widget| is not yet active
452 // at that time.
453 UpdateLocatedEventRevealedLock(NULL, ALLOW_REVEAL_WHILE_CLOSING_YES);
454 } 439 }
455 440
456 //////////////////////////////////////////////////////////////////////////////// 441 ////////////////////////////////////////////////////////////////////////////////
457 // gfx::AnimationDelegate overrides: 442 // gfx::AnimationDelegate overrides:
458 443
459 void ImmersiveFullscreenController::AnimationEnded( 444 void ImmersiveFullscreenController::AnimationEnded(
460 const gfx::Animation* animation) { 445 const gfx::Animation* animation) {
461 if (reveal_state_ == SLIDING_OPEN) { 446 if (reveal_state_ == SLIDING_OPEN) {
462 OnSlideOpenAnimationCompleted(); 447 OnSlideOpenAnimationCompleted();
463 } else if (reveal_state_ == SLIDING_CLOSED) { 448 } else if (reveal_state_ == SLIDING_CLOSED) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 } 498 }
514 499
515 //////////////////////////////////////////////////////////////////////////////// 500 ////////////////////////////////////////////////////////////////////////////////
516 // private: 501 // private:
517 502
518 void ImmersiveFullscreenController::EnableWindowObservers(bool enable) { 503 void ImmersiveFullscreenController::EnableWindowObservers(bool enable) {
519 if (observers_enabled_ == enable) 504 if (observers_enabled_ == enable)
520 return; 505 return;
521 observers_enabled_ = enable; 506 observers_enabled_ = enable;
522 507
523 views::Widget* widget = 508 views::FocusManager* focus_manager = widget_->GetFocusManager();
524 views::Widget::GetWidgetForNativeWindow(native_window_);
525 views::FocusManager* focus_manager = widget->GetFocusManager();
526 509
527 if (enable) { 510 if (enable) {
528 widget->AddObserver(this); 511 widget_->AddObserver(this);
529 focus_manager->AddFocusChangeListener(this); 512 focus_manager->AddFocusChangeListener(this);
530 Shell::GetInstance()->AddPreTargetHandler(this); 513 Shell::GetInstance()->AddPreTargetHandler(this);
531 native_window_->AddObserver(this); 514 native_window_->AddObserver(this);
532 515
533 RecreateBubbleManager(); 516 RecreateBubbleManager();
534 } else { 517 } else {
535 widget->RemoveObserver(this); 518 widget_->RemoveObserver(this);
536 focus_manager->RemoveFocusChangeListener(this); 519 focus_manager->RemoveFocusChangeListener(this);
537 Shell::GetInstance()->RemovePreTargetHandler(this); 520 Shell::GetInstance()->RemovePreTargetHandler(this);
538 native_window_->RemoveObserver(this); 521 native_window_->RemoveObserver(this);
539 522
540 // We have stopped observing whether transient children are added or removed 523 // We have stopped observing whether transient children are added or removed
541 // to |native_window_|. The set of bubbles that BubbleManager is observing 524 // to |native_window_|. The set of bubbles that BubbleManager is observing
542 // will become stale really quickly. Destroy BubbleManager and recreate it 525 // will become stale really quickly. Destroy BubbleManager and recreate it
543 // when we start observing |native_window_| again. 526 // when we start observing |native_window_| again.
544 bubble_manager_.reset(); 527 bubble_manager_.reset();
545 528
546 animation_->Stop(); 529 animation_->Stop();
547 } 530 }
548 } 531 }
549 532
550 void ImmersiveFullscreenController::UpdateTopEdgeHoverTimer( 533 void ImmersiveFullscreenController::UpdateTopEdgeHoverTimer(
551 ui::MouseEvent* event) { 534 ui::MouseEvent* event) {
552 DCHECK(enabled_); 535 DCHECK(enabled_);
553 // Stop the timer if the top-of-window views are already revealed. 536 DCHECK(reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED);
554 if (reveal_state_ == SLIDING_OPEN || reveal_state_ == REVEALED) { 537
555 top_edge_hover_timer_.Stop(); 538 // Check whether |native_window_| is the event target's parent window instead
539 // of checking for activation. This allows the timer to be started when
540 // |widget_| is inactive but prevents starting the timer if the mouse is over
541 // a portion of the top edge obscured by an unrelated widget.
542 if (!top_edge_hover_timer_.IsRunning() &&
543 !native_window_->Contains(static_cast<aura::Window*>(event->target()))) {
pkotwicz 2013/12/01 22:57:20 I check whether |top_edge_hover_timer_| is running
556 return; 544 return;
557 } 545 }
558 546
547 // Mouse hover should not initiate revealing the top-of-window views while a
548 // window has mouse capture.
549 if (aura::client::GetCaptureWindow(native_window_))
550 return;
551
559 gfx::Point location_in_screen = GetEventLocationInScreen(*event); 552 gfx::Point location_in_screen = GetEventLocationInScreen(*event);
560 if (ShouldIgnoreMouseEventAtLocation(location_in_screen)) 553 if (ShouldIgnoreMouseEventAtLocation(location_in_screen))
561 return; 554 return;
562 555
563 // Stop the timer if the cursor left the top edge or is on a different 556 // Stop the timer if the cursor left the top edge or is on a different
564 // display. 557 // display.
565 gfx::Rect hit_bounds_in_screen = GetDisplayBoundsInScreen(native_window_); 558 gfx::Rect hit_bounds_in_screen = GetDisplayBoundsInScreen(native_window_);
566 hit_bounds_in_screen.set_height(kMouseRevealBoundsHeight); 559 hit_bounds_in_screen.set_height(kMouseRevealBoundsHeight);
567 if (!hit_bounds_in_screen.Contains(location_in_screen)) { 560 if (!hit_bounds_in_screen.Contains(location_in_screen)) {
568 top_edge_hover_timer_.Stop(); 561 top_edge_hover_timer_.Stop();
(...skipping 15 matching lines...) Expand all
584 // Timer is stopped when |this| is destroyed, hence Unretained() is safe. 577 // Timer is stopped when |this| is destroyed, hence Unretained() is safe.
585 top_edge_hover_timer_.Start( 578 top_edge_hover_timer_.Start(
586 FROM_HERE, 579 FROM_HERE,
587 base::TimeDelta::FromMilliseconds(kMouseRevealDelayMs), 580 base::TimeDelta::FromMilliseconds(kMouseRevealDelayMs),
588 base::Bind( 581 base::Bind(
589 &ImmersiveFullscreenController::AcquireLocatedEventRevealedLock, 582 &ImmersiveFullscreenController::AcquireLocatedEventRevealedLock,
590 base::Unretained(this))); 583 base::Unretained(this)));
591 } 584 }
592 585
593 void ImmersiveFullscreenController::UpdateLocatedEventRevealedLock( 586 void ImmersiveFullscreenController::UpdateLocatedEventRevealedLock(
594 ui::LocatedEvent* event, 587 ui::LocatedEvent* event) {
595 AllowRevealWhileClosing allow_reveal_while_closing) {
596 if (!enabled_) 588 if (!enabled_)
597 return; 589 return;
598 DCHECK(!event || event->IsMouseEvent() || event->IsTouchEvent()); 590 DCHECK(!event || event->IsMouseEvent() || event->IsTouchEvent());
599 591
600 // Neither the mouse nor touch can initiate a reveal when the top-of-window 592 // Neither the mouse nor touch can initiate a reveal when the top-of-window
601 // views are sliding closed or are closed with the following exceptions: 593 // views are sliding closed or are closed with the following exceptions:
602 // - Hovering at y = 0 which is handled in OnMouseEvent(). 594 // - Hovering at y = 0 which is handled in OnMouseEvent().
603 // - Doing a SWIPE_OPEN edge gesture which is handled in OnGestureEvent(). 595 // - Doing a SWIPE_OPEN edge gesture which is handled in OnGestureEvent().
604 if (reveal_state_ == CLOSED || 596 if (reveal_state_ == CLOSED || reveal_state_ == SLIDING_CLOSED)
605 (reveal_state_ == SLIDING_CLOSED &&
606 allow_reveal_while_closing == ALLOW_REVEAL_WHILE_CLOSING_NO)) {
607 return; 597 return;
608 }
609 598
610 // Neither the mouse nor touch should keep the top-of-window views revealed if 599 // For the sake of simplicity, ignore |widget_|'s activation in computing
611 // |native_window_| is not active. 600 // whether the top-of-window views should stay revealed. Ideally, the
612 if (!views::Widget::GetWidgetForNativeWindow(native_window_)->IsActive()) { 601 // top-of-window views would stay revealed only when the mouse cursor is
613 located_event_revealed_lock_.reset(); 602 // hovered above a non-obscured portion of the top-of-window views. The
614 return; 603 // top-of-window views may be partially obscured when |widget_| is inactive.
pkotwicz 2013/12/01 22:57:20 Doing the right thing is complicated by the maximi
615 }
616 604
617 // Ignore all events while a window has capture. This keeps the top-of-window 605 // Ignore all events while a window has capture. This keeps the top-of-window
618 // views revealed during a drag. 606 // views revealed during a drag.
619 if (aura::client::GetCaptureWindow(native_window_)) 607 if (aura::client::GetCaptureWindow(native_window_))
620 return; 608 return;
621 609
622 gfx::Point location_in_screen; 610 gfx::Point location_in_screen;
623 if (event && event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) { 611 if (event && event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) {
624 location_in_screen = GetEventLocationInScreen(*event); 612 location_in_screen = GetEventLocationInScreen(*event);
625 } else { 613 } else {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 // |ImmersiveFullscreenController::animations_disabled_for_test_| is true. 660 // |ImmersiveFullscreenController::animations_disabled_for_test_| is true.
673 if (!located_event_revealed_lock_.get()) 661 if (!located_event_revealed_lock_.get())
674 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES)); 662 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES));
675 } 663 }
676 664
677 void ImmersiveFullscreenController::UpdateFocusRevealedLock() { 665 void ImmersiveFullscreenController::UpdateFocusRevealedLock() {
678 if (!enabled_) 666 if (!enabled_)
679 return; 667 return;
680 668
681 bool hold_lock = false; 669 bool hold_lock = false;
682 views::Widget* widget = 670 if (widget_->IsActive()) {
683 views::Widget::GetWidgetForNativeWindow(native_window_); 671 views::View* focused_view = widget_->GetFocusManager()->GetFocusedView();
684 if (widget->IsActive()) {
685 views::View* focused_view = widget->GetFocusManager()->GetFocusedView();
686 if (top_container_->Contains(focused_view)) 672 if (top_container_->Contains(focused_view))
687 hold_lock = true; 673 hold_lock = true;
688 } else { 674 } else {
689 aura::Window* active_window = aura::client::GetActivationClient( 675 aura::Window* active_window = aura::client::GetActivationClient(
690 native_window_->GetRootWindow())->GetActiveWindow(); 676 native_window_->GetRootWindow())->GetActiveWindow();
691 views::BubbleDelegateView* bubble_delegate = 677 views::BubbleDelegateView* bubble_delegate =
692 AsBubbleDelegate(active_window); 678 AsBubbleDelegate(active_window);
693 if (bubble_delegate && bubble_delegate->anchor_widget()) { 679 if (bubble_delegate && bubble_delegate->anchor_widget()) {
694 // BubbleManager will already have locked the top-of-window views if the 680 // BubbleManager will already have locked the top-of-window views if the
695 // bubble is anchored to a child of |top_container_|. Don't acquire 681 // bubble is anchored to a child of |top_container_|. Don't acquire
(...skipping 26 matching lines...) Expand all
722 } 708 }
723 } 709 }
724 710
725 bool ImmersiveFullscreenController::UpdateRevealedLocksForSwipe( 711 bool ImmersiveFullscreenController::UpdateRevealedLocksForSwipe(
726 SwipeType swipe_type) { 712 SwipeType swipe_type) {
727 if (!enabled_ || swipe_type == SWIPE_NONE) 713 if (!enabled_ || swipe_type == SWIPE_NONE)
728 return false; 714 return false;
729 715
730 // Swipes while |native_window_| is inactive should have been filtered out in 716 // Swipes while |native_window_| is inactive should have been filtered out in
731 // OnGestureEvent(). 717 // OnGestureEvent().
732 DCHECK(views::Widget::GetWidgetForNativeWindow(native_window_)->IsActive()); 718 DCHECK(widget_->IsActive());
733 719
734 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) { 720 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) {
735 if (swipe_type == SWIPE_OPEN && !located_event_revealed_lock_.get()) { 721 if (swipe_type == SWIPE_OPEN && !located_event_revealed_lock_.get()) {
736 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES)); 722 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES));
737 return true; 723 return true;
738 } 724 }
739 } else { 725 } else {
740 if (swipe_type == SWIPE_CLOSE) { 726 if (swipe_type == SWIPE_CLOSE) {
741 // Attempt to end the reveal. If other code is holding onto a lock, the 727 // Attempt to end the reveal. If other code is holding onto a lock, the
742 // attempt will be unsuccessful. 728 // attempt will be unsuccessful.
743 located_event_revealed_lock_.reset(); 729 located_event_revealed_lock_.reset();
744 focus_revealed_lock_.reset(); 730 focus_revealed_lock_.reset();
745 731
746 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) 732 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED)
747 return true; 733 return true;
748 734
749 // Ending the reveal was unsuccessful. Reaquire the locks if appropriate. 735 // Ending the reveal was unsuccessful. Reaquire the locks if appropriate.
750 UpdateLocatedEventRevealedLock(NULL, ALLOW_REVEAL_WHILE_CLOSING_NO); 736 UpdateLocatedEventRevealedLock(NULL);
751 UpdateFocusRevealedLock(); 737 UpdateFocusRevealedLock();
752 } 738 }
753 } 739 }
754 return false; 740 return false;
755 } 741 }
756 742
757 int ImmersiveFullscreenController::GetAnimationDuration(Animate animate) const { 743 int ImmersiveFullscreenController::GetAnimationDuration(Animate animate) const {
758 switch (animate) { 744 switch (animate) {
759 case ANIMATE_NO: 745 case ANIMATE_NO:
760 return 0; 746 return 0;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 } 787 }
802 } 788 }
803 789
804 void ImmersiveFullscreenController::OnSlideOpenAnimationCompleted() { 790 void ImmersiveFullscreenController::OnSlideOpenAnimationCompleted() {
805 DCHECK_EQ(SLIDING_OPEN, reveal_state_); 791 DCHECK_EQ(SLIDING_OPEN, reveal_state_);
806 reveal_state_ = REVEALED; 792 reveal_state_ = REVEALED;
807 delegate_->SetVisibleFraction(1); 793 delegate_->SetVisibleFraction(1);
808 794
809 // The user may not have moved the mouse since the reveal was initiated. 795 // The user may not have moved the mouse since the reveal was initiated.
810 // Update the revealed lock to reflect the mouse's current state. 796 // Update the revealed lock to reflect the mouse's current state.
811 UpdateLocatedEventRevealedLock(NULL, ALLOW_REVEAL_WHILE_CLOSING_NO); 797 UpdateLocatedEventRevealedLock(NULL);
812 } 798 }
813 799
814 void ImmersiveFullscreenController::MaybeEndReveal(Animate animate) { 800 void ImmersiveFullscreenController::MaybeEndReveal(Animate animate) {
815 if (!enabled_ || revealed_lock_count_ != 0) 801 if (!enabled_ || revealed_lock_count_ != 0)
816 return; 802 return;
817 803
818 if (animations_disabled_for_test_) 804 if (animations_disabled_for_test_)
819 animate = ANIMATE_NO; 805 animate = ANIMATE_NO;
820 806
821 // Callers with ANIMATE_NO expect this function to synchronously close the 807 // Callers with ANIMATE_NO expect this function to synchronously close the
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
873 // user to overshoot the top of the bottom display and still reveal the 859 // user to overshoot the top of the bottom display and still reveal the
874 // top-of-window views. 860 // top-of-window views.
875 gfx::Rect dead_region = GetDisplayBoundsInScreen(native_window_); 861 gfx::Rect dead_region = GetDisplayBoundsInScreen(native_window_);
876 dead_region.set_y(dead_region.y() - kHeightOfDeadRegionAboveTopContainer); 862 dead_region.set_y(dead_region.y() - kHeightOfDeadRegionAboveTopContainer);
877 dead_region.set_height(kHeightOfDeadRegionAboveTopContainer); 863 dead_region.set_height(kHeightOfDeadRegionAboveTopContainer);
878 return dead_region.Contains(location); 864 return dead_region.Contains(location);
879 } 865 }
880 866
881 bool ImmersiveFullscreenController::ShouldHandleGestureEvent( 867 bool ImmersiveFullscreenController::ShouldHandleGestureEvent(
882 const gfx::Point& location) const { 868 const gfx::Point& location) const {
869 DCHECK(widget_->IsActive());
883 if (reveal_state_ == REVEALED) { 870 if (reveal_state_ == REVEALED) {
884 std::vector<gfx::Rect> hit_bounds_in_screen( 871 std::vector<gfx::Rect> hit_bounds_in_screen(
885 delegate_->GetVisibleBoundsInScreen()); 872 delegate_->GetVisibleBoundsInScreen());
886 for (size_t i = 0; i < hit_bounds_in_screen.size(); ++i) { 873 for (size_t i = 0; i < hit_bounds_in_screen.size(); ++i) {
887 if (hit_bounds_in_screen[i].Contains(location)) 874 if (hit_bounds_in_screen[i].Contains(location))
888 return true; 875 return true;
889 } 876 }
890 return false; 877 return false;
891 } 878 }
892 879
(...skipping 26 matching lines...) Expand all
919 AsBubbleDelegate(transient_child); 906 AsBubbleDelegate(transient_child);
920 if (bubble_delegate && 907 if (bubble_delegate &&
921 bubble_delegate->GetAnchorView() && 908 bubble_delegate->GetAnchorView() &&
922 top_container_->Contains(bubble_delegate->GetAnchorView())) { 909 top_container_->Contains(bubble_delegate->GetAnchorView())) {
923 bubble_manager_->StartObserving(transient_child); 910 bubble_manager_->StartObserving(transient_child);
924 } 911 }
925 } 912 }
926 } 913 }
927 914
928 } // namespace ash 915 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/immersive_fullscreen_controller.h ('k') | ash/wm/immersive_fullscreen_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698