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:
parent
bc099a5fdb
commit
635af8c38b
2 changed files with 25 additions and 10 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
/*!
|
/*!
|
||||||
|
|
Loading…
Reference in a new issue