tabulous: Handle external raise of hidden windows

Tabulous now gracefully handle hidden windows being raised from the task bar.

Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
Maxime COSTE 2008-08-30 12:44:15 +08:00 committed by Julien Danjou
parent c3f0335cd2
commit 3fecec15c3
1 changed files with 16 additions and 5 deletions

View File

@ -47,13 +47,12 @@ end
function display(tabindex, cl) function display(tabindex, cl)
local p = tabbed[tabindex][1] local p = tabbed[tabindex][1]
if cl and p ~= cl then if cl and p ~= cl then
tabbed[tabindex][1] = cl
cl.hide = false cl.hide = false
cl:swap(p) cl:swap(p)
p.hide = true p.hide = true
capi.client.focus = cl capi.client.focus = cl
tabbed[tabindex][1] = cl
awful.hooks.user.call('tabhide', p) awful.hooks.user.call('tabhide', p)
awful.hooks.user.call('tabdisplay', cl) awful.hooks.user.call('tabdisplay', cl)
end end
@ -65,7 +64,7 @@ end
-- @return The key. -- @return The key.
function tabindex_check(tabindex, cl) function tabindex_check(tabindex, cl)
local c = cl or capi.client.focus local c = cl or capi.client.focus
return findkey(tabbed[tabindex], c) return findkey(tabbed[tabindex][2], c)
end end
--- Find the tab index or return nil if not tabbed. --- Find the tab index or return nil if not tabbed.
@ -252,7 +251,7 @@ function autotab_start()
end) end)
end end
--- update the tabbing when current tags changes, by unactivating --- Update the tabbing when current tags changes, by unactivating
-- all tabs that are not in the current tag (and activating the good one) -- all tabs that are not in the current tag (and activating the good one)
function update_tabbing() function update_tabbing()
-- do nothing if nothing changed -- do nothing if nothing changed
@ -289,6 +288,18 @@ function update_tabbing()
end end
end end
--- Keep tabulous in sync when a client is focused but was hidden in a tab
-- (show the client and hide the previous one)
function hook_focus(cl)
local c = cl or awful.client.focus
local i = tabindex_get(c)
if i and tabbed[i][1] ~= c then
display(i, c)
end
end
-- Keep tabulous in sync when focus change
awful.hooks.focus.register(hook_focus)
-- update the tabbing when the tags changes -- update the tabbing when the tags changes
awful.hooks.arrange.register(update_tabbing) awful.hooks.arrange.register(update_tabbing)