Index: athena/wm/bezel_controller.cc |
diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc |
index c4a53a04129c1e0ab5f3c1ca4878a5a3d5d34d8a..9ac2a030f494f48cb3c01f875d53d6e8715c423a 100644 |
--- a/athena/wm/bezel_controller.cc |
+++ b/athena/wm/bezel_controller.cc |
@@ -83,15 +83,21 @@ void BezelController::SetState(BezelController::State state, |
if (!left_right_delegate_ || state == state_) |
return; |
- if (state == BEZEL_SCROLLING_TWO_FINGERS) |
- left_right_delegate_->BezelScrollBegin(scroll_bezel_, scroll_delta); |
- else if (state_ == BEZEL_SCROLLING_TWO_FINGERS) |
- left_right_delegate_->BezelScrollEnd(); |
+ State old_state = state_; |
state_ = state; |
+ |
if (state == NONE) { |
scroll_bezel_ = BEZEL_NONE; |
scroll_target_ = NULL; |
} |
+ |
+ if (state == BEZEL_SCROLLING_TWO_FINGERS) { |
+ left_right_delegate_->BezelScrollBegin(scroll_bezel_, scroll_delta); |
+ } else if (old_state == BEZEL_SCROLLING_TWO_FINGERS) { |
+ // If BezelScrollEnd() hides |scroll_target_|, ET_GESTURE_END is dispatched |
+ // and we get a reentrant call to SetState(). |
+ left_right_delegate_->BezelScrollEnd(); |
+ } |
} |
void BezelController::OnGestureEvent(ui::GestureEvent* event) { |