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; _decorations &= ~Decor_Border;
if (! (_mwmhints.decorations & MwmDecor_Handle)) if (! (_mwmhints.decorations & MwmDecor_Handle))
_decorations &= ~Decor_Handle; _decorations &= ~Decor_Handle;
if (! (_mwmhints.decorations & MwmDecor_Title)) { if (! (_mwmhints.decorations & MwmDecor_Title))
_decorations &= ~Decor_Titlebar; _decorations &= ~Decor_Titlebar;
// if we don't have a titlebar, then we cannot shade!
_functions &= ~Func_Shade;
}
if (! (_mwmhints.decorations & MwmDecor_Iconify)) if (! (_mwmhints.decorations & MwmDecor_Iconify))
_decorations &= ~Decor_Iconify; _decorations &= ~Decor_Iconify;
if (! (_mwmhints.decorations & MwmDecor_Maximize)) if (! (_mwmhints.decorations & MwmDecor_Maximize))
@ -313,16 +310,17 @@ void Client::setupDecorAndFunctions()
if (_disabled_decorations & Decor_Close) if (_disabled_decorations & Decor_Close)
_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)) if (!(_decorations & Decor_Titlebar))
_functions &= ~Func_Shade; _functions &= ~Func_Shade;
changeAllowedActions(); changeAllowedActions();
if (frame) { if (frame) {
frame->adjustSize(); // change the decors on the frame frame->adjustSize(); // change the decors on the frame
frame->adjustPosition(); // with more/less decorations, we may need to be frame->adjustPosition(); // with more/less decorations, we may need to be
// moved // 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::set(_window, otk::Property::atoms.net_wm_allowed_actions,
otk::Property::atoms.atom, actions, num); 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. be returned to normal state.
@param savearea true to have the client's current size and position saved; @param savearea true to have the client's current size and position saved;
otherwise, they are not. You should not save when mapping a 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 //! 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 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; @param savearea true to have the client's current size and position saved;
otherwise, they are not. You should not save when mapping a 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 //! Internal version of the Client::move function
/*! /*!