summaryrefslogtreecommitdiff
path: root/src/screen.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-03 18:25:04 +0000
committerDana Jansens <danakj@orodu.net>2003-01-03 18:25:04 +0000
commit13f2930de727539fce8bd759450706b6094d5a98 (patch)
treee0d7ab7744e07fef4a1255313e1d354e16e68d86 /src/screen.cc
parent89e6d5c0e64513d06ac4368981239de969a6fc9d (diff)
share code for raising/lowering windows
Diffstat (limited to 'src/screen.cc')
-rw-r--r--src/screen.cc32
1 files changed, 3 insertions, 29 deletions
diff --git a/src/screen.cc b/src/screen.cc
index f510749c..f0b0eb3d 100644
--- a/src/screen.cc
+++ b/src/screen.cc
@@ -406,7 +406,7 @@ void OBScreen::manageWindow(Window window)
clients.push_back(client);
// this puts into the stacking order, then raises it
_stacking.push_back(client);
- raise(client);
+ restack(true, client);
// update the root properties
setClientList();
@@ -461,7 +461,7 @@ void OBScreen::unmanageWindow(OBClient *client)
setClientList();
}
-void OBScreen::raise(OBClient *client)
+void OBScreen::restack(bool raise, OBClient *client)
{
const int layer = client->layer();
std::vector<Window> wins;
@@ -473,33 +473,7 @@ void OBScreen::raise(OBClient *client)
ClientList::iterator it = _stacking.begin(), end = _stacking.end();
// insert the windows above this window
for (; it != end; ++it) {
- if ((*it)->layer() <= layer)
- break;
- wins.push_back((*it)->frame->window());
- }
- // insert our client
- wins.push_back(client->frame->window());
- _stacking.insert(it, client);
- // insert the remaining below this window
- for (; it != end; ++it)
- wins.push_back((*it)->frame->window());
-
- XRestackWindows(otk::OBDisplay::display, &wins[0], wins.size());
-}
-
-void OBScreen::lower(OBClient *client)
-{
- const int layer = client->layer();
- std::vector<Window> wins;
-
- _stacking.remove(client);
-
- // the stacking list is from highest to lowest
-
- ClientList::iterator it = _stacking.begin(), end = _stacking.end();
- // insert the windows above this window
- for (; it != end; ++it) {
- if ((*it)->layer() < layer)
+ if ((*it)->layer() < layer || (raise && (*it)->layer() == layer))
break;
wins.push_back((*it)->frame->window());
}