[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21991] branches/blender2.5/blender/intern /ghost/intern/GHOST_SystemX11.cpp: Fix crash on Linux with some WM.
Diego Borghetti
bdiego at gmail.com
Tue Jul 28 21:14:27 CEST 2009
Revision: 21991
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21991
Author: bdiego
Date: 2009-07-28 21:14:25 +0200 (Tue, 28 Jul 2009)
Log Message:
-----------
Fix crash on Linux with some WM.
This is fixed on trunk but was remove in some merge (give conflict).
Modified Paths:
--------------
branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp
Modified: branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp
===================================================================
--- branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp 2009-07-28 18:59:36 UTC (rev 21990)
+++ branches/blender2.5/blender/intern/ghost/intern/GHOST_SystemX11.cpp 2009-07-28 19:14:25 UTC (rev 21991)
@@ -534,11 +534,28 @@
window, data);
}
} else if (((Atom)xcme.data.l[0]) == m_wm_take_focus) {
+ XWindowAttributes attr;
+ Window fwin;
+ int revert_to;
+
/* as ICCCM say, we need reply this event
* with a SetInputFocus, the data[1] have
* the valid timestamp (send by the wm).
+ *
+ * Some WM send this event before the
+ * window is really mapped (for example
+ * change from virtual desktop), so we need
+ * to be sure that our windows is mapped
+ * or this call fail and close blender.
*/
- XSetInputFocus(m_display, xcme.window, RevertToParent, xcme.data.l[1]);
+ if (XGetWindowAttributes(m_display, xcme.window, &attr) == True) {
+ if (XGetInputFocus(m_display, &fwin, &revert_to) == True) {
+ if (attr.map_state == IsViewable) {
+ if (fwin != xcme.window)
+ XSetInputFocus(m_display, xcme.window, RevertToParent, xcme.data.l[1]);
+ }
+ }
+ }
} else {
/* Unknown client message, ignore */
}
More information about the Bf-blender-cvs
mailing list