aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1998-04-08 07:25:05 +0000
committerRichard M. Stallman1998-04-08 07:25:05 +0000
commitcb183ca05d7a8c75f00ea8c1e62394afd804be33 (patch)
tree0557a7bb522291bc13ecf1e379a831a8c1c207bb
parent53016bead4141cb0e61d98e816ff818db2f1bc99 (diff)
downloademacs-cb183ca05d7a8c75f00ea8c1e62394afd804be33.tar.gz
emacs-cb183ca05d7a8c75f00ea8c1e62394afd804be33.zip
(scroll-bar-drag): Set point-before-scroll
in the right buffer, from point in the right window. (scroll-bar-scroll-down, scroll-bar-scroll-up): Likewise.
-rw-r--r--lisp/scroll-bar.el99
1 files changed, 54 insertions, 45 deletions
diff --git a/lisp/scroll-bar.el b/lisp/scroll-bar.el
index f94fc6754af..2100a1f51ec 100644
--- a/lisp/scroll-bar.el
+++ b/lisp/scroll-bar.el
@@ -214,61 +214,70 @@ EVENT should be a scroll bar click or drag event."
214If you click outside the slider, the window scrolls to bring the slider there." 214If you click outside the slider, the window scrolls to bring the slider there."
215 (interactive "e") 215 (interactive "e")
216 (let* (done 216 (let* (done
217 (echo-keystrokes 0)) 217 (echo-keystrokes 0)
218 (or point-before-scroll 218 (end-position (event-end event))
219 (setq point-before-scroll (point))) 219 (window (nth 0 end-position))
220 ;; Our scrolling can move point; don't let that clear point-before-scroll. 220 (before-scroll))
221 (let (point-before-scroll) 221 (with-current-buffer (window-buffer window)
222 (scroll-bar-drag-1 event) 222 (setq before-scroll point-before-scroll))
223 (track-mouse 223 (save-selected-window
224 (while (not done) 224 (select-window window)
225 (setq event (read-event)) 225 (setq before-scroll
226 (if (eq (car-safe event) 'mouse-movement) 226 (or before-scroll (point))))
227 (setq event (read-event))) 227 (scroll-bar-drag-1 event)
228 (cond ((eq (car-safe event) 'scroll-bar-movement) 228 (track-mouse
229 (scroll-bar-drag-1 event)) 229 (while (not done)
230 (t 230 (setq event (read-event))
231 ;; Exit when we get the drag event; ignore that event. 231 (if (eq (car-safe event) 'mouse-movement)
232 (setq done t))))) 232 (setq event (read-event)))
233 (sit-for 0)))) 233 (cond ((eq (car-safe event) 'scroll-bar-movement)
234 (scroll-bar-drag-1 event))
235 (t
236 ;; Exit when we get the drag event; ignore that event.
237 (setq done t)))))
238 (sit-for 0)
239 (with-current-buffer (window-buffer window)
240 (setq point-before-scroll before-scroll))))
234 241
235(defun scroll-bar-scroll-down (event) 242(defun scroll-bar-scroll-down (event)
236 "Scroll the window's top line down to the location of the scroll bar click. 243 "Scroll the window's top line down to the location of the scroll bar click.
237EVENT should be a scroll bar click." 244EVENT should be a scroll bar click."
238 (interactive "e") 245 (interactive "e")
239 (let ((old-selected-window (selected-window))) 246 (let* ((end-position (event-end event))
240 (unwind-protect 247 (window (nth 0 end-position))
241 (progn 248 (before-scroll))
242 (let* ((end-position (event-end event)) 249 (with-current-buffer (window-buffer window)
243 (window (nth 0 end-position)) 250 (setq before-scroll point-before-scroll))
244 (portion-whole (nth 2 end-position))) 251 (save-selected-window
245 (let (point-before-scroll) 252 (let ((portion-whole (nth 2 end-position)))
246 (select-window window)) 253 (select-window window)
247 (or point-before-scroll 254 (setq before-scroll
248 (setq point-before-scroll (point))) 255 (or before-scroll (point)))
249 (let (point-before-scroll) 256 (scroll-down
250 (scroll-down 257 (scroll-bar-scale portion-whole (1- (window-height))))))
251 (scroll-bar-scale portion-whole (1- (window-height))))))) 258 (sit-for 0)
252 (select-window old-selected-window)))) 259 (with-current-buffer (window-buffer window)
260 (setq point-before-scroll before-scroll))))
253 261
254(defun scroll-bar-scroll-up (event) 262(defun scroll-bar-scroll-up (event)
255 "Scroll the line next to the scroll bar click to the top of the window. 263 "Scroll the line next to the scroll bar click to the top of the window.
256EVENT should be a scroll bar click." 264EVENT should be a scroll bar click."
257 (interactive "e") 265 (interactive "e")
258 (let ((old-selected-window (selected-window))) 266 (let* ((end-position (event-end event))
259 (unwind-protect 267 (window (nth 0 end-position))
260 (progn 268 (before-scroll))
261 (let* ((end-position (event-end event)) 269 (with-current-buffer (window-buffer window)
262 (window (nth 0 end-position)) 270 (setq before-scroll point-before-scroll))
263 (portion-whole (nth 2 end-position))) 271 (save-selected-window
264 (let (point-before-scroll) 272 (let ((portion-whole (nth 2 end-position)))
265 (select-window window)) 273 (select-window window)
266 (or point-before-scroll 274 (setq before-scroll
267 (setq point-before-scroll (point))) 275 (or before-scroll (point)))
268 (let (point-before-scroll) 276 (scroll-up
269 (scroll-up 277 (scroll-bar-scale portion-whole (1- (window-height))))))
270 (scroll-bar-scale portion-whole (1- (window-height))))))) 278 (sit-for 0)
271 (select-window old-selected-window)))) 279 (with-current-buffer (window-buffer window)
280 (setq point-before-scroll before-scroll))))
272 281
273 282
274;;;; Bindings. 283;;;; Bindings.