2021-11-29 19:57:00 +11:00

116 lines
2.5 KiB
Lua

local awful = require('awful')
local gears = require('gears')
local beautiful = require('beautiful')
local update_client = function(c)
-- Set client's shape based on its tag's layout and status (floating, maximized, etc.)
local current_layout = awful.tag.getproperty(c.first_tag, 'layout')
if current_layout == awful.layout.suit.max and (not c.floating) then
c.shape = beautiful.client_shape_rectangle
elseif c.maximized or c.fullscreen then
c.shape = beautiful.client_shape_rectangle
elseif (not c.round_corners) then
c.shape = beautiful.client_shape_rectangle
else
c.shape = beautiful.client_shape_rounded
end
end
-- Signal function to execute when a new client appears.
client.connect_signal(
'manage',
function(c)
-- Focus, raise and activate
c:emit_signal(
'request::activate',
'mouse_enter',
{
raise = true
}
)
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
if not awesome.startup then
awful.client.setslave(c)
end
if awesome.startup and not c.size_hints.user_position and
not c.size_hints.program_position then
-- Prevent clients from being unreachable after screen count changes.
awful.placement.no_offscreen(c)
end
-- Update client shape
update_client(c)
end
)
-- Enable sloppy focus, so that focus follows mouse then raises it.
client.connect_signal(
'mouse::enter',
function(c)
c:emit_signal(
'request::activate',
'mouse_enter',
{
raise = true
}
)
end
)
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
)
-- Manipulate client shape on fullscreen/non-fullscreen
client.connect_signal(
'property::fullscreen',
function(c)
if c.fullscreen then
c.shape = beautiful.client_shape_rectangle
else
update_client(c)
end
end
)
-- Manipulate client shape on maximized
client.connect_signal(
'property::maximized',
function(c)
local current_layout = awful.tag.getproperty(c.first_tag, 'layout')
if c.maximized then
c.shape = beautiful.client_shape_rectangle
else
update_client(c)
end
end
)
-- Manipulate client shape on floating
client.connect_signal(
'property::floating',
function(c)
local current_layout = awful.tag.getproperty(c.first_tag, 'layout')
if c.floating and not c.maximized then
c.shape = beautiful.client_shape_rounded
else
if current_layout == awful.layout.suit.max then
c.shape = beautiful.client_shape_rectangle
end
end
end
)