The call of gdk_x11_atom_to_xatom_for_display with GDK_NONE is very nasty as GDK_NONE is something that is returned by gdk in some special cases and should not be sent back to gtk (kick me if I'm wrong). Anyhow, due to some bug in gtk it used to be harmless to do so ( http://bugzilla.gnome.org/show_bug.cgi?id=580511 ) but as it has been corrected gdk_x11_atom_to_xatom_for_display instead of returning a valid xatom with "None" as id. returns anything but an xatom then XSendEvent() causes the server to kill the client.
The patch I propose will break this behaviour as near as possible of the calls of gdk_x11_atom_to_xatom_for_display() in rox_wmspec_change_state() (gui-support.c) and is quite dirty.
Some better thing to do would be to avoid calling gdk_x11_atom_to_xatom_for_display() with GDK_NONE as a parameter as it is done below in keep_below(). In that function prbably only state2 is likely to be equal to GDK_NONE as the call is explicitally done with this value, but I state both state1 and state2 in the patch I propose. Another way would be to test the validity of xatom before calling XSendEvent() that will not suppress gtk critical warning but would prevent application crashes.
Anyhow, my patch prevents both gtk critical warning (that experiment other gtk2 programs as iceape/seamonkey and bluefish for example) prevents the crash, and does not seem to modify the expected behaviour
Log in to post a comment.