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'
This commit is contained in:
Dana Jansens 2002-05-12 01:23:48 +00:00
parent f804f86c3e
commit a0dbb0e13f
6 changed files with 62 additions and 80 deletions

View file

@ -1,4 +1,5 @@
// Configmenu.cc for Openbox
// Copyright (c) 2002 - 2002 Ben Jansens <ben@orodu.net>
// Copyright (c) 2001 Sean 'Shaleh' Perry <shaleh@debian.org>
// Copyright (c) 1997 - 2000 Brad Hughes (bhughes@tcac.net)
//
@ -184,32 +185,18 @@ void Configmenu::Focusmenu::itemSelected(int button, int index) {
case 1: // click to focus
configmenu->screen.setSloppyFocus(false);
configmenu->screen.setAutoRaise(false);
if (! configmenu->screen.getOpenbox().focusedWindow())
XSetInputFocus(configmenu->screen.getOpenbox().getXDisplay(),
configmenu->screen.getToolbar()->getWindowID(),
RevertToParent, CurrentTime);
else
XSetInputFocus(configmenu->screen.getOpenbox().getXDisplay(),
configmenu->screen.getOpenbox().
focusedWindow()->getClientWindow(),
RevertToParent, CurrentTime);
// make windows all grab button1 clicks
configmenu->screen.reconfigure();
break;
case 2: // sloppy focus
configmenu->screen.setSloppyFocus(true);
// make windows stop grabbing button1 clicks
configmenu->screen.reconfigure();
break;
case 3: // auto raise with sloppy focus
bool change = ((configmenu->screen.autoRaise()) ? false : true);
configmenu->screen.setAutoRaise(change);
configmenu->screen.setAutoRaise(!configmenu->screen.autoRaise());
break;
}

View file

@ -236,8 +236,6 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
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 @@ BScreen::BScreen(Openbox &ob, int scrn, Resource &conf) : ScreenInfo(ob, scrn),
}
}
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 @@ BScreen::~BScreen(void) {
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 @@ BScreen::~BScreen(void) {
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::changeWorkspaceID(int id) {
void BScreen::addNetizen(Netizen *n) {
netizenList->insert(n);
netizenList.push_back(n);
n->sendWorkspaceCount();
n->sendCurrentWorkspace();
@ -2031,80 +2026,79 @@ void BScreen::addNetizen(Netizen *n) {
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 @@ void BScreen::raiseWindows(Window *workspace_stack, int num) {
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::raiseFocus(void) {
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 @@ Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
parseMenuFile(file, submenu);
submenu->update();
menu->insert(label, submenu);
rootmenuList->insert(submenu);
rootmenuList.push_back(submenu);
}
break;
@ -2706,7 +2700,7 @@ Bool BScreen::parseMenuFile(FILE *file, Rootmenu *menu) {
if (newmenu) {
stylesmenu->setLabel(label);
menu->insert(label, stylesmenu);
rootmenuList->insert(stylesmenu);
rootmenuList.push_back(stylesmenu);
}
openbox.setMenuFilename(stylesdir);

View file

@ -53,6 +53,10 @@
#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 @@ private:
Iconmenu *iconmenu;
Rootmenu *rootmenu;
LinkedList<Rootmenu> *rootmenuList;
LinkedList<Netizen> *netizenList;
menuList rootmenuList;
netList netizenList;
LinkedList<OpenboxWindow> *iconList;
#ifdef SLIT

View file

@ -971,9 +971,7 @@ void Toolbar::edit() {
return;
XSetInputFocus(display, frame.workspace_label,
((screen.sloppyFocus()) ? RevertToPointerRoot :
RevertToParent),
CurrentTime);
RevertToPointerRoot, CurrentTime);
XClearWindow(display, frame.workspace_label);
openbox.setNoFocus(True);

View file

@ -1388,7 +1388,7 @@ Bool OpenboxWindow::setInputFocus(void) {
} 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);

View file

@ -115,14 +115,13 @@ const int Workspace::removeWindow(OpenboxWindow *w) {
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::setName(char *new_name) {
void Workspace::shutdown(void) {
while (!_windows.empty()) {
_windows[0]->restore();
_windows.erase(_windows.begin());
delete _windows[0];
}
}