summaryrefslogtreecommitdiff
path: root/src/screen.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-10 03:47:54 +0000
committerDana Jansens <danakj@orodu.net>2003-02-10 03:47:54 +0000
commit43c1f2a8f84d8008155d6df8e2bcd35534c62893 (patch)
treeb00b8f09ddbd1b432820246af5086e511bb1a0c4 /src/screen.cc
parent43f958996b3e5a6af08c1fd7aded883ba5ef5355 (diff)
modal works like a charm now
Diffstat (limited to 'src/screen.cc')
-rw-r--r--src/screen.cc17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/screen.cc b/src/screen.cc
index 024c5094..2c49c6cc 100644
--- a/src/screen.cc
+++ b/src/screen.cc
@@ -595,7 +595,7 @@ void Screen::unmanageWindow(Client *client)
updateStrut();
// unset modal before dropping our focus
- client->setModal(false);
+ client->_modal = false;
// unfocus the client (calls the focus callbacks)
client->unfocus();
@@ -652,6 +652,10 @@ void Screen::raiseWindow(Client *client)
assert(!_stacking.empty()); // this would be bad
+ Client *m = client->findModalChild();
+ // if we have a modal child, raise it instead, we'll go along tho later
+ if (m) raiseWindow(m);
+
// remove the client before looking so we can't run into ourselves
_stacking.remove(client);
@@ -659,7 +663,10 @@ void Screen::raiseWindow(Client *client)
const ClientList::iterator end = _stacking.end();
// the stacking list is from highest to lowest
- for (; it != end && (*it)->layer() > client->layer(); ++it);
+// for (;it != end, ++it) {
+// if ((*it)->layer() <= client->layer() && m != *it) break;
+// }
+ for (; it != end && ((*it)->layer() > client->layer() || m == *it); ++it);
/*
if our new position is the top, we want to stack under the _focuswindow
@@ -673,11 +680,7 @@ void Screen::raiseWindow(Client *client)
XRestackWindows(**otk::display, wins, 2);
- // if the window has a modal child, then raise it after us to put it on top
- if (client->modalChild())
- raiseWindow(client->modalChild());
- else
- changeStackingList(); // no need to do this twice!
+ changeStackingList();
}
void Screen::changeDesktop(long desktop)