Setting a breakpoint on _XError was wrong, because in the case of the above stack, it is inside gdk_error_trap_push/gdk_error_trap_pop which protects XDeleteProperty from crashing (even when _XError is called).
So my suggestion of breaking on _XError was completely wrong. We should break on gdk_x_error instead.
Sorry, this was a false alarm.
Setting a breakpoint on _XError was wrong, because in the case of the above stack, it is inside gdk_error_ trap_push/ gdk_error_ trap_pop which protects XDeleteProperty from crashing (even when _XError is called).
So my suggestion of breaking on _XError was completely wrong. We should break on gdk_x_error instead.