Index: chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm |
diff --git a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm |
index 8cf35cdf9a4a828002a8d9f3126f82719567fef8..47f795edf3d55dcf6cecc0e88c1599affdcd062e 100644 |
--- a/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm |
+++ b/chrome/browser/renderer_host/chrome_render_widget_host_view_mac_history_swiper.mm |
@@ -43,12 +43,17 @@ |
return NO; |
} |
-- (void)gotWheelEventConsumed:(BOOL)consumed { |
- if (consumed) { |
- gestureHandledState_ = history_swiper::kHandled; |
- } else if (gestureHandledState_ == history_swiper::kPending) { |
- gestureHandledState_ = history_swiper::kUnhandled; |
- } |
+- (void)gotUnhandledWheelEvent { |
+ gotUnhandledWheelEvent_ = YES; |
+} |
+ |
+- (void)scrollOffsetPinnedToLeft:(BOOL)left toRight:(BOOL)right { |
+ isPinnedLeft_ = left; |
+ isPinnedRight_ = right; |
+} |
+ |
+- (void)setHasHorizontalScrollbar:(BOOL)hasHorizontalScrollbar { |
+ hasHorizontalScrollbar_ = hasHorizontalScrollbar; |
} |
- (BOOL)canRubberbandLeft:(NSView*)view { |
@@ -88,7 +93,7 @@ |
// Reset state pertaining to previous gestures. |
historySwipeCancelled_ = NO; |
gestureStartPointValid_ = NO; |
- gestureHandledState_ = history_swiper::kPending; |
+ gotUnhandledWheelEvent_ = NO; |
receivedTouch_ = NO; |
mouseScrollDelta_ = NSZeroSize; |
} |
@@ -337,6 +342,14 @@ |
[self browserCanNavigateInDirection:direction event:theEvent]; |
if (!browserCanMove) |
return NO; |
+ |
+ if (isRightScroll) { |
+ if (hasHorizontalScrollbar_ && !isPinnedRight_) |
+ return NO; |
+ } else { |
+ if (hasHorizontalScrollbar_ && !isPinnedLeft_) |
+ return NO; |
+ } |
[self initiateMagicMouseHistorySwipe:isRightScroll event:theEvent]; |
return YES; |
@@ -474,9 +487,9 @@ |
if (![delegate_ shouldAllowHistorySwiping]) |
return NO; |
- // Only enable history swiping if blink has never handled any of the events in |
- // the gesture. |
- if (gestureHandledState_ != history_swiper::kUnhandled) |
+ // Don't even consider enabling history swiping until blink has decided it is |
+ // not going to handle the event. |
+ if (!gotUnhandledWheelEvent_) |
return NO; |
// If the window has a horizontal scroll bar, sometimes Cocoa gets confused |
@@ -512,6 +525,14 @@ |
if (inverted) |
isRightScroll = !isRightScroll; |
+ if (isRightScroll) { |
+ if (hasHorizontalScrollbar_ && !isPinnedRight_) |
+ return NO; |
+ } else { |
+ if (hasHorizontalScrollbar_ && !isPinnedLeft_) |
+ return NO; |
+ } |
+ |
history_swiper::NavigationDirection direction = |
isRightScroll ? history_swiper::kForwards : history_swiper::kBackwards; |
BOOL browserCanMove = |