2012-07-15 22:22:38 +02:00
|
|
|
local icons = loadrc("icons", "vbe/icons")
|
|
|
|
|
2012-07-23 22:05:33 +02:00
|
|
|
-- Did we get the focus because of sloppy focus?
|
|
|
|
local focus_from_mouse = false
|
2012-07-31 20:30:42 +02:00
|
|
|
local function mouse_follow_focus(c)
|
|
|
|
-- Move the mouse to the top left corner
|
|
|
|
local margin = 10
|
|
|
|
if c.type ~= "dialog" 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
|
2012-07-23 22:05:33 +02:00
|
|
|
|
2012-07-06 14:19:54 +02:00
|
|
|
-- Signal function to execute when a new client appears.
|
|
|
|
client.add_signal("manage",
|
|
|
|
function (c, startup)
|
|
|
|
-- Enable sloppy focus
|
|
|
|
c:add_signal("mouse::enter",
|
|
|
|
function(c)
|
2012-07-31 20:43:21 +02:00
|
|
|
-- If magnifier suit, only give sloppy focus to master window
|
|
|
|
if ((awful.layout.get(c.screen) ~= awful.layout.suit.magnifier or
|
|
|
|
awful.client.getmaster(c.screen) == c)
|
|
|
|
-- Don't give focus to a client already having focus
|
|
|
|
and client.focus ~= c
|
|
|
|
-- Don't give focus to a window that does not want focus
|
2012-07-06 14:19:54 +02:00
|
|
|
and awful.client.focus.filter(c)) then
|
2012-07-31 20:43:21 +02:00
|
|
|
focus_from_mouse = c
|
2012-07-06 14:19:54 +02:00
|
|
|
client.focus = c
|
|
|
|
end
|
|
|
|
end)
|
2012-07-15 22:22:38 +02:00
|
|
|
|
2012-07-31 20:43:21 +02:00
|
|
|
-- If a window change its geometry, track it with the mouse
|
2012-07-31 20:30:42 +02:00
|
|
|
c:add_signal("property::geometry",
|
|
|
|
function()
|
2012-08-02 15:46:43 +02:00
|
|
|
-- Check if the current focused client is our
|
|
|
|
if client.focus ~=c then return end
|
|
|
|
-- Check that no button is pressed
|
|
|
|
local buttons = mouse.coords().buttons
|
|
|
|
for _, state in pairs(buttons) do
|
|
|
|
if state then return end
|
|
|
|
end
|
|
|
|
mouse_follow_focus(c)
|
2012-07-31 20:30:42 +02:00
|
|
|
end)
|
|
|
|
|
2012-07-15 22:22:38 +02:00
|
|
|
-- Setup icon if none exists
|
|
|
|
if not c.icon then
|
|
|
|
local icon = icons.lookup({ name = { c.class, c.instance },
|
|
|
|
type = "apps" })
|
|
|
|
if icon then
|
|
|
|
c.icon = image(icon)
|
|
|
|
end
|
|
|
|
end
|
2012-09-26 15:05:47 +02:00
|
|
|
|
2012-07-06 14:19:54 +02:00
|
|
|
if not startup then
|
|
|
|
-- Put windows in a smart way, only if they does not set an initial position.
|
|
|
|
if not c.size_hints.user_position and not c.size_hints.program_position then
|
|
|
|
awful.placement.no_overlap(c)
|
|
|
|
awful.placement.no_offscreen(c)
|
|
|
|
end
|
2012-09-26 15:05:47 +02:00
|
|
|
c:raise()
|
2012-07-06 14:19:54 +02:00
|
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
|
|
client.add_signal("focus", function(c)
|
|
|
|
c.border_color = beautiful.border_focus
|
|
|
|
c.opacity = 1
|
2012-07-23 22:05:33 +02:00
|
|
|
|
2012-07-31 20:43:21 +02:00
|
|
|
if focus_from_mouse ~= c then
|
2012-07-31 20:30:42 +02:00
|
|
|
mouse_follow_focus(c)
|
2012-09-17 20:18:43 +02:00
|
|
|
c:raise()
|
2012-07-23 22:05:33 +02:00
|
|
|
end
|
|
|
|
focus_from_mouse = false
|
2012-07-06 14:19:54 +02:00
|
|
|
end)
|
|
|
|
client.add_signal("unfocus", function(c)
|
|
|
|
c.border_color = beautiful.border_normal
|
2012-07-07 20:24:53 +02:00
|
|
|
c.opacity = 0.85
|
2012-07-06 14:19:54 +02:00
|
|
|
end)
|