Fix announcements of XDND mouse rectangles

* 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.
This commit is contained in:
Po Lu 2022-07-05 21:56:50 +08:00
parent 0463368a7b
commit 6230ed6d63
2 changed files with 14 additions and 9 deletions

View 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

View 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;