all repos — openbox @ ea20fcc27243621ff9f2195e9dbac4ea1961b17f

openbox fork - make it a bit more like ryudo

only free allocated colors
Dana Jansens danakj@orodu.net
commit

ea20fcc27243621ff9f2195e9dbac4ea1961b17f

parent

15f2208209bdf597264d910e8b3e30c29339a315

1 files changed, 14 insertions(+), 9 deletions(-)

jump to
M otk/rendercolor.ccotk/rendercolor.cc

@@ -28,7 +28,8 @@ : _screen(screen),

_red(red), _green(green), _blue(blue), - _allocated(false) + _allocated(false), + _created(false) { }

@@ -37,7 +38,8 @@ : _screen(screen),

_red(rgb.r), _green(rgb.g), _blue(rgb.b), - _allocated(false) + _allocated(false), + _created(false) { }

@@ -68,7 +70,8 @@ if (! XAllocColor(**display, info->colormap(), &xcol)) {

fprintf(stderr, "RenderColor: color alloc error: rgb:%x/%x/%x\n", _red, _green, _blue); xcol.pixel = 0; - } + } else + _allocated = true; _pixel = xcol.pixel; gcv.foreground = _pixel;

@@ -83,18 +86,18 @@ _cache[_screen][color] = item;

++item->count; } - _allocated = true; + _created = true; } unsigned long RenderColor::pixel() const { - if (!_allocated) create(); + if (!_created) create(); return _pixel; } GC RenderColor::gc() const { - if (!_allocated) create(); + if (!_created) create(); return _gc; }

@@ -102,7 +105,7 @@ RenderColor::~RenderColor()

{ unsigned long color = _blue | _green << 8 | _red << 16; - if (_allocated) { + if (_created) { CacheItem *item = _cache[_screen][color]; assert(item); // better be...

@@ -112,8 +115,10 @@ XFreeGC(**display, _gc);

_cache[_screen][color] = 0; delete item; - const ScreenInfo *info = display->screenInfo(_screen); - XFreeColors(**display, info->colormap(), &_pixel, 1, 0); + if (_allocated) { + const ScreenInfo *info = display->screenInfo(_screen); + XFreeColors(**display, info->colormap(), &_pixel, 1, 0); + } } } }