X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Fwidget.cc;h=30d147c8387953b61f55cbc095bac4d442f22e79;hb=361303715b6eb54d77ed8e1c9ad8f35e44e4ede1;hp=30b03bc83839922e9575a0ecbfa41b54a9bb0560;hpb=a4c8a839a3decc54e515fd110710195eca23fd2b;p=chaz%2Fopenbox diff --git a/otk/widget.cc b/otk/widget.cc index 30b03bc8..30d147c8 100644 --- a/otk/widget.cc +++ b/otk/widget.cc @@ -37,7 +37,6 @@ Widget::Widget(int screen, EventDispatcher *ed, Direction direction, int bevel, { createWindow(overrideredir); _dispatcher->registerHandler(_window, this); - styleChanged(*RenderStyle::style(_screen)); } Widget::Widget(Widget *parent, Direction direction, int bevel) @@ -90,7 +89,7 @@ void Widget::show(bool children) _visible = true; if (_parent) _parent->calcDefaultSizes(); else { - resize(_min_size); + resize(_area.size()); } XMapWindow(**display, _window); update(); @@ -231,12 +230,14 @@ void Widget::calcDefaultSizes() } } if (_direction == Horizontal) { - _min_size = otk::Size(min_sum, min_biggest + (_bevel + _borderwidth) * 2); + _min_size = otk::Size(min_sum + (_bevel + _borderwidth) * 2, + min_biggest + (_bevel + _borderwidth) * 2); _max_size = otk::Size((fullmax ? INT_MAX : max_sum + (_bevel + _borderwidth) * 2), max_biggest); } else { - _min_size = otk::Size(min_biggest, min_sum + (_bevel + _borderwidth) * 2); + _min_size = otk::Size(min_biggest + (_bevel + _borderwidth) * 2, + min_sum + (_bevel + _borderwidth) * 2); _max_size = otk::Size(max_biggest, (fullmax ? INT_MAX : max_sum + (_bevel + _borderwidth) * 2)); } @@ -485,7 +486,14 @@ void Widget::layoutVert() void Widget::render() { - if (!_texture || !_dirty) return; + if (!_dirty) return; + if (!_texture) { + // set a solid color as the default background + XSetWindowBackground(**display, _window, + RenderStyle::style(_screen)-> + titlebarUnfocusBackground()->color().pixel()); + return; + } if (_borderwidth * 2 > _area.width() || _borderwidth * 2 > _area.height()) return; // no surface to draw on @@ -502,6 +510,7 @@ void Widget::render() // delete the old surface *after* its pixmap isn't in use anymore if (_surface) delete _surface; + s->freePixelData(); // done rendering with this surface _surface = s; _dirty = false; @@ -514,9 +523,9 @@ void Widget::renderChildren() (*it)->render(); } -void Widget::styleChanged(const RenderStyle &style) +void Widget::styleChanged(const RenderStyle &) { - _texture = style.titlebarUnfocusBackground(); + refresh(); } void Widget::exposeHandler(const XExposeEvent &e)