]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug#58584
authorPo Lu <luangruo@yahoo.com>
Tue, 18 Oct 2022 00:52:01 +0000 (08:52 +0800)
committerPo Lu <luangruo@yahoo.com>
Tue, 18 Oct 2022 00:53:43 +0000 (08:53 +0800)
* src/xterm.c (x_handle_selection_monitor_event): Return if
selection event is one Emacs asked for.
(handle_one_xevent): In that case, drop the event and don't let
it reach GTK.

src/xterm.c

index 07a8c5e1c3fb00f99ff7b7a465b5a04b6ff94e06..7c3ab87e87b95f7df22c604b7019d396a317afe3 100644 (file)
@@ -17855,7 +17855,7 @@ x_handle_wm_state (struct frame *f, struct input_event *ie)
 
 #ifdef HAVE_XFIXES
 
-static void
+static bool
 x_handle_selection_monitor_event (struct x_display_info *dpyinfo,
                                  XEvent *event)
 {
@@ -17865,7 +17865,7 @@ x_handle_selection_monitor_event (struct x_display_info *dpyinfo,
   notify = (XFixesSelectionNotifyEvent *) event;
 
   if (notify->window != dpyinfo->selection_tracking_window)
-    return;
+    return false;
 
   for (i = 0; i < dpyinfo->n_monitored_selections; ++i)
     {
@@ -17873,6 +17873,8 @@ x_handle_selection_monitor_event (struct x_display_info *dpyinfo,
       if (notify->selection == dpyinfo->monitored_selections[i].name)
        dpyinfo->monitored_selections[i].owner = notify->owner;
     }
+
+  return true;
 }
 
 Window
@@ -24141,8 +24143,13 @@ handle_one_xevent (struct x_display_info *dpyinfo,
 #ifdef HAVE_XFIXES
       if (dpyinfo->xfixes_supported_p
          && event->type == (dpyinfo->xfixes_event_base
-                            + XFixesSelectionNotify))
-       x_handle_selection_monitor_event (dpyinfo, event);
+                            + XFixesSelectionNotify)
+         && x_handle_selection_monitor_event (dpyinfo, event))
+       /* GTK 3 crashes if an XFixesSelectionNotify arrives with a
+          window other than the root window, because it wants to know
+          the screen in order to determine the compositing manager
+          selection name.  (bug#58584) */
+       *finish = X_EVENT_DROP;
 #endif
     OTHER:
 #ifdef USE_X_TOOLKIT