diff options
| author | Dana Jansens <danakj@orodu.net> | 2002-07-16 08:00:59 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2002-07-16 08:00:59 +0000 |
| commit | 2dde696a1335ef61bb368c55f4ee52e1dd8610a1 (patch) | |
| tree | a4f0ec5415ed31221aa4eaca1c0c6f4de3fb476b /src/Workspace.cc | |
| parent | 41053a810aa701e4e39f124c725c5bbc20492059 (diff) | |
much awesome support for special windows like panels/desktops.
All 'non-normal' windows are treated equally now, with a fe wexceptionms for the desktop for stacking.
Fix some ClicmMousePlacement bugs while we're at it.
Diffstat (limited to 'src/Workspace.cc')
| -rw-r--r-- | src/Workspace.cc | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/Workspace.cc b/src/Workspace.cc index 4fd579e4..843f8100 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -79,22 +79,28 @@ void Workspace::addWindow(BlackboxWindow *w, bool place) { if (place) placeWindow(w); - w->setWorkspace(id); - w->setWindowNumber(windowList.size()); - stackingList.push_front(w); - windowList.push_back(w); + + if (w->isNormal()) { + w->setWorkspace(id); + w->setWindowNumber(windowList.size()); - clientmenu->insert(w->getTitle()); - clientmenu->update(); + windowList.push_back(w); + + clientmenu->insert(w->getTitle()); + clientmenu->update(); - screen->updateNetizenWindowAdd(w->getClientWindow(), id); + screen->updateNetizenWindowAdd(w->getClientWindow(), id); + } - raiseWindow(w); + if (! w->isDesktop()) + raiseWindow(w); + else + lowerWindow(w); } -unsigned int Workspace::removeWindow(BlackboxWindow *w) { +void Workspace::removeWindow(BlackboxWindow *w) { assert(w != 0); stackingList.remove(w); @@ -113,6 +119,8 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) { } } + if (! w->isNormal()) return; + windowList.remove(w); clientmenu->remove(w->getWindowNumber()); clientmenu->update(); @@ -127,8 +135,6 @@ unsigned int Workspace::removeWindow(BlackboxWindow *w) { if (i == 0) cascade_x = cascade_y = 32; - - return i; } @@ -154,10 +160,7 @@ void Workspace::focusFallback(const BlackboxWindow *old_window) { end = stackingList.end(); for (; it != end; ++it) { BlackboxWindow *tmp = *it; - if (! (tmp->windowType() == BlackboxWindow::Type_Dialog || - tmp->windowType() == BlackboxWindow::Type_Normal)) - continue; // don't fallback to special windows - if (tmp && tmp->setInputFocus()) { + if (tmp && tmp->isNormal() && tmp->setInputFocus()) { // we found our new focus target newfocus = tmp; break; @@ -281,8 +284,10 @@ void Workspace::lowerTransients(const BlackboxWindow * const win, void Workspace::raiseWindow(BlackboxWindow *w) { BlackboxWindow *win = w; + if (win->isDesktop()) return; + // walk up the transient_for's to the window that is not a transient - while (win->isTransient()) { + while (win->isTransient() && ! win->isDesktop()) { if (! win->getTransientFor()) break; win = win->getTransientFor(); } @@ -296,7 +301,7 @@ void Workspace::raiseWindow(BlackboxWindow *w) { *(stack++) = win->getFrameWindow(); screen->updateNetizenWindowRaise(win->getClientWindow()); - if (! win->isIconic()) { + if (! (win->isIconic() || win->isDesktop())) { Workspace *wkspc = screen->getWorkspace(win->getWorkspaceNumber()); wkspc->stackingList.remove(win); wkspc->stackingList.push_front(win); @@ -312,7 +317,7 @@ void Workspace::lowerWindow(BlackboxWindow *w) { BlackboxWindow *win = w; // walk up the transient_for's to the window that is not a transient - while (win->isTransient()) { + while (win->isTransient() && ! win->isDesktop()) { if (! win->getTransientFor()) break; win = win->getTransientFor(); } @@ -328,7 +333,7 @@ void Workspace::lowerWindow(BlackboxWindow *w) { *(stack++) = win->getFrameWindow(); screen->updateNetizenWindowLower(win->getClientWindow()); - if (! win->isIconic()) { + if (! (win->isIconic() || win->isDesktop())) { Workspace *wkspc = screen->getWorkspace(win->getWorkspaceNumber()); wkspc->stackingList.remove(win); wkspc->stackingList.push_back(win); |
