X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fbuttonwidget.cc;h=390e5948e9f88810c98872cac78eb59a331cc34f;hb=d222c565432a146313fe4673b67c517b6d649182;hp=efb98e7652babc990da115232a9e60e44d9a7b3d;hpb=5fdd493d0d2255f134114e69f028371366f4dfd3;p=chaz%2Fopenbox diff --git a/src/buttonwidget.cc b/src/buttonwidget.cc index efb98e76..390e5948 100644 --- a/src/buttonwidget.cc +++ b/src/buttonwidget.cc @@ -81,49 +81,52 @@ void OBButtonWidget::update() { otk::PixmapMask *pm; int width; + bool draw = _dirty; otk::OtkWidget::update(); - switch (type()) { - case Type_StickyButton: - pm = _style->getStickyButtonMask(); - break; - case Type_CloseButton: - pm = _style->getCloseButtonMask(); - break; - case Type_MaximizeButton: - pm = _style->getMaximizeButtonMask(); - break; - case Type_IconifyButton: - pm = _style->getIconifyButtonMask(); - break; - case Type_LeftGrip: - case Type_RightGrip: - return; // no drawing - default: - assert(false); // there's no other button widgets! - } + if (draw) { + switch (type()) { + case Type_StickyButton: + pm = _style->getStickyButtonMask(); + break; + case Type_CloseButton: + pm = _style->getCloseButtonMask(); + break; + case Type_MaximizeButton: + pm = _style->getMaximizeButtonMask(); + break; + case Type_IconifyButton: + pm = _style->getIconifyButtonMask(); + break; + case Type_LeftGrip: + case Type_RightGrip: + return; // no drawing + default: + assert(false); // there's no other button widgets! + } - if (pm->mask == None) return; // no mask for the button, leave it empty + if (pm->mask == None) return; // no mask for the button, leave it empty - width = _rect.width(); + width = _rect.width(); - otk::BPen pen(_focused ? *_style->getButtonPicFocus() : - *_style->getButtonPicUnfocus()); - - // set the clip region - XSetClipMask(otk::OBDisplay::display, pen.gc(), pm->mask); - XSetClipOrigin(otk::OBDisplay::display, pen.gc(), - (width - pm->w)/2, (width - pm->h)/2); - - // fill in the clipped region - XFillRectangle(otk::OBDisplay::display, _window, pen.gc(), - (width - pm->w)/2, (width - pm->h)/2, - (width + pm->w)/2, (width + pm->h)/2); - - // unset the clip region - XSetClipMask(otk::OBDisplay::display, pen.gc(), None); - XSetClipOrigin(otk::OBDisplay::display, pen.gc(), 0, 0); + otk::BPen pen(_focused ? *_style->getButtonPicFocus() : + *_style->getButtonPicUnfocus()); + + // set the clip region + XSetClipMask(otk::OBDisplay::display, pen.gc(), pm->mask); + XSetClipOrigin(otk::OBDisplay::display, pen.gc(), + (width - pm->w)/2, (width - pm->h)/2); + + // fill in the clipped region + XFillRectangle(otk::OBDisplay::display, _window, pen.gc(), + (width - pm->w)/2, (width - pm->h)/2, + (width + pm->w)/2, (width + pm->h)/2); + + // unset the clip region + XSetClipMask(otk::OBDisplay::display, pen.gc(), None); + XSetClipOrigin(otk::OBDisplay::display, pen.gc(), 0, 0); + } }