Index: athena/wm/bezel_controller.cc |
diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc |
index a4e815602e7b32ecee1667e88caf0962f71199d6..fbf9f92fc4eda5e509aa5ce6e5628cdec60c079f 100644 |
--- a/athena/wm/bezel_controller.cc |
+++ b/athena/wm/bezel_controller.cc |
@@ -68,15 +68,21 @@ void BezelController::SetState(BezelController::State state, |
if (!left_right_delegate_ || state == state_) |
return; |
- if (state == BEZEL_SCROLLING_TWO_FINGERS) |
- left_right_delegate_->ScrollBegin(scroll_bezel_, scroll_delta); |
- else if (state_ == BEZEL_SCROLLING_TWO_FINGERS) |
- left_right_delegate_->ScrollEnd(); |
+ 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_->ScrollBegin(scroll_bezel_, scroll_delta); |
+ } else if (old_state == BEZEL_SCROLLING_TWO_FINGERS) { |
+ // If ScrollEnd() hides |scroll_target_|, ET_GESTURE_END is dispatched |
+ // and we get a reentrant call to SetState(). |
+ left_right_delegate_->ScrollEnd(); |
+ } |
} |
// Only implemented for LEFT and RIGHT bezels ATM. |