couple of LinkedLists converted to STL lists in BScreen changed teh calls to XSetInputFocus. Using the root window as the fallback when there is nothing to focus instead of the toolbar. Also, always using 'RevertToPointerRoot' instead of sometimes 'RevertToParent'
Dana Jansens danakj@orodu.net
6 files changed,
62 insertions(+),
80 deletions(-)
M
src/Screen.cc
→
src/Screen.cc
@@ -236,8 +236,6 @@ openbox.getSessionCursor());
workspaceNames = new LinkedList<char>; workspacesList = new LinkedList<Workspace>; - rootmenuList = new LinkedList<Rootmenu>; - netizenList = new LinkedList<Netizen>; iconList = new LinkedList<OpenboxWindow>; image_control =@@ -484,9 +482,8 @@ }
} } - if (! resource.sloppy_focus) - XSetInputFocus(getBaseDisplay().getXDisplay(), toolbar->getWindowID(), - RevertToParent, CurrentTime); + XSetInputFocus(getBaseDisplay().getXDisplay(), + PointerRoot, None, CurrentTime); XFree(children); XFlush(getBaseDisplay().getXDisplay());@@ -507,14 +504,14 @@
while (workspacesList->count()) delete workspacesList->remove(0); - while (rootmenuList->count()) - rootmenuList->remove(0); + while (!rootmenuList.empty()) + rootmenuList.erase(rootmenuList.begin()); while (iconList->count()) delete iconList->remove(0); - while (netizenList->count()) - delete netizenList->remove(0); + while (!netizenList.empty()) + netizenList.erase(netizenList.begin()); #ifdef HAVE_STRFTIME if (resource.strftime_format)@@ -535,9 +532,7 @@ delete image_control;
delete workspacesList; delete workspaceNames; - delete rootmenuList; delete iconList; - delete netizenList; if (resource.wstyle.fontset) XFreeFontSet(getBaseDisplay().getXDisplay(), resource.wstyle.fontset);@@ -2012,7 +2007,7 @@ }
void BScreen::addNetizen(Netizen *n) { - netizenList->insert(n); + netizenList.push_back(n); n->sendWorkspaceCount(); n->sendCurrentWorkspace();@@ -2031,80 +2026,79 @@ }
void BScreen::removeNetizen(Window w) { - LinkedListIterator<Netizen> it(netizenList); + netList::iterator it; int i = 0; - for (Netizen *n = it.current(); n; it++, i++, n = it.current()) - if (n->getWindowID() == w) { - Netizen *tmp = netizenList->remove(i); + for (it = netizenList.begin(); it != netizenList.end(); ++it) + if ((*it)->getWindowID() == w) { + Netizen *tmp = *it; + netizenList.erase(it); delete tmp; - break; } } void BScreen::updateNetizenCurrentWorkspace(void) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendCurrentWorkspace(); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendCurrentWorkspace(); } void BScreen::updateNetizenWorkspaceCount(void) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWorkspaceCount(); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWorkspaceCount(); } void BScreen::updateNetizenWindowFocus(void) { Window f = ((openbox.focusedWindow()) ? openbox.focusedWindow()->getClientWindow() : None); - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWindowFocus(f); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWindowFocus(f); } - void BScreen::updateNetizenWindowAdd(Window w, unsigned long p) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWindowAdd(w, p); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWindowAdd(w, p); } void BScreen::updateNetizenWindowDel(Window w) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWindowDel(w); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWindowDel(w); } void BScreen::updateNetizenWindowRaise(Window w) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWindowRaise(w); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWindowRaise(w); } void BScreen::updateNetizenWindowLower(Window w) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendWindowLower(w); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendWindowLower(w); } void BScreen::updateNetizenConfigNotify(XEvent *e) { - LinkedListIterator<Netizen> it(netizenList); - for (Netizen *n = it.current(); n; it++, n = it.current()) - n->sendConfigNotify(e); + netList::iterator it; + for (it = netizenList.begin(); it != netizenList.end(); ++it) + (*it)->sendConfigNotify(e); } void BScreen::raiseWindows(Window *workspace_stack, int num) { Window *session_stack = new - Window[(num + workspacesList->count() + rootmenuList->count() + 13)]; + Window[(num + workspacesList->count() + rootmenuList.size() + 13)]; int i = 0, k = num; XRaiseWindow(getBaseDisplay().getXDisplay(), iconmenu->getWindowID());@@ -2130,9 +2124,9 @@ *(session_stack + i++) =
toolbar->getMenu()->getPlacementmenu()->getWindowID(); *(session_stack + i++) = toolbar->getMenu()->getWindowID(); - LinkedListIterator<Rootmenu> rit(rootmenuList); - for (Rootmenu *tmp = rit.current(); tmp; rit++, tmp = rit.current()) - *(session_stack + i++) = tmp->getWindowID(); + menuList::iterator rit; + for (rit = rootmenuList.begin(); rit != rootmenuList.end(); ++rit) + *(session_stack + i++) = (*rit)->getWindowID(); *(session_stack + i++) = rootmenu->getWindowID(); if (toolbar->onTop())@@ -2276,8 +2270,8 @@
void BScreen::InitMenu(void) { if (rootmenu) { - while (rootmenuList->count()) - rootmenuList->remove(0); + while (!rootmenuList.empty()) + rootmenuList.erase(rootmenuList.begin()); while (rootmenu->getCount()) rootmenu->remove(0);@@ -2580,7 +2574,7 @@
parseMenuFile(file, submenu); submenu->update(); menu->insert(label, submenu); - rootmenuList->insert(submenu); + rootmenuList.push_back(submenu); } break;@@ -2706,7 +2700,7 @@
if (newmenu) { stylesmenu->setLabel(label); menu->insert(label, stylesmenu); - rootmenuList->insert(stylesmenu); + rootmenuList.push_back(stylesmenu); } openbox.setMenuFilename(stylesdir);
M
src/Screen.h
→
src/Screen.h
@@ -53,6 +53,10 @@ #endif // SLIT
#include "Image.h" #include "Resource.h" +#include <list> +typedef std::list<Rootmenu *> menuList; +typedef std::list<Netizen *> netList; + // forward declaration class BScreen;@@ -109,8 +113,8 @@ Configmenu *configmenu;
Iconmenu *iconmenu; Rootmenu *rootmenu; - LinkedList<Rootmenu> *rootmenuList; - LinkedList<Netizen> *netizenList; + menuList rootmenuList; + netList netizenList; LinkedList<OpenboxWindow> *iconList; #ifdef SLIT
M
src/Toolbar.cc
→
src/Toolbar.cc
@@ -971,9 +971,7 @@ window == frame.workspace_label)
return; XSetInputFocus(display, frame.workspace_label, - ((screen.sloppyFocus()) ? RevertToPointerRoot : - RevertToParent), - CurrentTime); + RevertToPointerRoot, CurrentTime); XClearWindow(display, frame.workspace_label); openbox.setNoFocus(True);
M
src/Window.cc
→
src/Window.cc
@@ -1388,7 +1388,7 @@ ret = client.transient->setInputFocus();
} else if (! flags.focused) { if (focus_mode == F_LocallyActive || focus_mode == F_Passive) XSetInputFocus(display, client.window, - RevertToPointerRoot, CurrentTime); + RevertToPointerRoot, CurrentTime); else XSetInputFocus(display, screen->getRootWindow(), RevertToNone, CurrentTime);
M
src/Workspace.cc
→
src/Workspace.cc
@@ -115,14 +115,13 @@ if (w->isFocused()) {
if (w->isTransient() && w->getTransientFor() && w->getTransientFor()->isVisible()) { w->getTransientFor()->setInputFocus(); - } else if (screen.sloppyFocus()) { - screen.getOpenbox().focusWindow((OpenboxWindow *) 0); } else { - if (_zorder.empty() || !_zorder.front()->setInputFocus()) { + if (screen.sloppyFocus() || // sloppy focus + _zorder.empty() || // click focus but no windows + !_zorder.front()->setInputFocus()) { // tried window, but wont focus screen.getOpenbox().focusWindow((OpenboxWindow *) 0); - XSetInputFocus(screen.getOpenbox().getXDisplay(), - screen.getToolbar()->getWindowID(), - RevertToParent, CurrentTime); + XSetInputFocus(screen.getOpenbox().getXDisplay(), + PointerRoot, None, CurrentTime); } } }@@ -319,7 +318,7 @@
void Workspace::shutdown(void) { while (!_windows.empty()) { _windows[0]->restore(); - _windows.erase(_windows.begin()); + delete _windows[0]; } }