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,20 +505,29 @@ void frame_grab_client(ObFrame *self, ObClient *client)
void frame_release_client(ObFrame *self, ObClient *client) void frame_release_client(ObFrame *self, ObClient *client)
{ {
XEvent ev; XEvent ev;
gboolean reparent = TRUE;
g_assert(self->client == client); g_assert(self->client == client);
/* check if the app has already reparented its window away */ /* check if the app has already reparented its window away */
if (XCheckTypedWindowEvent(ob_display, client->window, while (XCheckTypedWindowEvent(ob_display, client->window,
ReparentNotify, &ev)) { 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.
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); XPutBackEvent(ob_display, &ev);
break;
}
}
/* re-map the window since the unmanaging process unmaps it */ if (reparent) {
/* 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, /* according to the ICCCM - if the client doesn't reparent itself,
then we will reparent the window to root for them */ then we will reparent the window to root for them */
XReparentWindow(ob_display, client->window, XReparentWindow(ob_display, client->window,