X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=40b9b9c635c7f1e57784ade090cda3b28db7397a;hb=a77f0fb344978bb4dafd2ad4639f3de3e090bf7b;hp=bb8a74f57064a9fbce6be05d034c7158fba71a4c;hpb=fb3848450e649a05c0bed84a02bc9ab4e563b5d9;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index bb8a74f5..40b9b9c6 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,6 +49,9 @@ 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"); @@ -73,6 +77,11 @@ void OBFrame::setStyle(otk::Style *style) assert(style); otk::OtkWidget::setStyle(style); + // don't let grips change textures when they are pressed + _grip_left.setPressedFocusTexture(_grip_left.getTexture()); + _grip_left.setPressedUnfocusTexture(_grip_left.getUnfocusTexture()); + _grip_right.setPressedFocusTexture(_grip_right.getTexture()); + _grip_right.setPressedUnfocusTexture(_grip_right.getUnfocusTexture()); // if a style was previously set, then 'replace' is true, cause we're // replacing a style @@ -85,6 +94,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 +109,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 @@ -117,17 +123,21 @@ void OBFrame::adjust() int width; // the width of the client window and the border around it int bwidth; // width to make borders + int cbwidth; // width of the inner client border if (_decorations & OBClient::Decor_Border) { bwidth = _style->getBorderWidth(); + cbwidth = _style->getFrameWidth(); _size.left = _size.top = _size.bottom = _size.right = _style->getFrameWidth(); width = _client->area().width() + _style->getFrameWidth() * 2; } else { - bwidth = 0; + bwidth = cbwidth = 0; _size.left = _size.top = _size.bottom = _size.right = 0; width = _client->area().width(); } + XSetWindowBorderWidth(otk::OBDisplay::display, _plate.getWindow(), cbwidth); + XSetWindowBorderWidth(otk::OBDisplay::display, getWindow(), bwidth); XSetWindowBorderWidth(otk::OBDisplay::display, _titlebar.getWindow(), bwidth); @@ -240,8 +250,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, _size.top, _client->area().width(), + _client->area().height()); // map/unmap all the windows if (_decorations & OBClient::Decor_Titlebar) { @@ -331,7 +341,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