In reparent event handler, use parent indicated by event.

This avoids multiple roundtrips during window creation/destruction.

I wonder why it was necessary to look up the parent with XQueryTree.
IIRC there where some misbehaving clients, maybe related to switching
in/out of fullscreen mode.

SVN revision: 47922
This commit is contained in:
Kim Woelders 2010-04-11 11:43:02 +00:00
parent 8551c41582
commit 4fbabcefd0
1 changed files with 4 additions and 4 deletions

View File

@ -1118,7 +1118,7 @@ EwinEventDestroy(EWin * ewin)
}
static void
EwinEventReparent(EWin * ewin)
EwinEventReparent(EWin * ewin, XEvent * ev)
{
Window parent;
@ -1128,7 +1128,7 @@ EwinEventReparent(EWin * ewin)
if (EoIsGone(ewin))
parent = None;
else
parent = EXWindowGetParent(EwinGetClientXwin(ewin));
parent = ev->xreparent.parent;
if (EDebug(EDBUG_TYPE_EWINS))
Eprintf("EwinEventReparent %#lx st=%d parent=%#lx: %s\n",
EwinGetClientXwin(ewin), ewin->state.state, parent,
@ -2350,7 +2350,7 @@ EwinHandleEventsContainer(Win win __UNUSED__, XEvent * ev, void *prm)
if (ev->xreparent.window != EwinGetClientXwin(ewin))
break;
do_reparent:
EwinEventReparent(ewin);
EwinEventReparent(ewin, ev);
break;
case EX_EVENT_MAP_GONE:
@ -2468,7 +2468,7 @@ EwinHandleEventsRoot(Win win __UNUSED__, XEvent * ev, void *prm __UNUSED__)
break;
if (ev->type == EX_EVENT_REPARENT_GONE)
EoSetGone(ewin);
EwinEventReparent(ewin);
EwinEventReparent(ewin, ev);
break;
case ClientMessage: