allow a user to set "undecorated" on a window without decorations

if not based on window type, the app may decide to have decorations again
sometime.  this was not always legal but chromium has made it so.
This commit is contained in:
Dana Jansens 2010-06-09 09:31:06 -04:00
parent c36b89ba12
commit 6d95e2441a

View file

@ -1723,6 +1723,13 @@ void client_setup_decor_and_functions(ObClient *self, gboolean reconfig)
break; break;
} }
/* If the client has no decor from its type (which never changes) then
don't allow the user to "undecorate" the window. Otherwise, allow them
to, even if there are motif hints removing the decor, because those
may change these days (e.g. chromium) */
if (self->decorations == 0)
self->functions &= ~OB_CLIENT_FUNC_UNDECORATE;
/* Mwm Hints are applied subtractively to what has already been chosen for /* Mwm Hints are applied subtractively to what has already been chosen for
decor and functionality */ decor and functionality */
if (self->mwmhints.flags & OB_MWM_FLAG_DECORATIONS) { if (self->mwmhints.flags & OB_MWM_FLAG_DECORATIONS) {
@ -1782,11 +1789,6 @@ void client_setup_decor_and_functions(ObClient *self, gboolean reconfig)
self->decorations &= ~(OB_FRAME_DECOR_HANDLE | OB_FRAME_DECOR_GRIPS); self->decorations &= ~(OB_FRAME_DECOR_HANDLE | OB_FRAME_DECOR_GRIPS);
} }
/* If there are no decorations to remove, don't allow the user to try
toggle the state */
if (self->decorations == 0)
self->functions &= ~OB_CLIENT_FUNC_UNDECORATE;
/* finally, the user can have requested no decorations, which overrides /* finally, the user can have requested no decorations, which overrides
everything (but doesnt give it a border if it doesnt have one) */ everything (but doesnt give it a border if it doesnt have one) */
if (self->undecorated) if (self->undecorated)