From c2c84c3f5ed75561d7d6502f787ab06bc7d984d2 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 10 May 2007 04:06:50 +0000 Subject: add support for _NET_RESTACK_WINDOW --- openbox/stacking.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'openbox/stacking.c') diff --git a/openbox/stacking.c b/openbox/stacking.c index afad8ad0..70a072fc 100644 --- a/openbox/stacking.c +++ b/openbox/stacking.c @@ -25,6 +25,7 @@ #include "group.h" #include "frame.h" #include "window.h" +#include "debug.h" GList *stacking_list = NULL; @@ -492,3 +493,46 @@ gboolean stacking_occluded(ObClient *client, ObClient *sibling) } return obscured; } + +void stacking_restack_request(ObClient *client, ObClient *sibling, + gint detail) +{ + switch (detail) { + case Below: + ob_debug("Restack request Below for client %s sibling %s\n", + client->title, sibling ? sibling->title : "(all)"); + /* just lower it */ + stacking_lower(CLIENT_AS_WINDOW(client)); + break; + case BottomIf: + ob_debug("Restack request BottomIf for client %s sibling " + "%s\n", + client->title, sibling ? sibling->title : "(all)"); + /* if this client occludes sibling (or anything if NULL), then + lower it to the bottom */ + if (stacking_occluded(sibling, client)) + stacking_lower(CLIENT_AS_WINDOW(client)); + break; + case Above: + ob_debug("Restack request Above for client %s sibling %s\n", + client->title, sibling ? sibling->title : "(all)"); + /* activate it rather than just focus it */ + client_activate(client, FALSE, FALSE); + break; + case TopIf: + ob_debug("Restack request TopIf for client %s sibling %s\n", + client->title, sibling ? sibling->title : "(all)"); + if (stacking_occluded(client, sibling)) + /* activate it rather than just focus it */ + client_activate(client, FALSE, FALSE); + case Opposite: + ob_debug("Restack request Opposite for client %s sibling " + "%s\n", + client->title, sibling ? sibling->title : "(all)"); + if (stacking_occluded(client, sibling)) + /* activate it rather than just focus it */ + client_activate(client, FALSE, FALSE); + else if (stacking_occluded(sibling, client)) + stacking_lower(CLIENT_AS_WINDOW(client)); + } +} -- cgit v1.2.3