hopefully fix some stuff with kde tray icons

This commit is contained in:
Mikael Magnusson 2004-02-24 20:11:36 +00:00
parent 2342c6224c
commit a5451fa6fa

View file

@ -505,26 +505,35 @@ void frame_grab_client(ObFrame *self, ObClient *client)
void frame_release_client(ObFrame *self, ObClient *client)
{
XEvent ev;
gboolean reparent = TRUE;
g_assert(self->client == client);
/* check if the app has already reparented its window away */
if (XCheckTypedWindowEvent(ob_display, client->window,
ReparentNotify, &ev)) {
XPutBackEvent(ob_display, &ev);
while (XCheckTypedWindowEvent(ob_display, client->window,
ReparentNotify, &ev))
{
/* This check makes sure we don't catch our own reparent action to
our frame window. This doesn't count as the app reparenting itself
away of course.
/* re-map the window since the unmanaging process unmaps it */
Reparent events that are generated by us are just discarded here.
They are of no consequence to us anyhow.
*/
if (ev.xreparent.parent != self->plate) {
reparent = FALSE;
XPutBackEvent(ob_display, &ev);
break;
}
}
/* XXX ... um no it doesnt it unmaps its parent, the window itself
retains its mapped state, no?! XXX
XMapWindow(ob_display, client->window); */
} else {
/* according to the ICCCM - if the client doesn't reparent itself,
then we will reparent the window to root for them */
XReparentWindow(ob_display, client->window,
if (reparent) {
/* according to the ICCCM - if the client doesn't reparent itself,
then we will reparent the window to root for them */
XReparentWindow(ob_display, client->window,
RootWindow(ob_display, ob_screen),
client->area.x,
client->area.y);
client->area.x,
client->area.y);
}
/* remove all the windows for the frame from the window_map */