From cb5eb0d560759cebce3279cb28d942166e0e9a7a Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 4 Feb 2003 11:44:48 +0000 Subject: [PATCH] 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. --- scripts/focus.py | 26 ++++++++++++++++---------- scripts/stackedcycle.py | 8 +++----- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/scripts/focus.py b/scripts/focus.py index b1b169e1..5e7c0d28 100644 --- a/scripts/focus.py +++ b/scripts/focus.py @@ -36,31 +36,37 @@ def _focusable(client, desktop): 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): global _clients if _disable: return if data.client: - win = data.client.window() # move it to the top - _clients.remove(win) - _clients.insert(0, win) + _remove(data.client) + _clients.insert(0, data.client) elif FALLBACK: # pass around focus desktop = ob.openbox.screen(data.screen).desktop() - for w in _clients: - client = ob.openbox.findClient(w) - if client and _focusable(client, desktop) and client.focus(): + for c in _clients: + if _focusable(c, desktop) and c.focus(): break def _newwindow(data): - _clients.append(data.client.window()) + _clients.append(data.client) def _closewindow(data): - try: - _clients.remove(data.client.window()) - except ValueError: pass + _remove(data.client) ob.ebind(ob.EventAction.NewWindow, _newwindow) ob.ebind(ob.EventAction.CloseWindow, _closewindow) diff --git a/scripts/stackedcycle.py b/scripts/stackedcycle.py index 9c60c1b9..49ac6848 100644 --- a/scripts/stackedcycle.py +++ b/scripts/stackedcycle.py @@ -96,11 +96,9 @@ class _cycledata: # get the list of clients, keeping iconic windows at the bottom self.clients = [] iconic_clients = [] - for i in focus._clients: - c = ob.openbox.findClient(i) - if c: - if c.iconic(): iconic_clients.append(c) - else: self.clients.append(c) + for c in focus._clients: + if c.iconic(): iconic_clients.append(c) + else: self.clients.append(c) self.clients.extend(iconic_clients) font = self.style.labelFont() -- 2.45.2