all repos — openbox @ 8bf56a288f1c9e828c9a4c2bd48057de2231f5e0

openbox fork - make it a bit more like ryudo

allocate colors right away instead of delaying it, since they get allocated out of the rendercontrol, and it will never fail.
Dana Jansens danakj@orodu.net
commit

8bf56a288f1c9e828c9a4c2bd48057de2231f5e0

parent

716ab805a0053ceb494ad9a20e058ba7aa9c5bbb

2 files changed, 20 insertions(+), 44 deletions(-)

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

@@ -28,23 +28,21 @@ unsigned char green, unsigned char blue)

: _screen(screen), _red(red), _green(green), - _blue(blue), - _allocated(false), - _created(false) + _blue(blue) { + create(); } RenderColor::RenderColor(int screen, RGB rgb) : _screen(screen), _red(rgb.r), _green(rgb.g), - _blue(rgb.b), - _allocated(false), - _created(false) + _blue(rgb.b) { + create(); } -void RenderColor::create() const +void RenderColor::create() { unsigned long color = _blue | _green << 8 | _red << 16;

@@ -67,7 +65,6 @@ xcol.green = (_green << 8) | _green;

xcol.blue = (_blue << 8) | _blue; display->renderControl(_screen)->allocateColor(&xcol); - _allocated = true; _pixel = xcol.pixel; gcv.foreground = _pixel;

@@ -81,41 +78,23 @@ item = new CacheItem(_gc, _pixel);

_cache[_screen][color] = item; ++item->count; } - - _created = true; -} - -unsigned long RenderColor::pixel() const -{ - if (!_created) create(); - return _pixel; -} - -GC RenderColor::gc() const -{ - if (!_created) create(); - return _gc; } RenderColor::~RenderColor() { unsigned long color = _blue | _green << 8 | _red << 16; - if (_created) { - CacheItem *item = _cache[_screen][color]; - assert(item); // better be... + CacheItem *item = _cache[_screen][color]; + assert(item); // better be... + + if (--item->count <= 0) { + // remove from the cache + XFreeGC(**display, _gc); + _cache[_screen][color] = 0; + delete item; - if (--item->count <= 0) { - // remove from the cache - XFreeGC(**display, _gc); - _cache[_screen][color] = 0; - delete item; - - if (_allocated) { - const ScreenInfo *info = display->screenInfo(_screen); - XFreeColors(**display, info->colormap(), &_pixel, 1, 0); - } - } + const ScreenInfo *info = display->screenInfo(_screen); + XFreeColors(**display, info->colormap(), &_pixel, 1, 0); } }
M otk/rendercolor.hhotk/rendercolor.hh

@@ -37,13 +37,10 @@ unsigned char _red;

unsigned char _green; unsigned char _blue; - mutable unsigned long _pixel; - mutable GC _gc; + unsigned long _pixel; + GC _gc; - mutable bool _allocated; - mutable bool _created; - - void create() const; + void create(); public: static void initialize();

@@ -58,8 +55,8 @@ inline int screen() const { return _screen; }

inline unsigned char red() const { return _red; } inline unsigned char green() const { return _green; } inline unsigned char blue() const { return _blue; } - unsigned long pixel() const; - GC gc() const; + unsigned long pixel() const { return _pixel; } + GC gc() const { return _gc; } }; }