changeset 60204:074d6632232c

(mouse-on-link-p): If arg POS is a mouse event, check that window of that event is the selected window. (mouse-drag-region-1): Compare mouse event window to selected window before setting point.
author Kim F. Storm <storm@cua.dk>
date Tue, 22 Feb 2005 09:42:06 +0000
parents ba4a03ed6f89
children 3af3548ad26d
files lisp/mouse.el
diffstat 1 files changed, 23 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mouse.el	Tue Feb 22 09:41:50 2005 +0000
+++ b/lisp/mouse.el	Tue Feb 22 09:42:06 2005 +0000
@@ -769,6 +769,8 @@
 
 (defun mouse-on-link-p (pos)
   "Return non-nil if POS is on a link in the current buffer.
+POS must be a buffer position in the current buffer or an mouse
+event location in the selected window, see `event-start'.
 
 A clickable link is identified by one of the following methods:
 
@@ -787,7 +789,7 @@
 
 - If the value is a function, FUNC, POS is inside a link if
 the call \(FUNC POS) returns non-nil.  Return the return value
-from that call.
+from that call.  Arg is \(posn-point POS) if POS is a mouse event,
 
 - Otherwise, return the value itself.
 
@@ -803,17 +805,22 @@
 
 - Otherwise, the mouse-1 event is translated into a mouse-2 event
 at the same position."
-  (let ((action
-	 (or (get-char-property pos 'follow-link)
-	     (save-excursion
-	       (goto-char pos)
-	       (key-binding [follow-link] nil t)))))
-    (cond
-     ((eq action 'mouse-face)
-      (and (get-char-property pos 'mouse-face) t))
-     ((functionp action)
-      (funcall action pos))
-     (t action))))
+  (if (consp pos)
+      (setq pos (and (eq (selected-window) (posn-window pos))
+		     (posn-point pos))))
+  (when pos
+    (let ((action
+	   (or (get-char-property pos 'follow-link)
+	       (save-excursion
+		 (goto-char pos)
+		 (key-binding [follow-link] nil t)))))
+      (cond
+       ((eq action 'mouse-face)
+	(and (get-char-property pos 'mouse-face) t))
+       ((functionp action)
+	(funcall action pos))
+       (t action)))))
+
 
 (defun mouse-drag-region-1 (start-event)
   (mouse-minibuffer-check start-event)
@@ -831,7 +838,9 @@
 		     (nth 3 bounds)
 		   ;; Don't count the mode line.
 		   (1- (nth 3 bounds))))
-	 on-link remap-double-click
+	 (on-link (and mouse-1-click-follows-link
+		       (eq start-window (selected-window))))
+	 remap-double-click
 	 (click-count (1- (event-click-count start-event))))
     (setq mouse-selection-click-count click-count)
     (setq mouse-selection-click-count-buffer (current-buffer))
@@ -841,7 +850,7 @@
     (if (< (point) start-point)
 	(goto-char start-point))
     (setq start-point (point))
-    (setq on-link (and mouse-1-click-follows-link
+    (setq on-link (and on-link
 		       (mouse-on-link-p start-point)))
     (setq remap-double-click (and on-link
 				  (eq mouse-1-click-follows-link 'double)