]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix mouse-scrollbar offset on GNUstep and old macOS (bug#29053)
authorAlan Third <alan@idiocy.org>
Thu, 2 Nov 2017 21:41:11 +0000 (21:41 +0000)
committerAlan Third <alan@idiocy.org>
Thu, 2 Nov 2017 22:41:42 +0000 (22:41 +0000)
* src/nsterm.m (EmacsScroller::mouseDown,
EmacsScroller::mouseDragged): Take scroller buttons into account when
calculating scroller knob position.

src/nsterm.m

index a382e5f7130986772c7337a28389898589b06c5b..5c29f039e51fbfb27656b218450d55707a3cb188 100644 (file)
@@ -8912,10 +8912,20 @@ not_in_argv (NSString *arg)
         }
       last_mouse_offset = kloc;
 
-      if (part != NSScrollerKnob)
-        /* this is a slot click on GNUstep: go straight there */
+      /* if knob, tell emacs a location offset by knob pos
+         (to indicate top of handle) */
+      if (part == NSScrollerKnob)
+        pos = (loc - last_mouse_offset);
+      else
+        /* else this is a slot click on GNUstep: go straight there */
         pos = loc;
 
+      /* If there are buttons in the scroller area, we need to
+         recalculate pos as emacs expects the scroller slot to take up
+         the entire available length.  */
+      if (length != pixel_length)
+        pos = pos * pixel_length / length;
+
       /* send a fake mouse-up to super to preempt modal -trackKnob: mode */
       fake_event = [NSEvent mouseEventWithType: NSEventTypeLeftMouseUp
                                       location: [e locationInWindow]
@@ -8980,6 +8990,13 @@ not_in_argv (NSString *arg)
         }
 
       pos = (loc - last_mouse_offset);
+
+      /* If there are buttons in the scroller area, we need to
+         recalculate pos as emacs expects the scroller slot to take up
+         the entire available length.  */
+      if (length != pixel_length)
+        pos = pos * pixel_length / length;
+
       [self sendScrollEventAtLoc: pos fromEvent: e];
 }