Respect system setting for rubber-banding in ScrollAnimatorMac.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Aug 2012 17:59:26 +0000 (17:59 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 22 Aug 2012 17:59:26 +0000 (17:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=94356

Patch by Alexei Svitkine <asvitkine@chromium.org> on 2012-08-22
Reviewed by James Robinson.

Respects user defaults setting of NSScrollViewRubberbanding,
which controls rubber-banding in other Mac OS X applications.

If NSScrollViewRubberbanding is not set, defaults to enabling
rubber banding. Otherwise, rubber banding is disabled if the
value is 0 and enabled otherwise.

No new tests since the behavior depends on system settings.

* platform/mac/ScrollAnimatorMac.mm:
(WebCore):
(WebCore::rubberBandingEnabledForSystem):
(WebCore::ScrollAnimatorMac::handleWheelEvent):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@126321 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/mac/ScrollAnimatorMac.mm

index 9cafa67..27242d0 100644 (file)
@@ -1,3 +1,24 @@
+2012-08-22  Alexei Svitkine  <asvitkine@chromium.org>
+
+        Respect system setting for rubber-banding in ScrollAnimatorMac.
+        https://bugs.webkit.org/show_bug.cgi?id=94356
+
+        Reviewed by James Robinson.
+
+        Respects user defaults setting of NSScrollViewRubberbanding,
+        which controls rubber-banding in other Mac OS X applications.
+
+        If NSScrollViewRubberbanding is not set, defaults to enabling
+        rubber banding. Otherwise, rubber banding is disabled if the
+        value is 0 and enabled otherwise.
+
+        No new tests since the behavior depends on system settings.
+
+        * platform/mac/ScrollAnimatorMac.mm:
+        (WebCore):
+        (WebCore::rubberBandingEnabledForSystem):
+        (WebCore::ScrollAnimatorMac::handleWheelEvent):
+
 2012-08-22  James Robinson  <jamesr@chromium.org>
 
         [chromium/mac] Remove unnecessary checks for OS version <= 10.5. We don't support those
index 600dee5..a5b512e 100644 (file)
@@ -642,6 +642,24 @@ static bool scrollAnimationEnabledForSystem()
 #endif
 }
 
+#if ENABLE(RUBBER_BANDING)
+static bool rubberBandingEnabledForSystem()
+{
+    static bool initialized = false;
+    static bool enabled = true;
+    // Caches the result, which is consistent with other apps like the Finder, which all
+    // require a restart after changing this default.
+    if (!initialized) {
+        // Uses -objectForKey: and not -boolForKey: in order to default to true if the value wasn't set.
+        id value = [[NSUserDefaults standardUserDefaults] objectForKey:@"NSScrollViewRubberbanding"];
+        if ([value isKindOfClass:[NSNumber class]])
+            enabled = [value boolValue];
+        initialized = true;
+    }
+    return enabled;
+}
+#endif
+
 bool ScrollAnimatorMac::scroll(ScrollbarOrientation orientation, ScrollGranularity granularity, float step, float multiplier)
 {
     m_haveScrolledSincePageLoad = true;
@@ -981,7 +999,7 @@ bool ScrollAnimatorMac::handleWheelEvent(const PlatformWheelEvent& wheelEvent)
 {
     m_haveScrolledSincePageLoad = true;
 
-    if (!wheelEvent.hasPreciseScrollingDeltas())
+    if (!wheelEvent.hasPreciseScrollingDeltas() || !rubberBandingEnabledForSystem())
         return ScrollAnimator::handleWheelEvent(wheelEvent);
 
     // FIXME: This is somewhat roundabout hack to allow forwarding wheel events