self->demands_attention = TRUE;
else if (state[i] == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED))
self->undecorated = TRUE;
+ else if (state[i] == OBT_PROP_ATOM(OB_WM_STATE_LOCKED))
+ self->locked = TRUE;
}
g_free(state);
static void client_change_state(ObClient *self)
{
- gulong netstate[12];
+ gulong netstate[13];
guint num;
num = 0;
netstate[num++] = OBT_PROP_ATOM(NET_WM_STATE_DEMANDS_ATTENTION);
if (self->undecorated)
netstate[num++] = OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED);
+ if (self->locked)
+ netstate[num++] = OBT_PROP_ATOM(OB_WM_STATE_LOCKED);
OBT_PROP_SETA32(self->window, NET_WM_STATE, ATOM, netstate, num);
if (self->frame)
gboolean shaded = self->shaded;
gboolean fullscreen = self->fullscreen;
gboolean undecorated = self->undecorated;
+ gboolean locked = self->locked;
gboolean max_horz = self->max_horz;
gboolean max_vert = self->max_vert;
gboolean modal = self->modal;
else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED))
action = undecorated ? OBT_PROP_ATOM(NET_WM_STATE_REMOVE) :
OBT_PROP_ATOM(NET_WM_STATE_ADD);
+ else if (state == OBT_PROP_ATOM(OB_WM_STATE_LOCKED))
+ action = locked ? OBT_PROP_ATOM(NET_WM_STATE_REMOVE) :
+ OBT_PROP_ATOM(NET_WM_STATE_ADD);
}
if (action == OBT_PROP_ATOM(NET_WM_STATE_ADD)) {
demands_attention = TRUE;
} else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) {
undecorated = TRUE;
+ } else if (state == OBT_PROP_ATOM(OB_WM_STATE_LOCKED)) {
+ locked = TRUE;
}
} else { /* action == OBT_PROP_ATOM(NET_WM_STATE_REMOVE) */
demands_attention = FALSE;
} else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) {
undecorated = FALSE;
+ } else if (state == OBT_PROP_ATOM(OB_WM_STATE_LOCKED)) {
+ locked = FALSE;
}
}
}
client_shade(self, shaded);
if (undecorated != self->undecorated)
client_set_undecorated(self, undecorated);
+ if (locked != self->locked)
+ client_set_locked(self, locked);
if (above != self->above || below != self->below) {
self->above = above;
self->below = below;
client_change_state(self); /* reflect this in the state hints */
}
+void client_set_locked(ObClient *self, gboolean locked)
+{
+ if (self->locked != locked) {
+ self->locked = locked;
+ client_change_state(self);
+ }
+}
+
void client_set_undecorated(ObClient *self, gboolean undecorated)
{
if (self->undecorated != undecorated &&