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()