make sure windows aren't doing things they aren't allowed when their allowed actions changes. remaximize windows when their decorations are changed
Dana Jansens danakj@orodu.net
2 files changed,
25 insertions(+),
10 deletions(-)
M
src/client.cc
→
src/client.cc
@@ -264,11 +264,8 @@ if (! (_mwmhints.decorations & MwmDecor_Border))
_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))@@ -313,16 +310,17 @@ _decorations &= ~Decor_AllDesktops;
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 } }@@ -1344,6 +1342,21 @@ }
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; }
M
src/client.hh
→
src/client.hh
@@ -443,9 +443,10 @@ @param fs true if the window should be made fullscreen; false if it should
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 /*!@@ -454,9 +455,10 @@ returned to normal size.
@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 /*!