X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=a4188b6ee44b93111beb9f0d3e84f2c9cd52f798;hb=dca8c61a91cab29128a72f252b70f4bd9f7786ff;hp=5ffdc726ada7ea2bb9be421e99203d02fc664e97;hpb=e4fa1c5a71fd8719ead9c9b9211c142c4970dcca;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index 5ffdc726..a4188b6e 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -1,8 +1,6 @@ // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*- -#ifdef HAVE_CONFIG_H -# include "../config.h" -#endif +#include "config.h" extern "C" { #ifdef SHAPE @@ -88,8 +86,8 @@ Frame::Frame(Client *client) _numbuttons = 0; _buttons = new Window[0]; _buttons_sur = new otk::Surface*[0]; - _titleorder = new unsigned int[1]; - _titleorder[0] = (unsigned)-1; + _titleorder = new int[1]; + _titleorder[0] = -1; // register all of the windows with the event dispatcher Window *w = allWindows(); @@ -106,7 +104,7 @@ Frame::~Frame() openbox->clearHandler(w[i]); delete [] w; - for (unsigned int i = 0; i < _numbuttons; ++i) { + for (int i = 0; i < _numbuttons; ++i) { XDestroyWindow(**otk::display, _buttons[i]); delete _buttons_sur[i]; } @@ -167,7 +165,7 @@ Window *Frame::allWindows() const w[i++] = _handle; w[i++] = _lgrip; w[i++] = _rgrip; - for (unsigned int j = 0; j < _numbuttons; ++j) + for (int j = 0; j < _numbuttons; ++j) w[j + i++] = _buttons[j]; w[i] = 0; return w; @@ -194,7 +192,7 @@ void Frame::applyStyle(const otk::RenderStyle &style) XResizeWindow(**otk::display, _lgrip, geom.grip_width(), geom.handle_height); XResizeWindow(**otk::display, _rgrip, geom.grip_width(), geom.handle_height); - for (unsigned int i = 0; i < _numbuttons; ++i) + for (int i = 0; i < _numbuttons; ++i) XResizeWindow(**otk::display, _buttons[i], geom.button_size, geom.button_size); } @@ -229,6 +227,7 @@ static void render(int screen, const otk::Size &size, Window win, XSetWindowBackgroundPixmap(**otk::display, win, s->pixmap()); XClearWindow(**otk::display, win); if (*surface) delete *surface; + s->freePixelData(); *surface = s; } @@ -350,16 +349,17 @@ void Frame::renderLabel() otk::ustring t = _client->title(); // the actual text to draw int x = geom.bevel; // x coord for the text - if ((unsigned)x * 2 > geom.label_width) return; // no room at all + if (x * 2 > geom.label_width) return; // no room at all // find a string that will fit inside the area for text otk::ustring::size_type text_len = t.size(); - unsigned int length; - unsigned int maxsize = geom.label_width - geom.bevel * 2; + int length; + int maxsize = geom.label_width - geom.bevel * 2; do { t.resize(text_len); - length = font->measureString(t); + length = font->measureString(t); // this returns an unsigned, so check < 0 + if (length < 0) length = maxsize; // if the string's that long just adjust } while (length > maxsize && text_len-- > 0); if (text_len <= 0) return; // won't fit anything @@ -383,6 +383,7 @@ void Frame::renderLabel() XSetWindowBackgroundPixmap(**otk::display, _label, s->pixmap()); XClearWindow(**otk::display, _label); if (_label_sur) delete _label_sur; + s->freePixelData(); _label_sur = s; }