Area: do not destroy pixmap when not necessary

This commit is contained in:
o9000 2015-11-04 02:36:51 +01:00
parent 61016a9318
commit f2922d7dbd

View file

@ -419,13 +419,24 @@ void show(Area *a)
void draw (Area *a)
{
if (a->pix) XFreePixmap (server.dsp, a->pix);
a->pix = XCreatePixmap (server.dsp, server.root_win, a->width, a->height, server.depth);
if (a->pix) {
unsigned int d1, width, height;
Window d2;
int d3;
XGetGeometry(server.dsp, server.root_win, &d2, &d3, &d3, &width, &height, &d1, &d1);
if (width != a->width || height != a->height) {
XFreePixmap (server.dsp, a->pix);
a->pix = XCreatePixmap(server.dsp, server.root_win, a->width, a->height, server.depth);
}
} else {
a->pix = XCreatePixmap(server.dsp, server.root_win, a->width, a->height, server.depth);
}
// add layer of root pixmap (or clear pixmap if real_transparency==true)
if (server.real_transparency)
clear_pixmap(a->pix, 0 ,0, a->width, a->height);
XCopyArea (server.dsp, ((Panel *)a->panel)->temp_pmap, a->pix, server.gc, a->posx, a->posy, a->width, a->height, 0, 0);
else
XCopyArea (server.dsp, ((Panel *)a->panel)->temp_pmap, a->pix, server.gc, a->posx, a->posy, a->width, a->height, 0, 0);
cairo_surface_t *cs;
cairo_t *c;