When a window that is mapped is reparented away from root, that is the same as it being completely unmapped+destroyed from our persective. The window will no longer be in the same position on screen, and we will no longer want to listen to events on it.
Prior to this, the w->pixmap would not be freed when a mapped window was reparented away from root, and damage would not be updated for the screen correctly.
double cur;
double finish;
double step;
double cur;
double finish;
double step;
- void (*callback) (Display *dpy, win *w, Bool gone);
+ void (*callback) (Display *dpy, win *w);
{
*prev = f->next;
if (f->callback)
{
*prev = f->next;
if (f->callback)
- (*f->callback) (dpy, f->w, f->gone);
+ (*f->callback) (dpy, f->w);
static void
set_fade (Display *dpy, win *w, double start, double finish, double step,
static void
set_fade (Display *dpy, win *w, double start, double finish, double step,
- void (*callback) (Display *dpy, win *w, Bool gone),
- Bool gone, Bool exec_callback, Bool override)
+ void (*callback) (Display *dpy, win *w),
+ Bool exec_callback, Bool override)
{
if (exec_callback)
if (f->callback)
{
if (exec_callback)
if (f->callback)
- (*f->callback)(dpy, f->w, f->gone);
+ (*f->callback)(dpy, f->w);
else if (f->cur > finish)
f->step = -step;
f->callback = callback;
else if (f->cur > finish)
f->step = -step;
f->callback = callback;
w->opacity = f->cur * OPAQUE;
#if 0
printf ("set_fade start %g step %g\n", f->cur, f->step);
w->opacity = f->cur * OPAQUE;
#if 0
printf ("set_fade start %g step %g\n", f->cur, f->step);
#endif
if (fade && fadeWindows)
#endif
if (fade && fadeWindows)
- set_fade (dpy, w, 0, get_opacity_percent (dpy, w, 1.0), fade_in_step, 0, False, True, True);
+ set_fade (dpy, w, 0, get_opacity_percent (dpy, w, 1.0), fade_in_step, 0, True, True);
#if HAS_NAME_WINDOW_PIXMAP
static void
#if HAS_NAME_WINDOW_PIXMAP
static void
-unmap_callback (Display *dpy, win *w, Bool gone)
+unmap_callback (Display *dpy, win *w)
{
finish_unmap_win (dpy, w);
}
{
finish_unmap_win (dpy, w);
}
w->a.map_state = IsUnmapped;
#if HAS_NAME_WINDOW_PIXMAP
if (w->pixmap && fade && fadeWindows)
w->a.map_state = IsUnmapped;
#if HAS_NAME_WINDOW_PIXMAP
if (w->pixmap && fade && fadeWindows)
- set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step, unmap_callback, False, False, True);
+ set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step, unmap_callback, False, True);
else
#endif
finish_unmap_win (dpy, w);
else
#endif
finish_unmap_win (dpy, w);
-finish_destroy_win (Display *dpy, Window id, Bool gone)
+finish_destroy_win (Display *dpy, Window id)
{
win **prev, *w;
for (prev = &list; (w = *prev); prev = &w->next)
if (w->id == id)
{
{
win **prev, *w;
for (prev = &list; (w = *prev); prev = &w->next)
if (w->id == id)
{
- if (gone)
- finish_unmap_win (dpy, w);
+ finish_unmap_win (dpy, w);
- if (w->picture)
- {
- set_ignore (dpy, NextRequest (dpy));
- XRenderFreePicture (dpy, w->picture);
- w->picture = None;
- }
if (w->alphaPict)
{
XRenderFreePicture (dpy, w->alphaPict);
if (w->alphaPict)
{
XRenderFreePicture (dpy, w->alphaPict);
XRenderFreePicture (dpy, w->shadowPict);
w->shadowPict = None;
}
XRenderFreePicture (dpy, w->shadowPict);
w->shadowPict = None;
}
- if (w->shadow)
- {
- XRenderFreePicture (dpy, w->shadow);
- w->shadow = None;
- }
if (w->damage != None)
{
set_ignore (dpy, NextRequest (dpy));
if (w->damage != None)
{
set_ignore (dpy, NextRequest (dpy));
#if HAS_NAME_WINDOW_PIXMAP
static void
#if HAS_NAME_WINDOW_PIXMAP
static void
-destroy_callback (Display *dpy, win *w, Bool gone)
+destroy_callback (Display *dpy, win *w)
- finish_destroy_win (dpy, w->id, gone);
+ finish_destroy_win (dpy, w->id);
-destroy_win (Display *dpy, Window id, Bool gone, Bool fade)
+destroy_win (Display *dpy, Window id, Bool fade)
{
win *w = find_win (dpy, id);
#if HAS_NAME_WINDOW_PIXMAP
if (w && w->pixmap && fade && fadeWindows)
set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step,
{
win *w = find_win (dpy, id);
#if HAS_NAME_WINDOW_PIXMAP
if (w && w->pixmap && fade && fadeWindows)
set_fade (dpy, w, w->opacity*1.0/OPAQUE, 0.0, fade_out_step,
- destroy_callback, gone, False,
- (w->a.map_state != IsUnmapped));
+ destroy_callback, False, (w->a.map_state != IsUnmapped));
- finish_destroy_win (dpy, id, gone);
+ finish_destroy_win (dpy, id);
{
clipChanged = True;
if (fadeWindows)
{
clipChanged = True;
if (fadeWindows)
- set_fade (dpy, w, 0, get_opacity_percent (dpy, w, 1.0), fade_in_step, 0, False, True, True);
+ set_fade (dpy, w, 0, get_opacity_percent (dpy, w, 1.0), fade_in_step, 0, True, True);
configure_win (dpy, &ev.xconfigure);
break;
case DestroyNotify:
configure_win (dpy, &ev.xconfigure);
break;
case DestroyNotify:
- destroy_win (dpy, ev.xdestroywindow.window, True, True);
+ destroy_win (dpy, ev.xdestroywindow.window, True);
break;
case MapNotify:
map_win (dpy, ev.xmap.window, ev.xmap.serial, True);
break;
case MapNotify:
map_win (dpy, ev.xmap.window, ev.xmap.serial, True);
if (ev.xreparent.parent == root)
add_win (dpy, ev.xreparent.window, 0);
else
if (ev.xreparent.parent == root)
add_win (dpy, ev.xreparent.window, 0);
else
- destroy_win (dpy, ev.xreparent.window, False, True);
+ destroy_win (dpy, ev.xreparent.window, True);
break;
case CirculateNotify:
circulate_win (dpy, &ev.xcirculate);
break;
case CirculateNotify:
circulate_win (dpy, &ev.xcirculate);
{
if (fadeTrans)
set_fade (dpy, w, w->opacity*1.0/OPAQUE, get_opacity_percent (dpy, w, 1.0),
{
if (fadeTrans)
set_fade (dpy, w, w->opacity*1.0/OPAQUE, get_opacity_percent (dpy, w, 1.0),
- fade_out_step, 0, False, True, False);
+ fade_out_step, 0, True, False);
else
{
w->opacity = get_opacity_prop(dpy, w, OPAQUE);
else
{
w->opacity = get_opacity_prop(dpy, w, OPAQUE);