mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-23 20:30:15 +00:00
Only store error codes in inner-most X error trap
When an error occurs with nested traps in place, only the innermost trap should have the error code stored in it; outer traps are shielded by the inner trap. https://bugzilla.gnome.org/show_bug.cgi?id=629608
This commit is contained in:
parent
1592738d2f
commit
14e38da150
@ -2721,6 +2721,7 @@ _gdk_x11_display_error_event (GdkDisplay *display,
|
||||
{
|
||||
ignore = TRUE;
|
||||
trap->error_code = error->error_code;
|
||||
break; /* only innermost trap gets the error code */
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -56,13 +56,22 @@ test_error_trapping (GdkDisplay *gdk_display)
|
||||
|
||||
XSync (d, TRUE);
|
||||
|
||||
/* verify that we can catch with nested traps */
|
||||
/* verify that we can catch with nested traps; inner-most
|
||||
* active trap gets the error */
|
||||
gdk_error_trap_push ();
|
||||
gdk_error_trap_push ();
|
||||
XSetCloseDownMode (d, 12345);
|
||||
error = gdk_error_trap_pop ();
|
||||
g_assert (error == BadValue);
|
||||
error = gdk_error_trap_pop ();
|
||||
g_assert (error == Success);
|
||||
|
||||
gdk_error_trap_push ();
|
||||
XSetCloseDownMode (d, 12345);
|
||||
gdk_error_trap_push ();
|
||||
error = gdk_error_trap_pop ();
|
||||
g_assert (error == Success);
|
||||
error = gdk_error_trap_pop ();
|
||||
g_assert (error == BadValue);
|
||||
|
||||
/* try nested, without sync */
|
||||
|
Loading…
Reference in New Issue
Block a user