keep a list of clients in the order that they have been focused
This commit is contained in:
parent
f4b87e04a2
commit
ff98438acc
1 changed files with 26 additions and 20 deletions
|
@ -4,35 +4,41 @@
|
||||||
|
|
||||||
ob_focus_raise = 1
|
ob_focus_raise = 1
|
||||||
ob_focus_fallback = 0
|
ob_focus_fallback = 0
|
||||||
ob_focus_stack = []
|
|
||||||
|
# maintain a list of clients, stacked in focus order
|
||||||
|
ob_clients = []
|
||||||
|
# maintaint he current focused window
|
||||||
|
ob_focused = 0;
|
||||||
|
|
||||||
|
def ob_new_win(data):
|
||||||
|
global ob_clients
|
||||||
|
if not len(ob_clients): ob_clients.append(data.client.window())
|
||||||
|
else: ob_clients.insert(1, data.client.window()) # insert in 2nd slot
|
||||||
|
|
||||||
|
def ob_close_win(data):
|
||||||
|
global ob_clients
|
||||||
|
ob_clients.remove(data.client.window())
|
||||||
|
|
||||||
def ob_focused(data):
|
def ob_focused(data):
|
||||||
global ob_focus_raise
|
global ob_clients
|
||||||
global ob_focus_fallback
|
|
||||||
global ob_focus_stack
|
|
||||||
if data.client:
|
if data.client:
|
||||||
window = data.client.window()
|
win = data.client.window()
|
||||||
# add/move to front the stack
|
ob_focused = win
|
||||||
if window in ob_focus_stack:
|
# move it to the top
|
||||||
ob_focus_stack.remove(window)
|
ob_clients.remove(win)
|
||||||
ob_focus_stack.insert(0, window)
|
ob_clients.insert(0, win)
|
||||||
elif ob_focus_fallback:
|
elif ob_focus_fallback:
|
||||||
# pass around focus
|
# pass around focus
|
||||||
|
ob_focused = 0
|
||||||
desktop = openbox.screen(data.screen).desktop()
|
desktop = openbox.screen(data.screen).desktop()
|
||||||
l = len(ob_focus_stack)
|
for w in ob_clients:
|
||||||
i = 0
|
|
||||||
while i < l:
|
|
||||||
w = ob_focus_stack[i]
|
|
||||||
client = openbox.findClient(w)
|
client = openbox.findClient(w)
|
||||||
if not client: # window is gone, remove it
|
if client and (client.desktop() == desktop and \
|
||||||
ob_focus_stack.pop(i)
|
client.normal() and client.focus()):
|
||||||
l = l - 1
|
|
||||||
elif client.desktop() == desktop and \
|
|
||||||
client.normal() and client.focus():
|
|
||||||
break
|
break
|
||||||
else:
|
|
||||||
i = i + 1
|
|
||||||
|
|
||||||
|
ebind(EventNewWindow, ob_new_win)
|
||||||
|
ebind(EventCloseWindow, ob_close_win)
|
||||||
ebind(EventFocus, ob_focused)
|
ebind(EventFocus, ob_focused)
|
||||||
|
|
||||||
def focus_next(data, num=1, forward=1):
|
def focus_next(data, num=1, forward=1):
|
||||||
|
|
Loading…
Reference in a new issue