unsigned int opacity;
wintype windowType;
unsigned long damage_sequence; /* sequence when damage was created */
+ Bool destroyed;
Bool need_configure;
XConfigureEvent queue_configure;
win *w;
for (w = list; w; w = w->next)
- if (w->id == id)
+ if (w->id == id && !w->destroyed)
return w;
return 0;
}
Drawable draw = w->id;
#if HAS_NAME_WINDOW_PIXMAP
- if (hasNamePixmap && !w->pixmap)
- w->pixmap = XCompositeNameWindowPixmap (dpy, w->id);
+ if (hasNamePixmap && !w->pixmap) {
+ set_ignore (dpy, NextRequest (dpy));
+ w->pixmap = XCompositeNameWindowPixmap (dpy, w->id);
+ }
if (w->pixmap)
draw = w->pixmap;
#endif
if (prev)
{
for (p = &list; *p; p = &(*p)->next)
- if ((*p)->id == prev)
+ if ((*p)->id == prev && !(*p)->destroyed)
break;
}
else
else
{
new->damage_sequence = NextRequest (dpy);
+ set_ignore (dpy, NextRequest (dpy));
new->damage = XDamageCreate (dpy, id, XDamageReportNonEmpty);
}
new->alphaPict = None;
new->shadow_width = 0;
new->shadow_height = 0;
new->opacity = OPAQUE;
+ new->destroyed = False;
new->need_configure = False;
new->borderClip = None;
/* rehook */
for (prev = &list; *prev; prev = &(*prev)->next)
{
- if ((*prev)->id == new_above)
+ if ((*prev)->id == new_above && !(*prev)->destroyed)
break;
}
w->next = *prev;
XFixesDestroyRegion (dpy, extents);
add_damage (dpy, damage);
}
+
+ clipChanged = True;
}
+
w->a.override_redirect = ce->override_redirect;
restack_win (dpy, w, ce->above);
- clipChanged = True;
}
static void
win **prev, *w;
for (prev = &list; (w = *prev); prev = &w->next)
- if (w->id == id)
+ if (w->id == id && w->destroyed)
{
finish_unmap_win (dpy, w);
*prev = w->next;
{
win *w = find_win (dpy, id);
+ if (w) w->destroyed = True;
+
#if HAS_NAME_WINDOW_PIXMAP
if (w && w->pixmap && fade && winTypeFade[w->windowType])
set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step,
- destroy_callback, False, (w->a.map_state != IsUnmapped));
+ destroy_callback, False, True);
else
#endif
{