emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 792734a6e2: Improve efficiency of DND tooltip movement


From: Po Lu
Subject: master 792734a6e2: Improve efficiency of DND tooltip movement
Date: Fri, 22 Jul 2022 21:35:32 -0400 (EDT)

branch: master
commit 792734a6e2cd5558debc8d9fe95d34cb3e809fa4
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Improve efficiency of DND tooltip movement
    
    * src/xterm.c (x_dnd_begin_drag_and_drop): Clear new flag.
    (x_dnd_update_tooltip_position): Save last tooltip X and Y
    somewhere, so we don't move it upon client lists being updated.
---
 src/xterm.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/xterm.c b/src/xterm.c
index 8b12d92f18..45a81a3fdb 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1390,6 +1390,12 @@ static int x_dnd_recursion_depth;
    initiating Motif drag-and-drop for the first time.  */
 static Lisp_Object x_dnd_selection_alias_cell;
 
+/* The last known position of the tooltip window.  */
+static int x_dnd_last_tooltip_x, x_dnd_last_tooltip_y;
+
+/* Whether or not those values are actually known yet.  */
+static bool x_dnd_last_tooltip_valid;
+
 /* Structure describing a single window that can be the target of
    drag-and-drop operations.  */
 struct x_client_list_window
@@ -11670,6 +11676,7 @@ x_dnd_begin_drag_and_drop (struct frame *f, Time time, 
Atom xaction,
   x_dnd_run_unsupported_drop_function = false;
   x_dnd_use_toplevels
     = x_wm_supports (f, FRAME_DISPLAY_INFO 
(f)->Xatom_net_client_list_stacking);
+  x_dnd_last_tooltip_valid = false;
   x_dnd_toplevels = NULL;
   x_dnd_allow_current_frame = allow_current_frame;
   x_dnd_movement_frame = NULL;
@@ -15928,6 +15935,15 @@ x_dnd_update_tooltip_position (int root_x, int root_y)
       x_dnd_compute_tip_xy (&root_x, &root_y,
                            x_dnd_monitors);
 
+      if (x_dnd_last_tooltip_valid
+         && root_x == x_dnd_last_tooltip_x
+         && root_y == x_dnd_last_tooltip_y)
+       return;
+
+      x_dnd_last_tooltip_x = root_x;
+      x_dnd_last_tooltip_y = root_y;
+      x_dnd_last_tooltip_valid = true;
+
       XMoveWindow (FRAME_X_DISPLAY (x_dnd_frame),
                   tip_window, root_x, root_y);
     }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]