#include <frame.hh>
Inheritance diagram for ob::Frame:
The frame is responsible for calling XSelectInput on the client window's new parent with the SubstructureRedirectMask so that structure events for the client are sent to the window manager.
Definition at line 33 of file frame.hh.
Public Methods | |
Frame (Client *client, otk::RenderStyle *style) | |
Constructs an Frame object, and reparents the client to itself. | |
virtual | ~Frame () |
Destroys the Frame object. | |
const otk::Strut & | size () const |
Returns the size of the frame on each side of the client. | |
virtual void | setStyle (otk::RenderStyle *style) |
Set the style to decorate the frame with. | |
virtual void | adjust () |
Empty overridden method to prevent automatic alignment of children. | |
virtual void | focus () |
Displays focused decorations. | |
virtual void | unfocus () |
Displays unfocused decorations. | |
void | setTitle (const otk::ustring &text) |
void | grabClient () |
Reparents the client window from the root window onto the frame. | |
void | releaseClient () |
Reparents the client window back to the root window. | |
void | adjustSize () |
Update the frame's size to match the client. | |
void | adjustPosition () |
Update the frame's position to match the client. | |
void | adjustShape () |
Shape the frame window to the client window. | |
void | adjustState () |
Update the frame to match the client's new state (for things like toggle buttons). | |
void | clientGravity (int &x, int &y) |
Applies gravity to the client's position to find where the frame should be positioned. | |
void | frameGravity (int &x, int &y) |
Reversly applies gravity to the frame's position to find where the client should be positioned. | |
Window | plate () const |
Gets the window id of the frame's "plate" subelement. | |
Window | titlebar () const |
Gets the window id of the frame's "titlebar" subelement. | |
Window | label () const |
Gets the window id of the frame's "label" subelement. | |
Window | button_close () const |
Gets the window id of the frame's "close button" subelement. | |
Window | button_iconify () const |
Gets the window id of the frame's "iconify button" subelement. | |
Window | button_max () const |
Gets the window id of the frame's "maximize button" subelement. | |
Window | button_alldesk () const |
Gets the window id of the frame's "all desktops button" subelement. | |
Window | handle () const |
Gets the window id of the frame's "handle" subelement. | |
Window | grip_left () const |
Gets the window id of the frame's "left grip" subelement. | |
Window | grip_right () const |
Gets the window id of the frame's "right grip" subelement. | |
Static Public Attributes | |
const long | event_mask = EnterWindowMask | LeaveWindowMask |
The event mask to grab on frame windows. | |
Private Attributes | |
Client * | _client |
const otk::ScreenInfo * | _screen |
otk::Strut | _size |
The size of the frame on each side of the client window. | |
otk::Strut | _innersize |
The size of the frame on each side of the client window inside the border. | |
BackgroundWidget | _plate |
BackgroundWidget | _titlebar |
ButtonWidget | _button_close |
ButtonWidget | _button_iconify |
ButtonWidget | _button_max |
ButtonWidget | _button_alldesk |
LabelWidget | _label |
BackgroundWidget | _handle |
ButtonWidget | _grip_left |
ButtonWidget | _grip_right |
Client::DecorationFlags | _decorations |
The decorations to display on the window. |
|
Constructs an Frame object, and reparents the client to itself.
Definition at line 26 of file frame.cc. References _client, _grip_left, _grip_right, _label, _plate, otk::Widget::_style, ob::Openbox::cursors(), otk::display, ob::Cursors::ll_angle, ob::Cursors::lr_angle, ob::openbox, otk::Widget::setCursor(), setStyle(), ob::LabelWidget::setText(), otk::Widget::show(), ob::Client::title(), and otk::Widget::unfocus().
00027 : otk::Widget(openbox, style, Horizontal, 0, 1, true), 00028 WidgetBase(WidgetBase::Type_Frame), 00029 _client(client), 00030 _screen(otk::display->screenInfo(client->screen())), 00031 _plate(this, WidgetBase::Type_Plate), 00032 _titlebar(this, WidgetBase::Type_Titlebar), 00033 _button_close(&_titlebar, WidgetBase::Type_CloseButton, client), 00034 _button_iconify(&_titlebar, WidgetBase::Type_IconifyButton, client), 00035 _button_max(&_titlebar, WidgetBase::Type_MaximizeButton, client), 00036 _button_alldesk(&_titlebar, WidgetBase::Type_AllDesktopsButton, client), 00037 _label(&_titlebar, WidgetBase::Type_Label), 00038 _handle(this, WidgetBase::Type_Handle), 00039 _grip_left(&_handle, WidgetBase::Type_LeftGrip, client), 00040 _grip_right(&_handle, WidgetBase::Type_RightGrip, client), 00041 _decorations(client->decorations()) 00042 { 00043 assert(client); 00044 assert(style); 00045 00046 XSelectInput(**otk::display, _window, Frame::event_mask); 00047 00048 _grip_left.setCursor(openbox->cursors().ll_angle); 00049 _grip_right.setCursor(openbox->cursors().lr_angle); 00050 00051 _label.setText(_client->title()); 00052 00053 _style = 0; 00054 setStyle(style); 00055 00056 otk::Widget::unfocus(); // stuff starts out appearing focused in otk 00057 00058 _plate.show(); // the other stuff is shown based on decor settings 00059 } |
|
Destroys the Frame object.
Definition at line 62 of file frame.cc.
00063 { 00064 } |
|
Empty overridden method to prevent automatic alignment of children.
Reimplemented from otk::Widget. Definition at line 115 of file frame.cc.
00116 {
00117 // the party all happens in adjustSize
00118 }
|
|
Update the frame's position to match the client.
Definition at line 344 of file frame.cc. References _client, ob::Client::area(), clientGravity(), otk::Widget::move(), otk::Rect::x(), and otk::Rect::y(). Referenced by grabClient(), ob::Client::internal_move(), setStyle(), and ob::Client::setupDecorAndFunctions().
00345 { 00346 int x, y; 00347 x = _client->area().x(); 00348 y = _client->area().y(); 00349 clientGravity(x, y); 00350 move(x, y); 00351 } |
|
Shape the frame window to the client window.
Definition at line 354 of file frame.cc. References _client, _decorations, _handle, _innersize, otk::Widget::_style, _titlebar, otk::Widget::height(), otk::Strut::left, otk::Widget::rect(), ob::Client::shaped(), otk::Strut::top, otk::Widget::width(), otk::Widget::window(), and ob::Client::window(). Referenced by adjustSize().
00355 { 00356 #ifdef SHAPE 00357 int bwidth = (_decorations & Client::Decor_Border) ? 00358 _style->frameBorderWidth() : 0; 00359 00360 if (!_client->shaped()) { 00361 // clear the shape on the frame window 00362 XShapeCombineMask(**otk::display, _window, ShapeBounding, 00363 _innersize.left, 00364 _innersize.top, 00365 None, ShapeSet); 00366 } else { 00367 // make the frame's shape match the clients 00368 XShapeCombineShape(**otk::display, _window, ShapeBounding, 00369 _innersize.left, 00370 _innersize.top, 00371 _client->window(), ShapeBounding, ShapeSet); 00372 00373 int num = 0; 00374 XRectangle xrect[2]; 00375 00376 if (_decorations & Client::Decor_Titlebar) { 00377 xrect[0].x = _titlebar.rect().x(); 00378 xrect[0].y = _titlebar.rect().y(); 00379 xrect[0].width = _titlebar.width() + bwidth * 2; // XXX: this is useless once the widget handles borders! 00380 xrect[0].height = _titlebar.height() + bwidth * 2; 00381 ++num; 00382 } 00383 00384 if (_decorations & Client::Decor_Handle) { 00385 xrect[1].x = _handle.rect().x(); 00386 xrect[1].y = _handle.rect().y(); 00387 xrect[1].width = _handle.width() + bwidth * 2; // XXX: this is useless once the widget handles borders! 00388 xrect[1].height = _handle.height() + bwidth * 2; 00389 ++num; 00390 } 00391 00392 XShapeCombineRectangles(**otk::display, window(), 00393 ShapeBounding, 0, 0, xrect, num, 00394 ShapeUnion, Unsorted); 00395 } 00396 #endif // SHAPE 00397 } |
|
Update the frame's size to match the client.
Definition at line 121 of file frame.cc. References _button_alldesk, _button_close, _button_iconify, _button_max, _client, _decorations, _grip_left, _grip_right, _handle, _innersize, _label, _plate, _size, otk::Widget::_style, _titlebar, adjustShape(), ob::Client::area(), otk::Strut::bottom, ob::Client::decorations(), otk::ustring::erase(), otk::Rect::height(), otk::Widget::height(), otk::Widget::hide(), otk::Strut::left, otk::Widget::move(), ob::python_get_string(), otk::Widget::rect(), otk::Widget::resize(), otk::Strut::right, otk::Widget::setBorderWidth(), otk::Widget::setGeometry(), otk::Widget::setWidth(), ob::Client::shaded(), otk::Widget::show(), otk::ustring::size(), otk::Strut::top, otk::Widget::update(), otk::Rect::width(), and otk::Widget::width(). Referenced by grabClient(), ob::Client::internal_resize(), setStyle(), ob::Client::setupDecorAndFunctions(), and ob::Client::shade().
00122 { 00123 // XXX: only if not overridden or something!!! MORE LOGIC HERE!! 00124 _decorations = _client->decorations(); 00125 00126 // true/false for whether to show each element of the titlebar 00127 bool tit_i = false, tit_m = false, tit_s = false, tit_c = false; 00128 int width; // the width of the client and its border 00129 int bwidth; // width to make borders 00130 int cbwidth; // width of the inner client border 00131 int fontheight = _style->labelFont()->height(); // height of the font 00132 int butsize = fontheight - 2; // width and height of the titlebar buttons 00133 const int bevel = _style->bevelWidth(); 00134 00135 if (_decorations & Client::Decor_Border) { 00136 bwidth = _style->frameBorderWidth(); 00137 cbwidth = _style->clientBorderWidth(); 00138 } else 00139 bwidth = cbwidth = 0; 00140 _innersize.left = _innersize.top = _innersize.bottom = _innersize.right = 00141 cbwidth; 00142 width = _client->area().width() + cbwidth * 2; 00143 00144 _plate.setBorderWidth(cbwidth); 00145 00146 setBorderWidth(bwidth); 00147 _titlebar.setBorderWidth(bwidth); 00148 _grip_left.setBorderWidth(bwidth); 00149 _grip_right.setBorderWidth(bwidth); 00150 _handle.setBorderWidth(bwidth); 00151 00152 if (_decorations & Client::Decor_Titlebar) { 00153 // set the titlebar size 00154 _titlebar.setGeometry(-bwidth, 00155 -bwidth, 00156 width, 00157 _style->labelFont()->height() + (bevel * 2)); 00158 _innersize.top += _titlebar.height() + bwidth; 00159 00160 // set the label size 00161 _label.setGeometry(0, bevel, width, fontheight); 00162 // set the buttons sizes 00163 if (_decorations & Client::Decor_Iconify) 00164 _button_iconify.setGeometry(0, bevel + 1, butsize, butsize); 00165 if (_decorations & Client::Decor_Maximize) 00166 _button_max.setGeometry(0, bevel + 1, butsize, butsize); 00167 if (_decorations & Client::Decor_AllDesktops) 00168 _button_alldesk.setGeometry(0, bevel + 1, butsize, butsize); 00169 if (_decorations & Client::Decor_Close) 00170 _button_close.setGeometry(0, bevel + 1, butsize, butsize); 00171 00172 // separation between titlebar elements 00173 const int sep = bevel + 1; 00174 00175 otk::ustring layout; 00176 if (!python_get_string("TITLEBAR_LAYOUT", &layout)) 00177 layout = "ILMC"; 00178 00179 // this code ensures that the string only has one of each possible 00180 // letter, all of the letters are valid, and L exists somewhere in the 00181 // string! 00182 bool tit_l = false; 00183 00184 for (std::string::size_type i = 0; i < layout.size(); ++i) { 00185 switch (layout[i]) { 00186 case 'i': 00187 case 'I': 00188 if (!tit_i && (_decorations & Client::Decor_Iconify)) { 00189 tit_i = true; 00190 continue; 00191 } 00192 break; 00193 case 'l': 00194 case 'L': 00195 if (!tit_l) { 00196 tit_l = true; 00197 continue; 00198 } 00199 break; 00200 case 'm': 00201 case 'M': 00202 if (!tit_m && (_decorations & Client::Decor_Maximize)) { 00203 tit_m = true; 00204 continue; 00205 } 00206 break; 00207 case 'd': 00208 case 'D': 00209 if (!tit_s && (_decorations & Client::Decor_AllDesktops)) { 00210 tit_s = true; 00211 continue; 00212 } 00213 break; 00214 case 'c': 00215 case 'C': 00216 if (!tit_c && (_decorations & Client::Decor_Close)) { 00217 tit_c = true; 00218 continue; 00219 } 00220 break; 00221 } 00222 // if we get here then we don't want the letter, kill it 00223 layout.erase(i--, 1); 00224 } 00225 if (!tit_l) 00226 layout += "L"; 00227 00228 // the size of the label. this ASSUMES the layout has only buttons other 00229 // that the ONE LABEL!! 00230 // adds an extra sep so that there's a space on either side of the 00231 // titlebar.. note: x = sep, below. 00232 int lwidth = width - sep * 2 - 00233 (butsize + sep) * (layout.size() - 1); 00234 // quick sanity check for really small windows. if this is needed, its 00235 // obviously not going to be displayed right... 00236 // XXX: maybe we should make this look better somehow? constraints? 00237 if (lwidth <= 0) lwidth = 1; 00238 _label.setWidth(lwidth); 00239 00240 int x = sep; 00241 for (std::string::size_type i = 0, len = layout.size(); i < len; ++i) { 00242 switch (layout[i]) { 00243 case 'i': 00244 case 'I': 00245 _button_iconify.move(x, _button_iconify.rect().y()); 00246 x += _button_iconify.width(); 00247 break; 00248 case 'l': 00249 case 'L': 00250 _label.move(x, _label.rect().y()); 00251 x += _label.width(); 00252 break; 00253 case 'm': 00254 case 'M': 00255 _button_max.move(x, _button_max.rect().y()); 00256 x += _button_max.width(); 00257 break; 00258 case 'd': 00259 case 'D': 00260 _button_alldesk.move(x, _button_alldesk.rect().y()); 00261 x += _button_alldesk.width(); 00262 break; 00263 case 'c': 00264 case 'C': 00265 _button_close.move(x, _button_close.rect().y()); 00266 x += _button_close.width(); 00267 break; 00268 default: 00269 assert(false); // the layout string is invalid! 00270 } 00271 x += sep; 00272 } 00273 } 00274 00275 if (_decorations & Client::Decor_Handle) { 00276 _handle.setGeometry(-bwidth, 00277 _innersize.top + _client->area().height() + cbwidth, 00278 width, _style->handleWidth()); 00279 _grip_left.setGeometry(-bwidth, 00280 -bwidth, 00281 butsize * 2, 00282 _handle.height()); 00283 _grip_right.setGeometry(((_handle.rect().right() + 1) - 00284 butsize * 2), 00285 -bwidth, 00286 butsize * 2, 00287 _handle.height()); 00288 _innersize.bottom += _handle.height() + bwidth; 00289 } 00290 00291 00292 // position/size all the windows 00293 00294 if (_client->shaded()) 00295 resize(_innersize.left + _innersize.right + _client->area().width(), 00296 _titlebar.height()); 00297 else 00298 resize(_innersize.left + _innersize.right + _client->area().width(), 00299 _innersize.top + _innersize.bottom + _client->area().height()); 00300 00301 _plate.setGeometry(_innersize.left - cbwidth, _innersize.top - cbwidth, 00302 _client->area().width(), _client->area().height()); 00303 00304 // map/unmap all the windows 00305 if (_decorations & Client::Decor_Titlebar) { 00306 _label.show(); 00307 if (tit_i) 00308 _button_iconify.show(); 00309 else 00310 _button_iconify.hide(); 00311 if (tit_m) 00312 _button_max.show(); 00313 else 00314 _button_max.hide(); 00315 if (tit_s) 00316 _button_alldesk.show(); 00317 else 00318 _button_alldesk.hide(); 00319 if (tit_c) 00320 _button_close.show(); 00321 else 00322 _button_close.hide(); 00323 _titlebar.show(); 00324 } else { 00325 _titlebar.hide(true); 00326 } 00327 00328 if (_decorations & Client::Decor_Handle) 00329 _handle.show(true); 00330 else 00331 _handle.hide(true); 00332 00333 _size.left = _innersize.left + bwidth; 00334 _size.right = _innersize.right + bwidth; 00335 _size.top = _innersize.top + bwidth; 00336 _size.bottom = _innersize.bottom + bwidth; 00337 00338 adjustShape(); 00339 00340 update(); 00341 } |
|
Update the frame to match the client's new state (for things like toggle buttons).
Definition at line 400 of file frame.cc. References _button_alldesk, _button_max, and ob::ButtonWidget::update(). Referenced by ob::Client::changeState(), and ob::Client::setDesktop().
00401 { 00402 _button_alldesk.update(); 00403 _button_max.update(); 00404 } |
|
Gets the window id of the frame's "all desktops button" subelement.
Definition at line 136 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00136 { return _button_alldesk.window(); } |
|
Gets the window id of the frame's "close button" subelement.
Definition at line 130 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00130 { return _button_close.window(); } |
|
Gets the window id of the frame's "iconify button" subelement.
Definition at line 132 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00132 { return _button_iconify.window(); } |
|
Gets the window id of the frame's "maximize button" subelement.
Definition at line 134 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00134 { return _button_max.window(); } |
|
Applies gravity to the client's position to find where the frame should be positioned.
Definition at line 453 of file frame.cc. References _client, _size, otk::Strut::bottom, ob::Client::gravity(), otk::Strut::left, otk::Strut::right, and otk::Strut::top. Referenced by adjustPosition().
00454 { 00455 // horizontal 00456 switch (_client->gravity()) { 00457 default: 00458 case NorthWestGravity: 00459 case SouthWestGravity: 00460 case WestGravity: 00461 break; 00462 00463 case NorthGravity: 00464 case SouthGravity: 00465 case CenterGravity: 00466 x -= (_size.left + _size.right) / 2; 00467 break; 00468 00469 case NorthEastGravity: 00470 case SouthEastGravity: 00471 case EastGravity: 00472 x -= _size.left + _size.right; 00473 break; 00474 00475 case ForgetGravity: 00476 case StaticGravity: 00477 x -= _size.left; 00478 break; 00479 } 00480 00481 // vertical 00482 switch (_client->gravity()) { 00483 default: 00484 case NorthWestGravity: 00485 case NorthEastGravity: 00486 case NorthGravity: 00487 break; 00488 00489 case CenterGravity: 00490 case EastGravity: 00491 case WestGravity: 00492 y -= (_size.top + _size.bottom) / 2; 00493 break; 00494 00495 case SouthWestGravity: 00496 case SouthEastGravity: 00497 case SouthGravity: 00498 y -= _size.top + _size.bottom; 00499 break; 00500 00501 case ForgetGravity: 00502 case StaticGravity: 00503 y -= _size.top; 00504 break; 00505 } 00506 } |
|
Displays focused decorations.
Reimplemented from otk::Widget. Definition at line 101 of file frame.cc. References otk::Widget::focus(), and otk::Widget::update(). Referenced by ob::Client::focusHandler().
00102 { 00103 otk::Widget::focus(); 00104 update(); 00105 } |
|
Reversly applies gravity to the frame's position to find where the client should be positioned.
Definition at line 509 of file frame.cc. References _client, _size, otk::Strut::bottom, ob::Client::gravity(), otk::Strut::left, otk::Strut::right, and otk::Strut::top. Referenced by ob::Client::maximize(), ob::Client::move(), and ob::Client::updateNormalHints().
00510 { 00511 // horizontal 00512 switch (_client->gravity()) { 00513 default: 00514 case NorthWestGravity: 00515 case WestGravity: 00516 case SouthWestGravity: 00517 break; 00518 case NorthGravity: 00519 case CenterGravity: 00520 case SouthGravity: 00521 x += (_size.left + _size.right) / 2; 00522 break; 00523 case NorthEastGravity: 00524 case EastGravity: 00525 case SouthEastGravity: 00526 x += _size.left + _size.right; 00527 break; 00528 case StaticGravity: 00529 case ForgetGravity: 00530 x += _size.left; 00531 break; 00532 } 00533 00534 // vertical 00535 switch (_client->gravity()) { 00536 default: 00537 case NorthWestGravity: 00538 case WestGravity: 00539 case SouthWestGravity: 00540 break; 00541 case NorthGravity: 00542 case CenterGravity: 00543 case SouthGravity: 00544 y += (_size.top + _size.bottom) / 2; 00545 break; 00546 case NorthEastGravity: 00547 case EastGravity: 00548 case SouthEastGravity: 00549 y += _size.top + _size.bottom; 00550 break; 00551 case StaticGravity: 00552 case ForgetGravity: 00553 y += _size.top; 00554 break; 00555 } 00556 } |
|
Reparents the client window from the root window onto the frame.
Definition at line 407 of file frame.cc. References _client, _plate, adjustPosition(), adjustSize(), ob::Client::ignore_unmaps, ob::openbox, ob::Openbox::state(), otk::Widget::window(), and ob::Client::window(). Referenced by ob::Screen::manageWindow().
00408 { 00409 // reparent the client to the frame 00410 XReparentWindow(**otk::display, _client->window(), _plate.window(), 0, 0); 00411 /* 00412 When reparenting the client window, it is usually not mapped yet, since 00413 this occurs from a MapRequest. However, in the case where Openbox is 00414 starting up, the window is already mapped, so we'll see unmap events for 00415 it. There are 2 unmap events generated that we see, one with the 'event' 00416 member set the root window, and one set to the client, but both get handled 00417 and need to be ignored. 00418 */ 00419 if (openbox->state() == Openbox::State_Starting) 00420 _client->ignore_unmaps += 2; 00421 00422 // select the event mask on the client's parent (to receive config/map req's) 00423 XSelectInput(**otk::display, _plate.window(), SubstructureRedirectMask); 00424 00425 // map the client so it maps when the frame does 00426 XMapWindow(**otk::display, _client->window()); 00427 00428 adjustSize(); 00429 adjustPosition(); 00430 } |
|
Gets the window id of the frame's "left grip" subelement.
Definition at line 140 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00140 { return _grip_left.window(); } |
|
Gets the window id of the frame's "right grip" subelement.
Definition at line 142 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00142 { return _grip_right.window(); } |
|
Gets the window id of the frame's "handle" subelement.
Definition at line 138 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00138 { return _handle.window(); } |
|
Gets the window id of the frame's "label" subelement.
Definition at line 128 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00128 { return _label.window(); } |
|
Gets the window id of the frame's "plate" subelement.
Definition at line 124 of file frame.hh. References otk::Widget::window(). Referenced by ob::Bindings::grabButton(), ob::Client::internal_move(), ob::Screen::manageWindow(), ob::Client::reparentHandler(), and ob::Screen::unmanageWindow().
00124 { return _plate.window(); } |
|
Reparents the client window back to the root window.
Definition at line 433 of file frame.cc. References _client, _screen, ob::Client::area(), otk::ScreenInfo::rootWindow(), ob::Client::window(), otk::Rect::x(), and otk::Rect::y(). Referenced by ob::Screen::unmanageWindow().
00434 { 00435 XEvent ev; 00436 00437 // check if the app has already reparented its window away 00438 if (XCheckTypedWindowEvent(**otk::display, _client->window(), 00439 ReparentNotify, &ev)) { 00440 XPutBackEvent(**otk::display, &ev); 00441 // re-map the window since the unmanaging process unmaps it 00442 XMapWindow(**otk::display, _client->window()); 00443 } else { 00444 // according to the ICCCM - if the client doesn't reparent itself, then we 00445 // will reparent the window to root for them 00446 XReparentWindow(**otk::display, _client->window(), 00447 _screen->rootWindow(), 00448 _client->area().x(), _client->area().y()); 00449 } 00450 } |
|
Set the style to decorate the frame with.
Reimplemented from otk::Widget. Definition at line 74 of file frame.cc. References adjustPosition(), adjustSize(), otk::Widget::setBorderColor(), and otk::Widget::setStyle(). Referenced by Frame().
00075 { 00076 assert(style); 00077 00078 // if a style was previously set, then 'replace' is true, cause we're 00079 // replacing a style 00080 bool replace = (_style); 00081 00082 otk::Widget::setStyle(style); 00083 00084 if (replace) { 00085 // XXX: do shit here whatever 00086 } 00087 00088 _style = style; 00089 00090 setBorderColor(_style->frameBorderColor()); 00091 00092 // if !replace, then adjust() will get called after the client is grabbed! 00093 if (replace) { 00094 // size/position everything 00095 adjustSize(); 00096 adjustPosition(); 00097 } 00098 } |
|
Definition at line 67 of file frame.cc. References _label, ob::LabelWidget::setText(), and otk::Widget::update(). Referenced by ob::Client::updateTitle().
|
|
Returns the size of the frame on each side of the client.
Definition at line 79 of file frame.hh. Referenced by ob::Client::internal_move(), and ob::Client::maximize().
00079 { return _size; } |
|
Gets the window id of the frame's "titlebar" subelement.
Definition at line 126 of file frame.hh. References otk::Widget::window(). Referenced by ob::Screen::manageWindow(), and ob::Screen::unmanageWindow().
00126 { return _titlebar.window(); } |
|
Displays unfocused decorations.
Reimplemented from otk::Widget. Definition at line 108 of file frame.cc. References otk::Widget::unfocus(), and otk::Widget::update(). Referenced by ob::Client::unfocusHandler().
00109 { 00110 otk::Widget::unfocus(); 00111 update(); 00112 } |
|
Definition at line 55 of file frame.hh. Referenced by adjustSize(), and adjustState(). |
|
Definition at line 52 of file frame.hh. Referenced by adjustSize(). |
|
Definition at line 53 of file frame.hh. Referenced by adjustSize(). |
|
Definition at line 54 of file frame.hh. Referenced by adjustSize(), and adjustState(). |
|
Definition at line 40 of file frame.hh. Referenced by adjustPosition(), adjustShape(), adjustSize(), clientGravity(), Frame(), frameGravity(), grabClient(), and releaseClient(). |
|
The decorations to display on the window. This is by default the same value as in the Client::decorations, but it is duplicated here so that it can be overridden per-window by the user. Definition at line 66 of file frame.hh. Referenced by adjustShape(), and adjustSize(). |
|
Definition at line 58 of file frame.hh. Referenced by adjustSize(), and Frame(). |
|
Definition at line 59 of file frame.hh. Referenced by adjustSize(), and Frame(). |
|
Definition at line 57 of file frame.hh. Referenced by adjustShape(), and adjustSize(). |
|
The size of the frame on each side of the client window inside the border.
Definition at line 47 of file frame.hh. Referenced by adjustShape(), and adjustSize(). |
|
Definition at line 56 of file frame.hh. Referenced by adjustSize(), Frame(), and setTitle(). |
|
Definition at line 50 of file frame.hh. Referenced by adjustSize(), Frame(), and grabClient(). |
|
Reimplemented from otk::Widget. Definition at line 41 of file frame.hh. Referenced by releaseClient(). |
|
The size of the frame on each side of the client window.
Definition at line 44 of file frame.hh. Referenced by adjustSize(), clientGravity(), and frameGravity(). |
|
Definition at line 51 of file frame.hh. Referenced by adjustShape(), and adjustSize(). |
|
The event mask to grab on frame windows.
|