vincentbernat.i3wm-configur.../rc/signals.lua

92 lines
3 KiB
Lua
Raw Normal View History

local icons = loadrc("icons", "vbe/icons")
-- Did we get the focus because of sloppy focus?
local focus_from_mouse = false
local function mouse_follow_focus(c)
-- Move the mouse to the top left corner
if c.type ~= "dialog" then
local cc = c:geometry()
local _, x, y = awful.mouse.client.corner(nil, "top_left")
if x and y then
mouse.coords({ x = x + 20 , y = y + cc.height / 2 }, true)
end
end
end
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)
-- 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
focus_from_mouse = c
2012-07-06 14:19:54 +02:00
client.focus = c
end
end)
-- If a window change its geometry, track it with the mouse
c:add_signal("property::geometry",
function()
-- 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)
end)
-- If this is Spotify and it sets the urgent property, unset it
if c.instance == "spotify" then
c.urgent = false
c:add_signal("property::urgent",
function()
c.urgent = false
end)
end
-- 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
if focus_from_mouse ~= c then
mouse_follow_focus(c)
c:raise()
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
if (not c.fullscreen and
not (c.class == "Chromium" and c.name:sub(1, #"Meet ") == "Meet ")) then
c.opacity = 0.85
end
2012-07-06 14:19:54 +02:00
end)