]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle errors caused by ignoring errors with GDK's trap installed
authorPo Lu <luangruo@yahoo.com>
Mon, 4 Jul 2022 06:02:42 +0000 (14:02 +0800)
committerPo Lu <luangruo@yahoo.com>
Mon, 4 Jul 2022 06:02:42 +0000 (14:02 +0800)
* src/xterm.c (x_ignore_errors_for_next_request)
(x_stop_ignoring_errors): Also tell GDK to ignore errors from
the following requests.  (bug#56372)

src/xterm.c

index de8e973173f1ec966cde24f9f93c742c9b7ff8d0..e242768c95dfe54861b1bf3c2d87da1fbec573e2 100644 (file)
@@ -23144,6 +23144,19 @@ static void
 x_ignore_errors_for_next_request (struct x_display_info *dpyinfo)
 {
   struct x_failable_request *request, *max;
+#ifdef HAVE_GTK3
+  GdkDisplay *gdpy;
+
+  /* GTK 3 tends to override our own error handler inside certain
+     callbacks, which this can be called from.  Instead of trying to
+     restore our own, add a trap for the following requests with
+     GDK as well.  */
+
+  gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display);
+
+  if (gdpy)
+    gdk_x11_display_error_trap_push (gdpy);
+#endif
 
   if ((dpyinfo->next_failable_request
        != dpyinfo->failable_requests)
@@ -23182,6 +23195,9 @@ static void
 x_stop_ignoring_errors (struct x_display_info *dpyinfo)
 {
   struct x_failable_request *range;
+#ifdef HAVE_GTK3
+  GdkDisplay *gdpy;
+#endif
 
   range = dpyinfo->next_failable_request - 1;
   range->end = XNextRequest (dpyinfo->display) - 1;
@@ -23192,6 +23208,13 @@ x_stop_ignoring_errors (struct x_display_info *dpyinfo)
   if (X_COMPARE_SERIALS (range->end, <,
                         range->start))
     emacs_abort ();
+
+#ifdef HAVE_GTK3
+  gdpy = gdk_x11_lookup_xdisplay (dpyinfo->display);
+
+  if (gdpy)
+    gdk_x11_display_error_trap_pop_ignored (gdpy);
+#endif
 }
 
 /* Undo the last x_catch_errors call.