Lines 2209-2249
handleEvent (CompDisplay *d,
Link Here
|
2209 |
|
2209 |
|
2210 |
if (w) |
2210 |
if (w) |
2211 |
{ |
2211 |
{ |
|
|
2212 |
XserverRegion parts = XFixesCreateRegion(de->display, NULL, 0); |
2213 |
XRectangle *rects; |
2214 |
int nRects; |
2215 |
|
2212 |
w->texture->oldMipmaps = TRUE; |
2216 |
w->texture->oldMipmaps = TRUE; |
2213 |
|
2217 |
|
|
|
2218 |
// Get the damage region |
2219 |
XDamageSubtract(de->display, de->damage, None, parts); |
2220 |
rects = XFixesFetchRegion(de->display, parts, &nRects); |
2221 |
XFixesDestroyRegion(de->display, parts); |
2222 |
|
2214 |
if (w->syncWait) |
2223 |
if (w->syncWait) |
2215 |
{ |
2224 |
{ |
2216 |
if (w->nDamage == w->sizeDamage) |
2225 |
int i; |
|
|
2226 |
|
2227 |
if (w->nDamage + nRects - 1 >= w->sizeDamage) |
2217 |
{ |
2228 |
{ |
2218 |
if (w->damageRects) |
2229 |
w->damageRects = realloc (w->damageRects, |
2219 |
{ |
2230 |
(w->sizeDamage + nRects) * |
2220 |
w->damageRects = realloc (w->damageRects, |
|
|
2221 |
(w->sizeDamage + 1) * |
2222 |
sizeof (XRectangle)); |
2231 |
sizeof (XRectangle)); |
2223 |
w->sizeDamage += 1; |
2232 |
w->sizeDamage += nRects; |
2224 |
} |
|
|
2225 |
else |
2226 |
{ |
2227 |
w->damageRects = malloc (sizeof (XRectangle)); |
2228 |
w->sizeDamage = 1; |
2229 |
} |
2230 |
} |
2233 |
} |
2231 |
|
2234 |
|
2232 |
w->damageRects[w->nDamage].x = de->area.x; |
2235 |
for (i = 0; i < nRects; i++) |
2233 |
w->damageRects[w->nDamage].y = de->area.y; |
2236 |
{ |
2234 |
w->damageRects[w->nDamage].width = de->area.width; |
2237 |
w->damageRects[w->nDamage] = rects[i]; |
2235 |
w->damageRects[w->nDamage].height = de->area.height; |
2238 |
w->nDamage++; |
2236 |
w->nDamage++; |
2239 |
} |
2237 |
} |
2240 |
} |
2238 |
else |
2241 |
else |
2239 |
{ |
2242 |
{ |
2240 |
handleWindowDamageRect (w, |
2243 |
int i; |
2241 |
de->area.x, |
2244 |
|
2242 |
de->area.y, |
2245 |
for (i = 0; i < nRects; i++) |
2243 |
de->area.width, |
2246 |
{ |
2244 |
de->area.height); |
2247 |
handleWindowDamageRect (w, |
|
|
2248 |
rects[i].x, |
2249 |
rects[i].y, |
2250 |
rects[i].width, |
2251 |
rects[i].height); |
2252 |
} |
2245 |
} |
2253 |
} |
|
|
2254 |
free(rects); |
2246 |
} |
2255 |
} |
|
|
2256 |
|
2247 |
} |
2257 |
} |
2248 |
else if (d->shapeExtension && |
2258 |
else if (d->shapeExtension && |
2249 |
event->type == d->shapeEvent + ShapeNotify) |
2259 |
event->type == d->shapeEvent + ShapeNotify) |