116 lines
2.5 KiB
Lua
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
|
|
)
|