[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 235045f712 1/2: Prevent exposing tooltip frames to Lisp code duri
From: |
Po Lu |
Subject: |
master 235045f712 1/2: Prevent exposing tooltip frames to Lisp code during drag-and-drop |
Date: |
Sat, 23 Jul 2022 22:44:23 -0400 (EDT) |
branch: master
commit 235045f712ef5c0dea12c5005cc07118971f413f
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Prevent exposing tooltip frames to Lisp code during drag-and-drop
* src/xterm.c (x_dnd_compute_toplevels): Ignore tooltip frames.
(x_tooltip_window_to_frame): Allow unrelated_tooltip_p to be
NULL.
(handle_one_xevent): Ignore DND events to tooltip frames.
---
src/xterm.c | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/xterm.c b/src/xterm.c
index 45a81a3fdb..67a7de4213 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -2937,7 +2937,7 @@ x_dnd_compute_toplevels (struct x_display_info *dpyinfo)
Window *toplevels;
int format, rc;
unsigned long nitems, bytes_after;
- unsigned long i;
+ unsigned long i, real_nitems;
unsigned char *data = NULL;
int frame_extents[4];
@@ -3001,6 +3001,16 @@ x_dnd_compute_toplevels (struct x_display_info *dpyinfo)
toplevels = (Window *) data;
+ for (i = 0, real_nitems = 0; i < nitems; ++i)
+ {
+ /* Some window managers with built in compositors end up putting
+ tooltips in the client list, which is silly. */
+ if (!x_tooltip_window_to_frame (dpyinfo, toplevels[i], NULL))
+ toplevels[real_nitems++] = toplevels[i];
+ }
+
+ nitems = real_nitems;
+
#ifdef USE_XCB
USE_SAFE_ALLOCA;
@@ -11072,7 +11082,8 @@ x_tooltip_window_to_frame (struct x_display_info
*dpyinfo,
GdkWindow *tooltip_window;
#endif
- *unrelated_tooltip_p = false;
+ if (unrelated_tooltip_p)
+ *unrelated_tooltip_p = false;
FOR_EACH_FRAME (tail, frame)
{
@@ -11101,14 +11112,16 @@ x_tooltip_window_to_frame (struct x_display_info
*dpyinfo,
if (tooltip_window
&& (gdk_x11_window_get_xid (tooltip_window) == wdesc))
{
- *unrelated_tooltip_p = true;
+ if (unrelated_tooltip_p)
+ *unrelated_tooltip_p = true;
break;
}
#else
if (tooltip_window
&& (GDK_WINDOW_XID (tooltip_window) == wdesc))
{
- *unrelated_tooltip_p = true;
+ if (unrelated_tooltip_p)
+ *unrelated_tooltip_p = true;
break;
}
#endif
@@ -16972,7 +16985,8 @@ handle_one_xevent (struct x_display_info *dpyinfo,
xft_settings_event (dpyinfo, event);
f = any;
- if (!f)
+ /* We don't want to ever leak tooltip frames to Lisp code. */
+ if (!f || FRAME_TOOLTIP_P (f))
goto OTHER;
/* These values are always used initialized, but GCC doesn't