conf2/awesome/.config/awesome/signals-config.lua
2019-10-19 18:54:31 +02:00

104 lines
3.5 KiB
Lua

-----------------------------------------------------------------------------------------------------------------------
-- Signals config --
-----------------------------------------------------------------------------------------------------------------------
-- Grab environment
local awful = require("awful")
local beautiful = require("beautiful")
local redutil = require("redflat.util")
-- Initialize tables and vars for module
-----------------------------------------------------------------------------------------------------------------------
local signals = {}
-- Support functions
-----------------------------------------------------------------------------------------------------------------------
local function do_sloppy_focus(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and awful.client.focus.filter(c) then
client.focus = c
end
end
local function fixed_maximized_geometry(c, context)
if c.maximized and context ~= "fullscreen" then
c:geometry({
x = c.screen.workarea.x,
y = c.screen.workarea.y,
height = c.screen.workarea.height - 2 * c.border_width,
width = c.screen.workarea.width - 2 * c.border_width
})
end
end
-- Build table
-----------------------------------------------------------------------------------------------------------------------
function signals:init(args)
args = args or {}
local env = args.env
-- actions on every application start
client.connect_signal(
"manage",
function(c)
-- put client at the end of list
if env.set_slave then awful.client.setslave(c) end
-- startup placement
if awesome.startup
and not c.size_hints.user_position
and not c.size_hints.program_position
then
awful.placement.no_offscreen(c)
end
-- put new floating windows to the center of screen
if env.set_center and c.floating and not (c.maximized or c.fullscreen) then
redutil.placement.centered(c, nil, mouse.screen.workarea)
end
end
)
-- add missing borders to windows that get unmaximized
client.connect_signal(
"property::maximized",
function(c)
if not c.maximized then
c.border_width = beautiful.border_width
end
end
)
-- don't allow maximized windows move/resize themselves
client.connect_signal(
"request::geometry", fixed_maximized_geometry
)
-- enable sloppy focus, so that focus follows mouse
if env.sloppy_focus then
client.connect_signal("mouse::enter", do_sloppy_focus)
end
-- hilight border of focused window
-- can be disabled since focus indicated by titlebars in current config
if env.color_border_focus then
client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
end
-- wallpaper update on screen geometry change
screen.connect_signal("property::geometry", env.wallpaper)
-- Awesome v4.0 introduce screen handling without restart.
-- All redflat panel widgets was designed in old fashioned way and doesn't support this fature properly.
-- Since I'm using single monitor setup I have no will to rework panel widgets by now,
-- so restart signal added here is simple and dirty workaround.
-- You can disable it on your own risk.
screen.connect_signal("list", awesome.restart)
end
-- End
-----------------------------------------------------------------------------------------------------------------------
return signals