diff options
| author | Richard M. Stallman | 1998-04-08 07:25:05 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-04-08 07:25:05 +0000 |
| commit | cb183ca05d7a8c75f00ea8c1e62394afd804be33 (patch) | |
| tree | 0557a7bb522291bc13ecf1e379a831a8c1c207bb | |
| parent | 53016bead4141cb0e61d98e816ff818db2f1bc99 (diff) | |
| download | emacs-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.el | 99 |
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." | |||
| 214 | If you click outside the slider, the window scrolls to bring the slider there." | 214 | If 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. |
| 237 | EVENT should be a scroll bar click." | 244 | EVENT 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. |
| 256 | EVENT should be a scroll bar click." | 264 | EVENT 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. |