From f2922d7dbde35eadcea78e0536f5f61fb9ca4e39 Mon Sep 17 00:00:00 2001 From: o9000 Date: Wed, 4 Nov 2015 02:36:51 +0100 Subject: [PATCH] Area: do not destroy pixmap when not necessary --- src/util/area.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/util/area.c b/src/util/area.c index 01ad167..40aa40f 100644 --- a/src/util/area.c +++ b/src/util/area.c @@ -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;