From: Po Lu Date: Sun, 21 Aug 2022 06:06:22 +0000 (+0800) Subject: Minor optimization to x_query_pointer_1 X-Git-Tag: emacs-29.0.90~1893^2~133 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=8d4789c07273f5fdc9d3c1f06e357746a012b8dd;p=emacs.git Minor optimization to x_query_pointer_1 * src/xterm.c (x_query_pointer_1): Clear client pointer if it disappeared. --- diff --git a/src/xterm.c b/src/xterm.c index 39e5a8e1861..4f9b0b83b55 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -13442,10 +13442,20 @@ x_query_pointer_1 (struct x_display_info *dpyinfo, x_uncatch_errors_after_check (); if (had_errors) - rc = XQueryPointer (dpyinfo->display, w, root_return, - child_return, root_x_return, - root_y_return, win_x_return, - win_y_return, mask_return); + { + /* If the specified client pointer is the display's client + pointer, clear it now. A new client pointer might not be + found before the next call to x_query_pointer_1 and + waiting for the error leads to excessive syncing. */ + + if (client_pointer_device == dpyinfo->client_pointer_device) + dpyinfo->client_pointer_device = -1; + + rc = XQueryPointer (dpyinfo->display, w, root_return, + child_return, root_x_return, + root_y_return, win_x_return, + win_y_return, mask_return); + } else { state = 0;