all repos — openbox @ 635af8c38bdb1ca47ae0b8274167d4e86100a40e

openbox fork - make it a bit more like ryudo

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
commit

635af8c38bdb1ca47ae0b8274167d4e86100a40e

parent

bc099a5fdbc16d55f95f585f0509316aedbf9cf3

2 files changed, 25 insertions(+), 10 deletions(-)

jump to
M src/client.ccsrc/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.hhsrc/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 /*!