@@ -2500,12 +2520,24 @@ mouse-drag-and-drop-region ;; text will be inserted to inside of the original ;; region. (setq drag-but-negligible - (and (eq (overlay-buffer mouse-drag-and-drop-overlay) + (and (eq (overlay-buffer (car mouse-drag-and-drop-overlays)) buffer-to-paste) - (<= (overlay-start mouse-drag-and-drop-overlay) - point-to-paste) - (<= point-to-paste - (overlay-end mouse-drag-and-drop-overlay))))) + (if region-noncontiguous + ;; If the region is rectangular, check if the newly inserted + ;; rectangular text would intersect the already selected + ;; region. If it would, then set "drag-but-negligible" to t. + (let ((size (cons region-width region-height))) + (and (rectangle-intersect-p + (rectangle-position-as-coordinates start) size + (rectangle-position-as-coordinates point-to-paste) size) + (or (not (= (line-number-at-pos start) + (line-number-at-pos point-to-paste))) + (and (<= start point-to-paste) + (<= point-to-paste (+ start (car size))))))) + (and (<= (overlay-start (car mouse-drag-and-drop-overlays)) + point-to-paste) + (<= point-to-paste + (overlay-end (car mouse-drag-and-drop-overlays)))))))) ;; Show a tooltip. (if mouse-drag-and-drop-region-show-tooltip