diff options
| author | Chong Yidong | 2010-11-13 16:01:10 -0500 |
|---|---|---|
| committer | Chong Yidong | 2010-11-13 16:01:10 -0500 |
| commit | de02effd8d2c2f8ada0eb8bda143b38e7506e2ae (patch) | |
| tree | de6b36dc0e7b69c819b9eef20b47bca16aca3a68 /lisp/textmodes | |
| parent | 4d613e98a7ca89dbebbcc1a2865f8df04bf888f8 (diff) | |
| download | emacs-de02effd8d2c2f8ada0eb8bda143b38e7506e2ae.tar.gz emacs-de02effd8d2c2f8ada0eb8bda143b38e7506e2ae.zip | |
Fix picture-mouse-set-point calculation (Bug#7390).
* lisp/textmodes/picture.el (picture-mouse-set-point): Don't use
posn-col-row; explicitly compute the motion based on the posn at
the window-start (Bug#7390).
Diffstat (limited to 'lisp/textmodes')
| -rw-r--r-- | lisp/textmodes/picture.el | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index 2673ee15457..f1bb9957125 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el | |||
| @@ -226,16 +226,30 @@ Do \\[command-apropos] picture-movement to see commands which control motion." | |||
| 226 | (picture-motion (- arg))) | 226 | (picture-motion (- arg))) |
| 227 | 227 | ||
| 228 | (defun picture-mouse-set-point (event) | 228 | (defun picture-mouse-set-point (event) |
| 229 | "Move point to the position clicked on, making whitespace if necessary." | 229 | "Move point to the position of EVENT, making whitespace if necessary." |
| 230 | (interactive "e") | 230 | (interactive "e") |
| 231 | (let* ((pos (posn-col-row (event-start event))) | 231 | (let ((position (event-start event))) |
| 232 | (x (car pos)) | 232 | (unless (posn-area position) ; Ignore EVENT unless in text area |
| 233 | (y (cdr pos)) | 233 | (let* ((window (posn-window position)) |
| 234 | (current-row (count-lines (window-start) (line-beginning-position)))) | 234 | (frame (if (framep window) window (window-frame window))) |
| 235 | (unless (equal x (current-column)) | 235 | (pair (posn-x-y position)) |
| 236 | (picture-forward-column (- x (current-column)))) | 236 | (start-pos (window-start window)) |
| 237 | (unless (equal y current-row) | 237 | (start-pair (posn-x-y (posn-at-point start-pos))) |
| 238 | (picture-move-down (- y current-row))))) | 238 | (dx (- (car pair) (car start-pair))) |
| 239 | (dy (- (cdr pair) (cdr start-pair))) | ||
| 240 | (char-ht (frame-char-height frame)) | ||
| 241 | (spacing (when (display-graphic-p frame) | ||
| 242 | (or (with-current-buffer (window-buffer window) | ||
| 243 | line-spacing) | ||
| 244 | (frame-parameter frame 'line-spacing)))) | ||
| 245 | rows cols) | ||
| 246 | (cond ((floatp spacing) | ||
| 247 | (setq spacing (truncate (* spacing char-ht)))) | ||
| 248 | ((null spacing) | ||
| 249 | (setq spacing 0))) | ||
| 250 | (goto-char start-pos) | ||
| 251 | (picture-move-down (/ dy (+ char-ht spacing))) | ||
| 252 | (picture-forward-column (/ dx (frame-char-width frame))))))) | ||
| 239 | 253 | ||
| 240 | 254 | ||
| 241 | ;; Picture insertion and deletion. | 255 | ;; Picture insertion and deletion. |