]> git.eshelyaron.com Git - emacs.git/commitdiff
Remove extra call to XTranslateCoordinates when performing "xterm" drop
authorPo Lu <luangruo@yahoo.com>
Fri, 10 Jun 2022 12:51:45 +0000 (20:51 +0800)
committerPo Lu <luangruo@yahoo.com>
Fri, 10 Jun 2022 12:52:07 +0000 (20:52 +0800)
* src/xterm.c (x_dnd_do_unsupported_drop): Signal error when
XdndSelection is lost, set subwindow, and simplify
XTranslateCoordinates loop.

src/xterm.c

index 375b345a90a3e9bf21391945266a7b2305fb1fef..30322b0c09b66d6cd790c4adb1503a65756523a9 100644 (file)
@@ -3443,7 +3443,6 @@ x_dnd_do_unsupported_drop (struct x_display_info *dpyinfo,
   int dest_x, dest_y;
   Window child_return, child;
 
-  event.xbutton.type = ButtonPress;
   event.xbutton.serial = 0;
   event.xbutton.send_event = True;
   event.xbutton.display = dpyinfo->display;
@@ -3457,39 +3456,37 @@ x_dnd_do_unsupported_drop (struct x_display_info *dpyinfo,
   dest_x = root_x;
   dest_y = root_y;
 
-  while (XTranslateCoordinates (dpyinfo->display, child,
-                               child, root_x, root_y, &dest_x,
-                               &dest_y, &child_return)
-        && child_return != None
-        && XTranslateCoordinates (dpyinfo->display, child,
-                                  child_return, root_x, root_y,
-                                  &dest_x, &dest_y, &child))
-    {
-      child = child_return;
-      root_x = dest_x;
-      root_y = dest_y;
-    }
+  while (XTranslateCoordinates (dpyinfo->display, dpyinfo->root_window,
+                               child, root_x, root_y, &dest_x, &dest_y,
+                               &child_return)
+        && child_return != None)
+    child = child_return;
 
   if (CONSP (value))
     x_own_selection (QPRIMARY, Fnth (make_fixnum (1), value),
                     frame);
   else
-    x_own_selection (QPRIMARY, Qnil, frame);
+    error ("Lost ownership of XdndSelection");
 
   event.xbutton.window = child;
+  event.xbutton.subwindow = None;
   event.xbutton.x = dest_x;
   event.xbutton.y = dest_y;
   event.xbutton.state = 0;
   event.xbutton.button = 2;
   event.xbutton.same_screen = True;
-  event.xbutton.time = before + 1;
-  event.xbutton.time = before + 2;
 
   x_set_pending_dnd_time (before);
 
+  event.xbutton.type = ButtonPress;
+  event.xbutton.time = before + 1;
+
   XSendEvent (dpyinfo->display, child,
              True, ButtonPressMask, &event);
+
   event.xbutton.type = ButtonRelease;
+  event.xbutton.time = before + 2;
+
   XSendEvent (dpyinfo->display, child,
              True, ButtonReleaseMask, &event);