all repos — openbox @ 11df262d7eb56ae6af98af86cbfee8226107114d

openbox fork - make it a bit more like ryudo

add support for _NET_WM_ACTION_ABOVE and _NET_WM_ACTION_BELOW which aren't in the NETWM spec yet, but will be shortly.
Dana Jansens danakj@orodu.net
commit

11df262d7eb56ae6af98af86cbfee8226107114d

parent

0ee1581824f4693884a6f0abde62d20642df82ed

6 files changed, 26 insertions(+), 6 deletions(-)

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

@@ -1594,7 +1594,9 @@ OB_CLIENT_FUNC_MOVE |

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

@@ -1626,10 +1628,15 @@ self->decorations = 0;

self->functions = OB_CLIENT_FUNC_MOVE; case OB_CLIENT_TYPE_DESKTOP: - case OB_CLIENT_TYPE_DOCK: /* these windows are not manipulated by the window manager */ self->decorations = 0; self->functions = 0; + + case OB_CLIENT_TYPE_DOCK: + /* these windows are not manipulated by the window manager, but they + can set below layer which has a special meaning */ + self->decorations = 0; + self->functions = OB_CLIENT_FUNC_BELOW; break; }

@@ -1719,7 +1726,7 @@ }

static void client_change_allowed_actions(ObClient *self) { - gulong actions[9]; + gulong actions[11]; gint num = 0; /* desktop windows are kept on all desktops */

@@ -1742,6 +1749,10 @@ if (self->functions & OB_CLIENT_FUNC_MAXIMIZE) {

actions[num++] = prop_atoms.net_wm_action_maximize_horz; actions[num++] = prop_atoms.net_wm_action_maximize_vert; } + if (self->functions & OB_CLIENT_FUNC_ABOVE) + actions[num++] = prop_atoms.net_wm_action_above; + if (self->functions & OB_CLIENT_FUNC_BELOW) + actions[num++] = prop_atoms.net_wm_action_below; PROP_SETA32(self->window, net_wm_allowed_actions, atom, actions, num);
M openbox/client.hopenbox/client.h

@@ -71,7 +71,9 @@ OB_CLIENT_FUNC_ICONIFY = 1 << 2, /*!< Allow to be iconified */

OB_CLIENT_FUNC_MAXIMIZE = 1 << 3, /*!< Allow to be maximized */ 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_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 */ } ObFunctions; struct _ObClient
M openbox/client_menu.copenbox/client_menu.c

@@ -176,13 +176,13 @@

if (e->type == OB_MENU_ENTRY_TYPE_NORMAL) { switch (e->id) { case LAYER_TOP: - *en = !c->above; + *en = !c->above && (c->functions & OB_CLIENT_FUNC_ABOVE); break; case LAYER_NORMAL: *en = c->above || c->below; break; case LAYER_BOTTOM: - *en = !c->below; + *en = !c->below && (c->functions & OB_CLIENT_FUNC_BELOW); break; default: *en = TRUE;
M openbox/prop.copenbox/prop.c

@@ -135,6 +135,9 @@ CREATE(net_wm_action_maximize_vert, "_NET_WM_ACTION_MAXIMIZE_VERT");

CREATE(net_wm_action_fullscreen, "_NET_WM_ACTION_FULLSCREEN"); CREATE(net_wm_action_change_desktop, "_NET_WM_ACTION_CHANGE_DESKTOP"); CREATE(net_wm_action_close, "_NET_WM_ACTION_CLOSE"); + CREATE(net_wm_action_above, "_NET_WM_ACTION_ABOVE"); + CREATE(net_wm_action_below, "_NET_WM_ACTION_BELOW"); + CREATE(net_wm_state_modal, "_NET_WM_STATE_MODAL"); /* CREATE(net_wm_state_sticky, "_NET_WM_STATE_STICKY");*/ CREATE(net_wm_state_maximized_vert, "_NET_WM_STATE_MAXIMIZED_VERT");
M openbox/prop.hopenbox/prop.h

@@ -160,6 +160,8 @@ Atom net_wm_action_maximize_vert;

Atom net_wm_action_fullscreen; Atom net_wm_action_change_desktop; Atom net_wm_action_close; + Atom net_wm_action_above; + Atom net_wm_action_below; Atom net_wm_state_modal; /* Atom net_wm_state_sticky;*/
M openbox/screen.copenbox/screen.c

@@ -258,6 +258,8 @@ supported[i++] = prop_atoms.net_wm_action_maximize_vert;

supported[i++] = prop_atoms.net_wm_action_fullscreen; supported[i++] = prop_atoms.net_wm_action_change_desktop; supported[i++] = prop_atoms.net_wm_action_close; + supported[i++] = prop_atoms.net_wm_action_above; + supported[i++] = prop_atoms.net_wm_action_below; supported[i++] = prop_atoms.net_wm_state; supported[i++] = prop_atoms.net_wm_state_modal; supported[i++] = prop_atoms.net_wm_state_maximized_vert;