From ad9f9852b3bea5f1e769e60695376c5126129c83 Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Mon, 23 Jul 2012 22:05:33 +0200 Subject: [PATCH] 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. --- rc/bindings.lua | 18 ------------------ rc/signals.lua | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/rc/bindings.lua b/rc/bindings.lua index d497713..e554108 100644 --- a/rc/bindings.lua +++ b/rc/bindings.lua @@ -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"), diff --git a/rc/signals.lua b/rc/signals.lua index acb69d3..414a08b 100644 --- a/rc/signals.lua +++ b/rc/signals.lua @@ -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