@ -1258,6 +1258,18 @@ static void processEvent(XEvent *event)
switch ( event - > type )
{
case CreateNotify :
{
window - > x11 . parent = event - > xcreatewindow . parent ;
return ;
}
case ReparentNotify :
{
window - > x11 . parent = event - > xreparent . parent ;
return ;
}
case KeyPress :
{
const int key = translateKey ( keycode ) ;
@ -1542,18 +1554,28 @@ static void processEvent(XEvent *event)
window - > x11 . height = event - > xconfigure . height ;
}
if ( event - > xconfigure . x ! = window - > x11 . xpos | |
event - > xconfigure . y ! = window - > x11 . ypos )
int xpos = event - > xconfigure . x ;
int ypos = event - > xconfigure . y ;
// NOTE: ConfigureNotify events from the server are in local
// coordinates, so if we are reparented we need to translate
// the position into root (screen) coordinates
if ( ! event - > xany . send_event & & window - > x11 . parent ! = _glfw . x11 . root )
{
if ( window - > x11 . overrideRedirect | | event - > xany . send_event )
{
_glfwInputWindowPos ( window ,
event - > xconfigure . x ,
event - > xconfigure . y ) ;
Window dummy ;
XTranslateCoordinates ( _glfw . x11 . display ,
window - > x11 . parent ,
_glfw . x11 . root ,
xpos , ypos ,
& xpos , & ypos ,
& dummy ) ;
}
window - > x11 . xpos = event - > xconfigure . x ;
window - > x11 . ypos = event - > xconfigure . y ;
}
if ( xpos ! = window - > x11 . xpos | | ypos ! = window - > x11 . ypos )
{
_glfwInputWindowPos ( window , xpos , ypos ) ;
window - > x11 . xpos = xpos ;
window - > x11 . ypos = ypos ;
}
return ;