store pointers instead of window id's. this lets us use them directly instead of having to look them all up all the time. this is possible now because we watch for new/close window events.

This commit is contained in:
Dana Jansens 2003-02-04 11:44:48 +00:00
parent 76525992cd
commit cb5eb0d560
2 changed files with 19 additions and 15 deletions

View file

@ -36,31 +36,37 @@ def _focusable(client, desktop):
return 1 return 1
def _remove(client):
"""This function exists because Swig pointers don't define a __eq__
function, so list.remove(ptr) does not work."""
win = client.window()
for i in range(len(_clients)):
if _clients[i].window() == win:
_clients.pop(i)
return
raise ValueError("_remove(x): x not in _clients list.")
def _focused(data): def _focused(data):
global _clients global _clients
if _disable: return if _disable: return
if data.client: if data.client:
win = data.client.window()
# move it to the top # move it to the top
_clients.remove(win) _remove(data.client)
_clients.insert(0, win) _clients.insert(0, data.client)
elif FALLBACK: elif FALLBACK:
# pass around focus # pass around focus
desktop = ob.openbox.screen(data.screen).desktop() desktop = ob.openbox.screen(data.screen).desktop()
for w in _clients: for c in _clients:
client = ob.openbox.findClient(w) if _focusable(c, desktop) and c.focus():
if client and _focusable(client, desktop) and client.focus():
break break
def _newwindow(data): def _newwindow(data):
_clients.append(data.client.window()) _clients.append(data.client)
def _closewindow(data): def _closewindow(data):
try: _remove(data.client)
_clients.remove(data.client.window())
except ValueError: pass
ob.ebind(ob.EventAction.NewWindow, _newwindow) ob.ebind(ob.EventAction.NewWindow, _newwindow)
ob.ebind(ob.EventAction.CloseWindow, _closewindow) ob.ebind(ob.EventAction.CloseWindow, _closewindow)

View file

@ -96,11 +96,9 @@ class _cycledata:
# get the list of clients, keeping iconic windows at the bottom # get the list of clients, keeping iconic windows at the bottom
self.clients = [] self.clients = []
iconic_clients = [] iconic_clients = []
for i in focus._clients: for c in focus._clients:
c = ob.openbox.findClient(i) if c.iconic(): iconic_clients.append(c)
if c: else: self.clients.append(c)
if c.iconic(): iconic_clients.append(c)
else: self.clients.append(c)
self.clients.extend(iconic_clients) self.clients.extend(iconic_clients)
font = self.style.labelFont() font = self.style.labelFont()