X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fframe.cc;h=20e65932273af6c37166d9b2bf134f722739e568;hb=5face4c6f35172761367f63ac0b6eaf62d84e532;hp=e85ff345252764058af8bbe358fcf9fc3aa2af63;hpb=cdcc526a0274cace9f542960fe4eee4ddcc23d31;p=chaz%2Fopenbox diff --git a/src/frame.cc b/src/frame.cc index e85ff345..20e65932 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -23,21 +23,21 @@ namespace ob { const long Frame::event_mask; -Frame::Frame(Client *client, otk::Style *style) +Frame::Frame(Client *client, otk::RenderStyle *style) : otk::Widget(openbox, style, Horizontal, 0, 1, true), WidgetBase(WidgetBase::Type_Frame), _client(client), _screen(otk::display->screenInfo(client->screen())), _plate(this, WidgetBase::Type_Plate), _titlebar(this, WidgetBase::Type_Titlebar), - _button_close(&_titlebar, WidgetBase::Type_CloseButton), - _button_iconify(&_titlebar, WidgetBase::Type_IconifyButton), - _button_max(&_titlebar, WidgetBase::Type_MaximizeButton), - _button_stick(&_titlebar, WidgetBase::Type_StickyButton), + _button_close(&_titlebar, WidgetBase::Type_CloseButton, client), + _button_iconify(&_titlebar, WidgetBase::Type_IconifyButton, client), + _button_max(&_titlebar, WidgetBase::Type_MaximizeButton, client), + _button_alldesk(&_titlebar, WidgetBase::Type_AllDesktopsButton, client), _label(&_titlebar, WidgetBase::Type_Label), _handle(this, WidgetBase::Type_Handle), - _grip_left(&_handle, WidgetBase::Type_LeftGrip), - _grip_right(&_handle, WidgetBase::Type_RightGrip), + _grip_left(&_handle, WidgetBase::Type_LeftGrip, client), + _grip_right(&_handle, WidgetBase::Type_RightGrip, client), _decorations(client->decorations()) { assert(client); @@ -71,23 +71,23 @@ void Frame::setTitle(const otk::ustring &text) } -void Frame::setStyle(otk::Style *style) +void Frame::setStyle(otk::RenderStyle *style) { assert(style); - otk::Widget::setStyle(style); - // if a style was previously set, then 'replace' is true, cause we're // replacing a style bool replace = (_style); + otk::Widget::setStyle(style); + if (replace) { // XXX: do shit here whatever } _style = style; - setBorderColor(_style->getBorderColor()); + setBorderColor(_style->frameBorderColor()); // if !replace, then adjust() will get called after the client is grabbed! if (replace) { @@ -129,11 +129,11 @@ void Frame::adjustSize() int bwidth; // width to make borders int cbwidth; // width of the inner client border int butsize=0; // width and height of the titlebar buttons - const int bevel = _style->getBevelWidth(); + const int bevel = _style->bevelWidth(); if (_decorations & Client::Decor_Border) { - bwidth = _style->getBorderWidth(); - cbwidth = _style->getFrameWidth(); + bwidth = _style->frameBorderWidth(); + cbwidth = _style->clientBorderWidth(); } else bwidth = cbwidth = 0; _innersize.left = _innersize.top = _innersize.bottom = _innersize.right = @@ -153,19 +153,19 @@ void Frame::adjustSize() _titlebar.setGeometry(-bwidth, -bwidth, width, - _style->getFont()->height() + bevel * 2); + _style->labelFont()->height() + (bevel * 2)); _innersize.top += _titlebar.height() + bwidth; // set the label size - _label.setGeometry(0, bevel, width, _style->getFont()->height()); + _label.setGeometry(0, bevel, width, _style->labelFont()->height()); // set the buttons sizes butsize = _label.height() - 2; if (_decorations & Client::Decor_Iconify) _button_iconify.setGeometry(0, bevel + 1, butsize, butsize); if (_decorations & Client::Decor_Maximize) _button_max.setGeometry(0, bevel + 1, butsize, butsize); - if (_decorations & Client::Decor_Sticky) - _button_stick.setGeometry(0, bevel + 1, butsize, butsize); + if (_decorations & Client::Decor_AllDesktops) + _button_alldesk.setGeometry(0, bevel + 1, butsize, butsize); if (_decorations & Client::Decor_Close) _button_close.setGeometry(0, bevel + 1, butsize, butsize); @@ -204,9 +204,9 @@ void Frame::adjustSize() continue; } break; - case 's': - case 'S': - if (!tit_s && (_decorations & Client::Decor_Sticky)) { + case 'd': + case 'D': + if (!tit_s && (_decorations & Client::Decor_AllDesktops)) { tit_s = true; continue; } @@ -255,10 +255,10 @@ void Frame::adjustSize() _button_max.move(x, _button_max.rect().y()); x += _button_max.width(); break; - case 's': - case 'S': - _button_stick.move(x, _button_stick.rect().y()); - x += _button_stick.width(); + case 'd': + case 'D': + _button_alldesk.move(x, _button_alldesk.rect().y()); + x += _button_alldesk.width(); break; case 'c': case 'C': @@ -275,18 +275,14 @@ void Frame::adjustSize() if (_decorations & Client::Decor_Handle) { _handle.setGeometry(-bwidth, _innersize.top + _client->area().height() + cbwidth, - width, _style->getHandleWidth()); + width, _style->handleWidth()); _grip_left.setGeometry(-bwidth, -bwidth, - // XXX: get a Point class in otk and use that for - // the 'buttons size' since theyre all the same butsize * 2, _handle.height()); _grip_right.setGeometry(((_handle.rect().right() + 1) - butsize * 2), -bwidth, - // XXX: get a Point class in otk and use that for - // the 'buttons size' since theyre all the same butsize * 2, _handle.height()); _innersize.bottom += _handle.height() + bwidth; @@ -317,9 +313,9 @@ void Frame::adjustSize() else _button_max.hide(); if (tit_s) - _button_stick.show(); + _button_alldesk.show(); else - _button_stick.hide(); + _button_alldesk.hide(); if (tit_c) _button_close.show(); else @@ -357,7 +353,7 @@ void Frame::adjustShape() { #ifdef SHAPE int bwidth = (_decorations & Client::Decor_Border) ? - _style->getBorderWidth() : 0; + _style->frameBorderWidth() : 0; if (!_client->shaped()) { // clear the shape on the frame window @@ -399,11 +395,17 @@ void Frame::adjustShape() } +void Frame::adjustState() +{ + _button_alldesk.update(); + _button_max.update(); +} + + void Frame::grabClient() { // reparent the client to the frame - XReparentWindow(**otk::display, _client->window(), - _plate.window(), 0, 0); + XReparentWindow(**otk::display, _client->window(), _plate.window(), 0, 0); /* When reparenting the client window, it is usually not mapped yet, since this occurs from a MapRequest. However, in the case where Openbox is @@ -415,9 +417,8 @@ void Frame::grabClient() if (openbox->state() == Openbox::State_Starting) _client->ignore_unmaps += 2; - // select the event mask on the client's parent (to receive config req's) - XSelectInput(**otk::display, _plate.window(), - SubstructureRedirectMask); + // select the event mask on the client's parent (to receive config/map req's) + XSelectInput(**otk::display, _plate.window(), SubstructureRedirectMask); // map the client so it maps when the frame does XMapWindow(**otk::display, _client->window());