_decorations &= ~Decor_Border;
if (! (_mwmhints.decorations & MwmDecor_Handle))
_decorations &= ~Decor_Handle;
- if (! (_mwmhints.decorations & MwmDecor_Title)) {
+ if (! (_mwmhints.decorations & MwmDecor_Title))
_decorations &= ~Decor_Titlebar;
- // if we don't have a titlebar, then we cannot shade!
- _functions &= ~Func_Shade;
- }
if (! (_mwmhints.decorations & MwmDecor_Iconify))
_decorations &= ~Decor_Iconify;
if (! (_mwmhints.decorations & MwmDecor_Maximize))
if (_disabled_decorations & Decor_Close)
_decorations &= ~Decor_Close;
- // You can't shade without a titlebar
+ // if we don't have a titlebar, then we cannot shade!
if (!(_decorations & Decor_Titlebar))
_functions &= ~Func_Shade;
-
+
changeAllowedActions();
if (frame) {
frame->adjustSize(); // change the decors on the frame
frame->adjustPosition(); // with more/less decorations, we may need to be
// moved
+ remaximize(); // with new decor, the window's maximized size may change
}
}
otk::Property::set(_window, otk::Property::atoms.net_wm_allowed_actions,
otk::Property::atoms.atom, actions, num);
+
+ // make sure the window isn't breaking any rules now
+
+ if (!(_functions & Func_Shade) && _shaded)
+ if (frame) shade(false);
+ else _shaded = false;
+ if (!(_functions & Func_Iconify) && _iconic)
+ if (frame) setDesktop(openbox->screen(_screen)->desktop());
+ else _iconic = false;
+ if (!(_functions & Func_Fullscreen) && _fullscreen)
+ if (frame) fullscreen(false);
+ else _fullscreen = false;
+ if (!(_functions & Func_Maximize) && (_max_horz || _max_vert))
+ if (frame) maximize(false, 0);
+ else _max_vert = _max_horz = false;
}
be returned to normal state.
@param savearea true to have the client's current size and position saved;
otherwise, they are not. You should not save when mapping a
- new window that is set to fullscreen.
+ new window that is set to fullscreen. This has no effect
+ when restoring a window from fullscreen.
*/
- void fullscreen(bool fs, bool savearea);
+ void fullscreen(bool fs, bool savearea = true);
//! Maximize or unmaximize the client window
/*!
@param dir 0 to set both horz and vert, 1 to set horz, 2 to set vert.
@param savearea true to have the client's current size and position saved;
otherwise, they are not. You should not save when mapping a
- new window that is set to fullscreen.
+ new window that is set to fullscreen. This has no effect
+ when unmaximizing a window.
*/
- void maximize(bool max, int dir, bool savearea);
+ void maximize(bool max, int dir, bool savearea = true);
//! Internal version of the Client::move function
/*!