diff lisp/mouse.el @ 57749:08eb19d9ee4b

(mouse-show-mark): Do most processing the same regardless of transient-mark-mode.
author Richard M. Stallman <rms@gnu.org>
date Wed, 27 Oct 2004 17:44:59 +0000
parents f2e8ab894ad3
children 8fe3a1b0606e
line wrap: on
line diff
--- a/lisp/mouse.el	Wed Oct 27 17:41:24 2004 +0000
+++ b/lisp/mouse.el	Wed Oct 27 17:44:59 2004 +0000
@@ -1025,54 +1025,55 @@
   "List of keys which shall cause the mouse region to be deleted.")
 
 (defun mouse-show-mark ()
-  (if transient-mark-mode
-      (delete-overlay mouse-drag-overlay)
-    (let ((inhibit-quit t)
-	  (echo-keystrokes 0)
-	  event events key ignore
-	  x-lost-selection-hooks)
-      (add-hook 'x-lost-selection-hooks
-		(lambda (seltype)
-		  (if (eq seltype 'PRIMARY)
-		      (progn (setq ignore t)
-			     (throw 'mouse-show-mark t)))))
-      (move-overlay mouse-drag-overlay (point) (mark t))
-      (catch 'mouse-show-mark
-	;; In this loop, execute scroll bar and switch-frame events.
-	;; Also ignore down-events that are undefined.
-	(while (progn (setq event (read-event))
-		      (setq events (append events (list event)))
-		      (setq key (apply 'vector events))
-		      (or (and (consp event)
-			       (eq (car event) 'switch-frame))
-			  (and (consp event)
-			       (eq (posn-point (event-end event))
-				   'vertical-scroll-bar))
-			  (and (memq 'down (event-modifiers event))
-			       (not (key-binding key))
-			       (not (mouse-undouble-last-event events))
-			       (not (member key mouse-region-delete-keys)))))
-	  (and (consp event)
-	       (or (eq (car event) 'switch-frame)
-		   (eq (posn-point (event-end event))
-		       'vertical-scroll-bar))
-	       (let ((keys (vector 'vertical-scroll-bar event)))
-		 (and (key-binding keys)
-		      (progn
-			(call-interactively (key-binding keys)
-					    nil keys)
-			(setq events nil)))))))
-      ;; If we lost the selection, just turn off the highlighting.
-      (if ignore
-	  nil
-	;; For certain special keys, delete the region.
-	(if (member key mouse-region-delete-keys)
-	    (delete-region (overlay-start mouse-drag-overlay)
-			   (overlay-end mouse-drag-overlay))
-	  ;; Otherwise, unread the key so it gets executed normally.
-	  (setq unread-command-events
-		(nconc events unread-command-events))))
-      (setq quit-flag nil)
+  (let ((inhibit-quit t)
+	(echo-keystrokes 0)
+	event events key ignore
+	(x-lost-selection-hooks (copy-sequence x-lost-selection-hooks)))
+    (add-hook 'x-lost-selection-hooks
+	      (lambda (seltype)
+		(if (eq seltype 'PRIMARY)
+		    (progn (setq ignore t)
+			   (throw 'mouse-show-mark t)))))
+    (if transient-mark-mode
+	(delete-overlay mouse-drag-overlay)
+      (move-overlay mouse-drag-overlay (point) (mark t)))
+    (catch 'mouse-show-mark
+      ;; In this loop, execute scroll bar and switch-frame events.
+      ;; Also ignore down-events that are undefined.
+      (while (progn (setq event (read-event))
+		    (setq events (append events (list event)))
+		    (setq key (apply 'vector events))
+		    (or (and (consp event)
+			     (eq (car event) 'switch-frame))
+			(and (consp event)
+			     (eq (posn-point (event-end event))
+				 'vertical-scroll-bar))
+			(and (memq 'down (event-modifiers event))
+			     (not (key-binding key))
+			     (not (mouse-undouble-last-event events))
+			     (not (member key mouse-region-delete-keys)))))
+	(and (consp event)
+	     (or (eq (car event) 'switch-frame)
+		 (eq (posn-point (event-end event))
+		     'vertical-scroll-bar))
+	     (let ((keys (vector 'vertical-scroll-bar event)))
+	       (and (key-binding keys)
+		    (progn
+		      (call-interactively (key-binding keys)
+					  nil keys)
+		      (setq events nil)))))))
+    ;; If we lost the selection, just turn off the highlighting.
+    (if ignore
+	nil
+      ;; For certain special keys, delete the region.
+      (if (member key mouse-region-delete-keys)
+	  (delete-region (overlay-start mouse-drag-overlay)
+			 (overlay-end mouse-drag-overlay))
+	;; Otherwise, unread the key so it gets executed normally.
+	(setq unread-command-events
+	      (nconc events unread-command-events))))
+    (setq quit-flag nil)
+    (unless transient-mark-mode
       (delete-overlay mouse-drag-overlay))))
 
 (defun mouse-set-mark (click)