summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client.cc19
-rw-r--r--src/frame.cc6
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)