make sure windows aren't doing things they aren't allowed when their allowed actions changes.

remaximize windows when their decorations are changed
This commit is contained in:
Dana Jansens 2003-02-05 06:44:39 +00:00
parent bc099a5fdb
commit 635af8c38b
2 changed files with 25 additions and 10 deletions

View file

@ -264,11 +264,8 @@ void Client::setupDecorAndFunctions()
_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 @@ void Client::setupDecorAndFunctions()
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 @@ void Client::changeAllowedActions(void)
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;
}

View file

@ -443,9 +443,10 @@ private:
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 @@ private:
@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
/*!