aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/textmodes
diff options
context:
space:
mode:
authorChong Yidong2010-11-13 16:01:10 -0500
committerChong Yidong2010-11-13 16:01:10 -0500
commitde02effd8d2c2f8ada0eb8bda143b38e7506e2ae (patch)
treede6b36dc0e7b69c819b9eef20b47bca16aca3a68 /lisp/textmodes
parent4d613e98a7ca89dbebbcc1a2865f8df04bf888f8 (diff)
downloademacs-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.el32
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.