all repos — openbox @ c6dac8539715c12db1e18c13f389c59557270268

openbox fork - make it a bit more like ryudo

don't let the user toggle decorations on widnows that don't have any decorations to toggle
Dana Jansens danakj@orodu.net
commit

c6dac8539715c12db1e18c13f389c59557270268

parent

3c590a5851877c0b0205bb107da5d8e9318409c7

3 files changed, 15 insertions(+), 4 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -1585,7 +1585,8 @@ OB_CLIENT_FUNC_MAXIMIZE |

OB_CLIENT_FUNC_SHADE | OB_CLIENT_FUNC_CLOSE | OB_CLIENT_FUNC_BELOW | - OB_CLIENT_FUNC_ABOVE); + OB_CLIENT_FUNC_ABOVE | + OB_CLIENT_FUNC_UNDECORATE); if (!(self->min_size.width < self->max_size.width || self->min_size.height < self->max_size.height))

@@ -1683,6 +1684,11 @@

/* kill the handle on fully maxed windows */ if (self->max_vert && self->max_horz) 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 everything (but doesnt give it a border if it doesnt have one) */

@@ -3571,7 +3577,11 @@ }

void client_set_undecorated(ObClient *self, gboolean undecorated) { - if (self->undecorated != undecorated) { + if (self->undecorated != undecorated && + /* don't let it undecorate if the function is missing, but let + it redecorate */ + (self->functions & OB_CLIENT_FUNC_UNDECORATE || !undecorated)) + { self->undecorated = undecorated; client_setup_decor_and_functions(self); client_change_state(self); /* reflect this in the state hints */
M openbox/client.hopenbox/client.h

@@ -73,7 +73,8 @@ OB_CLIENT_FUNC_SHADE = 1 << 4, /*!< Allow to be shaded */

OB_CLIENT_FUNC_FULLSCREEN = 1 << 5, /*!< Allow to be made fullscreen */ OB_CLIENT_FUNC_CLOSE = 1 << 6, /*!< Allow to be closed */ OB_CLIENT_FUNC_ABOVE = 1 << 7, /*!< Allow to be put in lower layer */ - OB_CLIENT_FUNC_BELOW = 1 << 8 /*!< Allow to be put in higher layer */ + OB_CLIENT_FUNC_BELOW = 1 << 8, /*!< Allow to be put in higher layer */ + OB_CLIENT_FUNC_UNDECORATE = 1 << 9 /*!< Allow to be undecorated */ } ObFunctions; struct _ObClient
M openbox/client_menu.copenbox/client_menu.c

@@ -91,7 +91,7 @@ case CLIENT_CLOSE:

*en = c->functions & OB_CLIENT_FUNC_CLOSE; break; case CLIENT_DECORATE: - *en = client_normal(c); + *en = c->functions & OB_CLIENT_FUNC_UNDECORATE; break; default: *en = TRUE;