2 small fixes; release-point was misnamed in the let and indentation was wrong in the latter part of the code.
(setq mouse-drag-and-drop-region 'shift)
(defun mouse-drag-and-drop-region (event)
"Move text in the region to point where mouse is dragged to.
The transportation of text is also referred as `drag and drop'.
When text is dragged over to a different buffer, or if a
modifier key was pressed when dropping, and the value of the
variable `mouse-drag-and-drop-region' is that modifier, the text
is copied instead of being cut."
(interactive "e")
(require 'tooltip)
(let ((start (region-beginning))
(end (region-end))
(point (point))
(buffer (current-buffer))
(source-window (selected-window))
event-handler
release-point
value-selection)
(track-mouse
;; When event was click instead of drag, skip loop
(while (or (mouse-movement-p (setq event (read-event)))
(setq event-handler (and (consp event)
(intern-soft (concat "handle-"
(symbol-name
(event-basic-type event)))))))
(if (fboundp event-handler)
(progn (funcall event-handler event) (setq event-handler nil))
(setq event-handler nil))
(unless value-selection ; initialization
(delete-overlay mouse-secondary-overlay)
(setq value-selection (buffer-substring start end))
(move-overlay mouse-secondary-overlay start end)) ; (deactivate-mark)
(ignore-errors (deactivate-mark) ; deactivate any existing region in other window
(mouse-set-point event)
(tooltip-show value-selection)))
(tooltip-hide))
;; Do not modify buffer under mouse when "event was click",
;; "drag negligible", or
;; "drag to read-only".
(if (or (equal (mouse-posn-property (event-end event) 'face) 'region) ; "event was click"
(and (setq release-point (posn-point (event-end event)))
(member 'secondary-selection ; "drag negligible"
(mapcar (lambda (xxx) (overlay-get xxx 'face))
(overlays-at release-point))))
buffer-read-only)
;; Do not modify buffer under mouse.
(cond
;; "drag negligible" or "drag to read-only", restore region.
(value-selection
(select-window source-window) ; In case miss drag to other window
(goto-char point)
(setq deactivate-mark nil)
(activate-mark))
;; "event was click"
(t
(deactivate-mark)
(mouse-set-point event)))
;; Modify buffer under mouse by inserting text.
(push-mark)
(insert value-selection)
(when (not (equal (mark) (point))) ; on successful insert
(setq deactivate-mark nil)
(activate-mark)) ; have region on destination
(let ((dest-window (selected-window))) ; when beyond buffer
;; Take care of initial region on source.
(if (equal (current-buffer) buffer) ; when same buffer
(let (deactivate-mark) ; remove text
(unless (member mouse-drag-and-drop-region (event-modifiers event))
(kill-region (overlay-start mouse-secondary-overlay)
(overlay-end mouse-secondary-overlay))))
(select-window source-window)
(goto-char point) ; restore point in source-window
(activate-mark)) ; restore region
;; Ensure change focus to any new frame; typically edits
;; would continue in its selected window where the text was
;; dropped.
(select-frame (window-frame dest-window))
(select-window dest-window)))
(delete-overlay mouse-secondary-overlay)))