signals: mouse follows focus except when focus followed mouse

We generalize "mouse follows focus" by keeping the mouse in the top
left corner of any focused window except when the window has been
focused because of sloppy focus.
This commit is contained in:
Vincent Bernat 2012-07-23 22:05:33 +02:00
parent d81bd1bb38
commit ad9f9852b3
2 changed files with 16 additions and 18 deletions

View file

@ -87,19 +87,6 @@ local toggle_pidgin = toggle_window(
-- Toggle urgent window
local toggle_urgent = toggle_window(awful.client.urgent.get)
-- Move mouse to the top left corner of the currently focused client
local function move_mouse()
local c = client.focus
local margin = 10
if c and c.screen == mouse.screen then
local cc = c:geometry()
local _, x, y = awful.mouse.client.corner(nil, "top_left")
if x and y and cc.width > margin * 2 and cc.height > margin * 2 then
mouse.coords({ x = x + margin , y = y + margin }, true)
end
end
end
config.keys.global = awful.util.table.join(
keydoc.group("Focus"),
awful.key({ modkey, }, "j",
@ -107,7 +94,6 @@ config.keys.global = awful.util.table.join(
awful.client.focus.byidx( 1)
if client.focus then
client.focus:raise()
move_mouse()
end
end,
"Focus next window"),
@ -116,7 +102,6 @@ config.keys.global = awful.util.table.join(
awful.client.focus.byidx(-1)
if client.focus then
client.focus:raise()
move_mouse()
end
end,
"Focus previous window"),
@ -125,7 +110,6 @@ config.keys.global = awful.util.table.join(
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
move_mouse()
end
end,
"Focus previously focused window"),
@ -133,12 +117,10 @@ config.keys.global = awful.util.table.join(
"Toggle Pidgin conversation window"),
awful.key({ modkey, "Control" }, "j", function ()
awful.screen.focus_relative( 1)
move_mouse()
end,
"Jump to next screen"),
awful.key({ modkey, "Control" }, "k", function ()
awful.screen.focus_relative(-1)
move_mouse()
end),
keydoc.group("Layout manipulation"),

View file

@ -1,5 +1,8 @@
local icons = loadrc("icons", "vbe/icons")
-- Did we get the focus because of sloppy focus?
local focus_from_mouse = false
-- Signal function to execute when a new client appears.
client.add_signal("manage",
function (c, startup)
@ -8,6 +11,7 @@ client.add_signal("manage",
function(c)
if ((awful.layout.get(c.screen) ~= awful.layout.suit.magnifier or awful.client.getmaster(c.screen) == c)
and awful.client.focus.filter(c)) then
focus_from_mouse = true
client.focus = c
end
end)
@ -33,6 +37,18 @@ client.add_signal("manage",
client.add_signal("focus", function(c)
c.border_color = beautiful.border_focus
c.opacity = 1
-- Move the mouse to the top left corner
local margin = 10
if c.screen == mouse.screen and not focus_from_mouse then
local cc = c:geometry()
local _, x, y = awful.mouse.client.corner(nil, "top_left")
if x and y and cc.width > margin * 2 and cc.height > margin * 2 then
mouse.coords({ x = x + margin , y = y + margin }, true)
end
end
focus_from_mouse = false
end)
client.add_signal("unfocus", function(c)
c.border_color = beautiful.border_normal