From 098fae70a6d8d15877938080437f0fc20f52bbf5 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Fri, 10 May 2002 02:58:09 +0000 Subject: better gcc3 compat. using ostrstream again. and using namespace std; some focus changes. workspace contains a focused window instead of openbox class. this fixes a seg --- src/Workspace.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/Workspace.cc') diff --git a/src/Workspace.cc b/src/Workspace.cc index 0af1c332..d8737348 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -63,9 +63,8 @@ typedef std::vector rectList; Workspace::Workspace(BScreen &scrn, int i) : screen(scrn) { - cascade_x = cascade_y = 0; - + _focused = (OpenboxWindow *) 0; id = i; stackingList = new LinkedList; @@ -122,11 +121,11 @@ const int Workspace::removeWindow(OpenboxWindow *w) { w->getTransientFor()->isVisible()) { w->getTransientFor()->setInputFocus(); } else if (screen.sloppyFocus()) { - screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0); + screen.getOpenbox().focusWindow((OpenboxWindow *) 0); } else { OpenboxWindow *top = stackingList->first(); if (! top || ! top->setInputFocus()) { - screen.getOpenbox().setFocusedWindow((OpenboxWindow *) 0); + screen.getOpenbox().focusWindow((OpenboxWindow *) 0); XSetInputFocus(screen.getOpenbox().getXDisplay(), screen.getToolbar()->getWindowID(), RevertToParent, CurrentTime); @@ -152,6 +151,15 @@ const int Workspace::removeWindow(OpenboxWindow *w) { } +void Workspace::focusWindow(OpenboxWindow *win) { + if (win != (OpenboxWindow *) 0) + clientmenu->setItemSelected(win->getWindowNumber(), true); + if (_focused != (OpenboxWindow *) 0) + clientmenu->setItemSelected(_focused->getWindowNumber(), false); + _focused = win; +} + + void Workspace::showAll(void) { LinkedListIterator it(stackingList); for (OpenboxWindow *bw = it.current(); bw; it++, bw = it.current()) @@ -506,7 +514,7 @@ Point *Workspace::rowSmartPlacement(const Size &win_size, const Rect &space) { best = NULL; for (siter=spaces.begin(); siter!=spaces.end(); ++siter) if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) { - best = siter; + best = &*siter; break; } @@ -550,7 +558,7 @@ Point *Workspace::colSmartPlacement(const Size &win_size, const Rect &space) { best = NULL; for (siter=spaces.begin(); siter!=spaces.end(); ++siter) if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) { - best = siter; + best = &*siter; break; } -- cgit v1.2.3