From: Mikael Magnusson Date: Thu, 28 Feb 2008 03:40:25 +0000 (+0100) Subject: Set a prop on locked windows, so panels can see it, and so it persists over restarts. X-Git-Url: http://git.openbox.org/?a=commitdiff_plain;h=ba7cb61f29c34e0dbadfaaac667f5c3a8dcb2269;p=mikachu%2Fopenbox.git Set a prop on locked windows, so panels can see it, and so it persists over restarts. --- diff --git a/obt/prop.c b/obt/prop.c index ad40b2b9..f1af19eb 100644 --- a/obt/prop.c +++ b/obt/prop.c @@ -191,6 +191,7 @@ void obt_prop_startup(void) CREATE_(OB_CONFIG_FILE); CREATE_(OB_WM_ACTION_UNDECORATE); CREATE_(OB_WM_STATE_UNDECORATED); + CREATE_(OB_WM_STATE_LOCKED); CREATE_(OB_CONTROL); CREATE_(OB_VERSION); CREATE_(OB_APP_ROLE); diff --git a/obt/prop.h b/obt/prop.h index 804ac409..6260a7a9 100644 --- a/obt/prop.h +++ b/obt/prop.h @@ -210,6 +210,7 @@ typedef enum { OBT_PROP_OB_WM_ACTION_UNDECORATE, OBT_PROP_OB_WM_STATE_UNDECORATED, + OBT_PROP_OB_WM_STATE_LOCKED, OBT_PROP_OPENBOX_PID, /* this is depreecated in favour of ob_control */ OBT_PROP_OB_THEME, OBT_PROP_OB_CONFIG_FILE, diff --git a/openbox/actions/lock.c b/openbox/actions/lock.c index 1271cbc8..4cea7722 100644 --- a/openbox/actions/lock.c +++ b/openbox/actions/lock.c @@ -12,6 +12,7 @@ void action_lock_startup(void) static gboolean run_func(ObActionsData *data, gpointer options) { if (data->client) - data->client->locked = !data->client->locked; + client_set_locked(data->client, !data->client->locked); + return FALSE; } diff --git a/openbox/client.c b/openbox/client.c index 3ff278ae..0ef9ecd1 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1373,6 +1373,8 @@ static void client_get_state(ObClient *self) 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); @@ -2525,7 +2527,7 @@ static void client_change_wm_state(ObClient *self) static void client_change_state(ObClient *self) { - gulong netstate[12]; + gulong netstate[13]; guint num; num = 0; @@ -2553,6 +2555,8 @@ static void client_change_state(ObClient *self) 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) @@ -3853,6 +3857,7 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2) 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; @@ -3900,6 +3905,8 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2) value = self->demands_attention; else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) value = undecorated; + else if (state == OBT_PROP_ATOM(OB_WM_STATE_LOCKED)) + value = locked; else g_assert_not_reached(); action = value ? OBT_PROP_ATOM(NET_WM_STATE_REMOVE) : @@ -3938,6 +3945,8 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2) demands_attention = value; } else if (state == OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED)) { undecorated = value; + } else if (state == OBT_PROP_ATOM(OB_WM_STATE_LOCKED)) { + locked = value; } } @@ -3966,6 +3975,8 @@ void client_set_state(ObClient *self, Atom action, glong data1, glong data2) 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; @@ -4186,6 +4197,14 @@ void client_set_layer(ObClient *self, gint layer) 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 && diff --git a/openbox/client.h b/openbox/client.h index d7e40408..0878c492 100644 --- a/openbox/client.h +++ b/openbox/client.h @@ -539,6 +539,9 @@ void client_maximize(ObClient *self, gboolean max, gint dir); */ void client_shade(ObClient *self, gboolean shade); +/*! Set a client window to be locked or not */ +void client_set_locked(ObClient *self, gboolean locked); + /*! Set a client window to have decorations or not */ void client_set_undecorated(ObClient *self, gboolean undecorated); diff --git a/openbox/screen.c b/openbox/screen.c index d254c528..b94ea849 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -296,6 +296,7 @@ gboolean screen_annex(void) supported[i++] = OBT_PROP_ATOM(OB_WM_ACTION_UNDECORATE); supported[i++] = OBT_PROP_ATOM(OB_WM_STATE_UNDECORATED); + supported[i++] = OBT_PROP_ATOM(OB_WM_STATE_LOCKED); supported[i++] = OBT_PROP_ATOM(OPENBOX_PID); supported[i++] = OBT_PROP_ATOM(OB_THEME); supported[i++] = OBT_PROP_ATOM(OB_CONFIG_FILE);