From 98f05a5c962c1f0a4d418d30f45f219ef4d9c200 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 29 Jan 2003 22:10:28 +0000 Subject: [PATCH] let the user remove client decorations. --- src/client.cc | 19 +++++++++++++------ src/frame.cc | 6 +++--- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/client.cc b/src/client.cc index e9136df4..46373077 100644 --- a/src/client.cc +++ b/src/client.cc @@ -51,6 +51,8 @@ Client::Client(int screen, Window window) _urgent = false; // not positioned unless specified _positioned = false; + // nothing is disabled unless specified + _disabled_decorations = 0; getArea(); getDesktop(); @@ -306,6 +308,12 @@ void Client::setupDecorAndFunctions() _decorations &= ~Decor_Close; changeAllowedActions(); + + if (frame) { + frame->adjustSize(); // change the decors on the frame + frame->adjustPosition(); // with more/less decorations, we may need to be + // moved + } } @@ -624,8 +632,11 @@ void Client::updateStrut() _strut.right = data[1]; _strut.top = data[2]; _strut.bottom = data[3]; - - openbox->screen(_screen)->updateStrut(); + + // updating here is pointless while we're being mapped cuz we're not in + // the screen's client list yet + if (frame) + openbox->screen(_screen)->updateStrut(); } delete [] data; @@ -695,7 +706,6 @@ void Client::propertyHandler(const XPropertyEvent &e) getType(); calcLayer(); // type may have changed, so update the layer setupDecorAndFunctions(); - frame->adjustSize(); // this updates the frame for any new decor settings } else if (e.atom == otk::Property::atoms.net_wm_name || e.atom == otk::Property::atoms.wm_name) @@ -708,7 +718,6 @@ void Client::propertyHandler(const XPropertyEvent &e) else if (e.atom == otk::Property::atoms.wm_protocols) { updateProtocols(); setupDecorAndFunctions(); - frame->adjustSize(); // update the decorations } else if (e.atom == otk::Property::atoms.net_wm_strut) updateStrut(); @@ -1343,8 +1352,6 @@ void Client::disableDecorations(DecorationFlags flags) { _disabled_decorations = flags; setupDecorAndFunctions(); - if (frame) - frame->adjustSize(); // change the decors on the frame } diff --git a/src/frame.cc b/src/frame.cc index 20e65932..06b263d8 100644 --- a/src/frame.cc +++ b/src/frame.cc @@ -128,7 +128,8 @@ void Frame::adjustSize() int width; // the width of the client and its border int bwidth; // width to make borders int cbwidth; // width of the inner client border - int butsize=0; // width and height of the titlebar buttons + int fontheight = _style->labelFont()->height(); // height of the font + int butsize = fontheight - 2; // width and height of the titlebar buttons const int bevel = _style->bevelWidth(); if (_decorations & Client::Decor_Border) { @@ -157,9 +158,8 @@ void Frame::adjustSize() _innersize.top += _titlebar.height() + bwidth; // set the label size - _label.setGeometry(0, bevel, width, _style->labelFont()->height()); + _label.setGeometry(0, bevel, width, fontheight); // 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) -- 2.39.2