awful: filter focus by type
Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
d439c5660e
commit
320ac68fb7
|
@ -359,7 +359,8 @@ end)
|
||||||
-- Hook function to execute when the mouse is over a client.
|
-- Hook function to execute when the mouse is over a client.
|
||||||
awful.hooks.mouse_over.register(function (c)
|
awful.hooks.mouse_over.register(function (c)
|
||||||
-- Sloppy focus, but disabled for magnifier layout
|
-- Sloppy focus, but disabled for magnifier layout
|
||||||
if awful.layout.get(c.screen) ~= "magnifier" then
|
if awful.layout.get(c.screen) ~= "magnifier"
|
||||||
|
and awful.client.focus.filter(c) then
|
||||||
client.focus = c
|
client.focus = c
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -422,7 +423,8 @@ awful.hooks.arrange.register(function (screen)
|
||||||
mylayoutbox[screen].text = "No layout."
|
mylayoutbox[screen].text = "No layout."
|
||||||
end
|
end
|
||||||
|
|
||||||
-- If no window has focus, give focus to the latest in history
|
-- Give focus to the latest client in history if no window has focus
|
||||||
|
-- or if the current window is a desktop or a dock one.
|
||||||
if not client.focus then
|
if not client.focus then
|
||||||
local c = awful.client.focus.history.get(screen, 0)
|
local c = awful.client.focus.history.get(screen, 0)
|
||||||
if c then client.focus = c end
|
if c then client.focus = c end
|
||||||
|
|
|
@ -161,14 +161,30 @@ function client.focus.history.delete(c)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Filter out window that we do not want handled by focus.
|
||||||
|
-- This usually means that desktop, dock and splash windows are
|
||||||
|
-- not registered and cannot get focus.
|
||||||
|
-- @param c A client.
|
||||||
|
-- @return The same client if it's ok, nil otherwise.
|
||||||
|
function client.focus.filter(c)
|
||||||
|
if c.type == "desktop"
|
||||||
|
or c.type == "dock"
|
||||||
|
or c.type == "splash" then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
--- Update client focus history.
|
--- Update client focus history.
|
||||||
-- @param c The client that has been focused.
|
-- @param c The client that has been focused.
|
||||||
function client.focus.history.add(c)
|
function client.focus.history.add(c)
|
||||||
|
if client.focus.filter(c) then
|
||||||
-- Remove the client if its in stack
|
-- Remove the client if its in stack
|
||||||
client.focus.history.delete(c)
|
client.focus.history.delete(c)
|
||||||
-- Record the client has latest focused
|
-- Record the client has latest focused
|
||||||
table.insert(client.focus.history.data, 1, c)
|
table.insert(client.focus.history.data, 1, c)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
--- Get the latest focused client for a screen in history.
|
--- Get the latest focused client for a screen in history.
|
||||||
-- @param screen The screen number to look for.
|
-- @param screen The screen number to look for.
|
||||||
|
@ -223,6 +239,12 @@ function client.next(i, c)
|
||||||
if sel then
|
if sel then
|
||||||
-- Get all visible clients
|
-- Get all visible clients
|
||||||
local cls = capi.client.visible_get(sel.screen)
|
local cls = capi.client.visible_get(sel.screen)
|
||||||
|
-- Remove all no-normal clients
|
||||||
|
for idx, c in ipairs(cls) do
|
||||||
|
if not client.focus.filter(c) then
|
||||||
|
table.remove(cls, idx)
|
||||||
|
end
|
||||||
|
end
|
||||||
-- Loop upon each client
|
-- Loop upon each client
|
||||||
for idx, c in ipairs(cls) do
|
for idx, c in ipairs(cls) do
|
||||||
if c == sel then
|
if c == sel then
|
||||||
|
|
Loading…
Reference in New Issue