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 "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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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); | 290 UpdateLocatedEventRevealedLock(NULL); |
291 UpdateFocusRevealedLock(); | 291 UpdateFocusRevealedLock(); |
| 292 } else { |
| 293 // Clearing focus is important because it closes focus-related popups like |
| 294 // the touch selection handles. |
| 295 widget_->GetFocusManager()->ClearFocus(); |
292 } | 296 } |
293 } else { | 297 } else { |
294 // Stop cursor-at-top tracking. | 298 // Stop cursor-at-top tracking. |
295 top_edge_hover_timer_.Stop(); | 299 top_edge_hover_timer_.Stop(); |
296 reveal_state_ = CLOSED; | 300 reveal_state_ = CLOSED; |
297 | 301 |
298 delegate_->OnImmersiveFullscreenExited(); | 302 delegate_->OnImmersiveFullscreenExited(); |
299 } | 303 } |
300 } | 304 } |
301 | 305 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 | 384 |
381 // Touch gestures should not initiate revealing the top-of-window views while | 385 // Touch gestures should not initiate revealing the top-of-window views while |
382 // |widget_| is inactive. | 386 // |widget_| is inactive. |
383 if (!widget_->IsActive()) | 387 if (!widget_->IsActive()) |
384 return; | 388 return; |
385 | 389 |
386 switch (event->type()) { | 390 switch (event->type()) { |
387 case ui::ET_GESTURE_SCROLL_BEGIN: | 391 case ui::ET_GESTURE_SCROLL_BEGIN: |
388 if (ShouldHandleGestureEvent(GetEventLocationInScreen(*event))) { | 392 if (ShouldHandleGestureEvent(GetEventLocationInScreen(*event))) { |
389 gesture_begun_ = true; | 393 gesture_begun_ = true; |
390 event->SetHandled(); | 394 // Do not consume the event. Otherwise, we end up consuming all |
| 395 // ui::ET_GESTURE_SCROLL_BEGIN events in the top-of-window views |
| 396 // when the top-of-window views are revealed. |
391 } | 397 } |
392 break; | 398 break; |
393 case ui::ET_GESTURE_SCROLL_UPDATE: | 399 case ui::ET_GESTURE_SCROLL_UPDATE: |
394 if (gesture_begun_) { | 400 if (gesture_begun_) { |
395 if (UpdateRevealedLocksForSwipe(GetSwipeType(event))) | 401 if (UpdateRevealedLocksForSwipe(GetSwipeType(event))) |
396 event->SetHandled(); | 402 event->SetHandled(); |
397 gesture_begun_ = false; | 403 gesture_begun_ = false; |
398 } | 404 } |
399 break; | 405 break; |
400 case ui::ET_GESTURE_SCROLL_END: | 406 case ui::ET_GESTURE_SCROLL_END: |
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
722 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES)); | 728 located_event_revealed_lock_.reset(GetRevealedLock(ANIMATE_REVEAL_YES)); |
723 return true; | 729 return true; |
724 } | 730 } |
725 } else { | 731 } else { |
726 if (swipe_type == SWIPE_CLOSE) { | 732 if (swipe_type == SWIPE_CLOSE) { |
727 // Attempt to end the reveal. If other code is holding onto a lock, the | 733 // Attempt to end the reveal. If other code is holding onto a lock, the |
728 // attempt will be unsuccessful. | 734 // attempt will be unsuccessful. |
729 located_event_revealed_lock_.reset(); | 735 located_event_revealed_lock_.reset(); |
730 focus_revealed_lock_.reset(); | 736 focus_revealed_lock_.reset(); |
731 | 737 |
732 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) | 738 if (reveal_state_ == SLIDING_CLOSED || reveal_state_ == CLOSED) { |
| 739 widget_->GetFocusManager()->ClearFocus(); |
733 return true; | 740 return true; |
| 741 } |
734 | 742 |
735 // Ending the reveal was unsuccessful. Reaquire the locks if appropriate. | 743 // Ending the reveal was unsuccessful. Reaquire the locks if appropriate. |
736 UpdateLocatedEventRevealedLock(NULL); | 744 UpdateLocatedEventRevealedLock(NULL); |
737 UpdateFocusRevealedLock(); | 745 UpdateFocusRevealedLock(); |
738 } | 746 } |
739 } | 747 } |
740 return false; | 748 return false; |
741 } | 749 } |
742 | 750 |
743 int ImmersiveFullscreenController::GetAnimationDuration(Animate animate) const { | 751 int ImmersiveFullscreenController::GetAnimationDuration(Animate animate) const { |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
906 AsBubbleDelegate(transient_child); | 914 AsBubbleDelegate(transient_child); |
907 if (bubble_delegate && | 915 if (bubble_delegate && |
908 bubble_delegate->GetAnchorView() && | 916 bubble_delegate->GetAnchorView() && |
909 top_container_->Contains(bubble_delegate->GetAnchorView())) { | 917 top_container_->Contains(bubble_delegate->GetAnchorView())) { |
910 bubble_manager_->StartObserving(transient_child); | 918 bubble_manager_->StartObserving(transient_child); |
911 } | 919 } |
912 } | 920 } |
913 } | 921 } |
914 | 922 |
915 } // namespace ash | 923 } // namespace ash |
OLD | NEW |