Bug fix: Shape update of opaque windows not handled correctly

- Fix a bug that causes rendering issues if a opaque window changes
  shape.

- Remove abundant handling code in paint_preprocess() when generating
  border_size as border_size() is no longer relying on
  XFixesCreateRegionFromWindow() right now by default.

- Add extra code to print backtrace in DEBUG_ALLOC_REG.

- Move initialization of fade_time closer to first paint.
This commit is contained in:
Richard Grenville
2012-11-08 19:39:13 +08:00
parent 357bf94efc
commit 56ce896feb
2 changed files with 38 additions and 12 deletions

View File

@@ -1428,15 +1428,7 @@ paint_preprocess(Display *dpy, win *list) {
// Fetch bounding region
if (!w->border_size) {
// Build a border_size ourselves if window is not shaped, to avoid
// getting an invalid border_size region from X if the window is
// unmapped/destroyed
if (!w->bounding_shaped) {
w->border_size = win_get_region(dpy, w);
}
else if (IsUnmapped != w->a.map_state) {
w->border_size = border_size(dpy, w);
}
w->border_size = border_size(dpy, w);
}
// Fetch window extents
@@ -3220,6 +3212,8 @@ ev_shape_notify(XShapeEvent *ev) {
// Redo bounding shape detection and rounded corner detection
win_update_shape(dpy, w);
update_reg_ignore_expire(w);
}
/**
@@ -4478,8 +4472,6 @@ main(int argc, char **argv) {
get_cfg(argc, argv);
fade_time = get_time_ms();
dpy = XOpenDisplay(opts.display);
if (!dpy) {
fprintf(stderr, "Can't open display\n");
@@ -4659,6 +4651,8 @@ main(int argc, char **argv) {
reg_ignore_expire = True;
fade_time = get_time_ms();
t = paint_preprocess(dpy, list);
paint_all(dpy, None, t);