]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix announcements of XDND mouse rectangles
authorPo Lu <luangruo@yahoo.com>
Tue, 5 Jul 2022 13:56:50 +0000 (21:56 +0800)
committerPo Lu <luangruo@yahoo.com>
Wed, 6 Jul 2022 00:45:34 +0000 (08:45 +0800)
* lisp/x-dnd.el (x-dnd-handle-xdnd): Use correct meaning of "2",
which isn't well documented.
* src/xterm.c (handle_one_xevent): Likewise.  Also fix unpacking
of mouse rects.

lisp/x-dnd.el
src/xterm.c

index 9c1c98a1bf57725b8a5f98995cb476cdf10a9bb3..92899e7a0c6736449834ac51cd9778b0edaa9c10 100644 (file)
@@ -695,13 +695,13 @@ FORMAT is 32 (not used).  MESSAGE is the data part of an XClientMessageEvent."
                (list-to-send
                 (list (string-to-number
                        (frame-parameter frame 'outer-window-id))
-                      (+ 2 accept) ;; 1 = accept, 0 = reject.  2 =
-                                    ;; "want position updates".
-                       (if dnd-indicate-insertion-point 0
-                        (x-dnd-get-drop-x-y frame window))
-                       (if dnd-indicate-insertion-point 0
-                        (x-dnd-get-drop-width-height
-                         frame window (eq accept 1)))
+                       ;; 1 = accept, 0 = reject.  2 = "want position
+                       ;; updates even for movement inside the given
+                       ;; widget bounds".
+                      (+ (if dnd-indicate-insertion-point 2 0) accept)
+                      (x-dnd-get-drop-x-y frame window)
+                      (x-dnd-get-drop-width-height
+                       frame window (eq accept 1))
                        ;; The no-toolkit Emacs build can actually
                        ;; receive drops from programs that speak
                        ;; versions of XDND earlier than 3 (such as
index 4a47fdfd45018eb2b928c626315c1b15c4a2c90e..8373222cfc32242b0909a0dcf4cf9011cf379534 100644 (file)
@@ -16468,10 +16468,15 @@ handle_one_xevent (struct x_display_info *dpyinfo,
            if (x_dnd_last_protocol_version != -1
                && x_dnd_in_progress
                && target == x_dnd_last_seen_window
-               && event->xclient.data.l[1] & 2)
+               /* The XDND documentation is not very clearly worded.
+                  But this should be the correct behavior, since
+                  "kDNDStatusSendHereFlag" in the reference
+                  implementation is 2, and means the mouse rect
+                  should be ignored.  */
+               && !(event->xclient.data.l[1] & 2))
              {
                r1 = event->xclient.data.l[2];
-               r2 = event->xclient.data.l[2];
+               r2 = event->xclient.data.l[3];
 
                x_dnd_mouse_rect_target = target;
                x_dnd_mouse_rect.x = (r1 & 0xffff0000) >> 16;