X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=c8d47882373c97da6fbb6f98ef651cfa2a19f5d2;hb=b86872620805bf5deb14aed27b2748f8c1955460;hp=bb8a74f57064a9fbce6be05d034c7158fba71a4c;hpb=fb3848450e649a05c0bed84a02bc9ab4e563b5d9;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index bb8a74f5..c8d47882 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -24,6 +24,7 @@ OBFrame::OBFrame(OBClient *client, otk::Style *style) : otk::OtkWidget(Openbox::instance, style), _client(client), _screen(otk::OBDisplay::screenInfo(client->screen())), + _plate(this), _titlebar(this), _button_close(&_titlebar), _button_iconify(&_titlebar), @@ -48,11 +49,14 @@ OBFrame::OBFrame(OBClient *client, otk::Style *style) _handle.unmanaged(); _grip_left.unmanaged(); _grip_right.unmanaged(); + _plate.unmanaged(); + + _plate.show(); _button_close.setText("X"); _button_iconify.setText("I"); _button_max.setText("M"); - _button_stick.setText("C"); + _button_stick.setText("S"); _label.setText(_client->title()); _style = 0; @@ -73,7 +77,21 @@ void OBFrame::setStyle(otk::Style *style) assert(style); otk::OtkWidget::setStyle(style); - + // set the grips' textures + _grip_left.setTexture(style->getGripFocus()); + _grip_left.setUnfocusTexture(style->getGripUnfocus()); + _grip_left.setPressedFocusTexture(style->getGripFocus()); + _grip_left.setPressedUnfocusTexture(style->getGripUnfocus()); + _grip_right.setTexture(style->getGripFocus()); + _grip_right.setUnfocusTexture(style->getGripUnfocus()); + _grip_right.setPressedFocusTexture(style->getGripFocus()); + _grip_right.setPressedUnfocusTexture(style->getGripUnfocus()); + + _titlebar.setTexture(style->getTitleFocus()); + _titlebar.setUnfocusTexture(style->getTitleUnfocus()); + _handle.setTexture(style->getHandleFocus()); + _handle.setUnfocusTexture(style->getHandleUnfocus()); + // if a style was previously set, then 'replace' is true, cause we're // replacing a style bool replace = (_style); @@ -85,6 +103,10 @@ void OBFrame::setStyle(otk::Style *style) _style = style; + // XXX: change when focus changes! + XSetWindowBorder(otk::OBDisplay::display, _plate.getWindow(), + _style->getFrameFocus()->color().pixel()); + XSetWindowBorder(otk::OBDisplay::display, getWindow(), _style->getBorderColor()->pixel()); XSetWindowBorder(otk::OBDisplay::display, _titlebar.getWindow(), @@ -96,13 +118,6 @@ void OBFrame::setStyle(otk::Style *style) XSetWindowBorder(otk::OBDisplay::display, _handle.getWindow(), _style->getBorderColor()->pixel()); - // XXX: if (focused) - XSetWindowBackground(otk::OBDisplay::display, getWindow(), - _style->getFrameFocus()->color().pixel()); - // XXX: else - // XXX: XSetWindowBackground(otk::OBDisplay::display, _window, - // XXX: _style->getFrameUnfocus().color().pixel()); - // if !replace, then adjust() will get called after the client is grabbed! if (replace) adjust(); // size/position everything @@ -115,19 +130,20 @@ void OBFrame::adjust() _decorations = _client->decorations(); _decorations = 0xffffffff; - int width; // the width of the client window and the border around it + int width; // the width of the whole frame int bwidth; // width to make borders + int cbwidth; // width of the inner client border if (_decorations & OBClient::Decor_Border) { bwidth = _style->getBorderWidth(); - _size.left = _size.top = _size.bottom = _size.right = - _style->getFrameWidth(); - width = _client->area().width() + _style->getFrameWidth() * 2; - } else { - bwidth = 0; - _size.left = _size.top = _size.bottom = _size.right = 0; - width = _client->area().width(); - } + cbwidth = _style->getFrameWidth(); + } else + bwidth = cbwidth = 0; + _size.left = _size.top = _size.bottom = _size.right = cbwidth; + width = _client->area().width() + cbwidth * 2; + + XSetWindowBorderWidth(otk::OBDisplay::display, _plate.getWindow(), cbwidth); + XSetWindowBorderWidth(otk::OBDisplay::display, getWindow(), bwidth); XSetWindowBorderWidth(otk::OBDisplay::display, _titlebar.getWindow(), bwidth); @@ -179,9 +195,8 @@ void OBFrame::adjust() // that the ONE LABEL!! // adds an extra sep so that there's a space on either side of the // titlebar.. note: x = sep, below. - _label.setWidth(_label.width() - - ((_button_iconify.width() + sep) * - (layout.size() - 1) + sep * 2)); + _label.setWidth(width - sep * 2 - + (_button_iconify.width() + sep) * (layout.size() - 1)); int x = sep; for (int i = 0, len = layout.size(); i < len; ++i) { @@ -215,8 +230,7 @@ void OBFrame::adjust() if (_decorations & OBClient::Decor_Handle) { _handle.setGeometry(-bwidth, - _size.top + _client->area().height() + - _style->getFrameWidth(), + _size.top + _client->area().height() + cbwidth, width, _style->getHandleWidth()); _grip_left.setGeometry(-bwidth, -bwidth, @@ -240,8 +254,8 @@ void OBFrame::adjust() resize(_size.left + _size.right + _client->area().width(), _size.top + _size.bottom + _client->area().height()); - XMoveWindow(otk::OBDisplay::display, _client->window(), - _size.left, _size.top); + _plate.setGeometry(_size.left - cbwidth, _size.top - cbwidth, + _client->area().width(), _client->area().height()); // map/unmap all the windows if (_decorations & OBClient::Decor_Titlebar) { @@ -331,7 +345,8 @@ void OBFrame::grabClient() //XSelectInput(otk::OBDisplay::display, _window, SubstructureRedirectMask); // reparent the client to the frame - XReparentWindow(otk::OBDisplay::display, _client->window(), getWindow(), 0, 0); + XReparentWindow(otk::OBDisplay::display, _client->window(), + _plate.getWindow(), 0, 0); _client->ignore_unmaps++; // raise the client above the frame