80 lines
2.4 KiB
Lua
80 lines
2.4 KiB
Lua
local awful = require("awful")
|
|
local beautiful = require("beautiful")
|
|
local gears = require("gears")
|
|
local mouse_utils = require("utils.mouse")
|
|
|
|
-- Focus clients under mouse
|
|
client.connect_signal("mouse::enter", function(c)
|
|
c:emit_signal("request::activate", "mouse_enter", {raise = false})
|
|
end)
|
|
|
|
|
|
client.connect_signal("manage", function (c)
|
|
-- Set the window as a slave (put it at the end of others instead of setting it as 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
|
|
|
|
-- Unminimize and unmaximize the other clients
|
|
for _, o in ipairs(client.get()) do
|
|
o.minimized = false
|
|
o.maximized = false
|
|
o.fullscreen = false
|
|
end
|
|
|
|
gears.timer.delayed_call(function()
|
|
local geometry = c:geometry()
|
|
local x = geometry.x + geometry.width/2
|
|
local y = geometry.y + geometry.height/2
|
|
mouse.coords({x = x, y = y}, true)
|
|
end)
|
|
end)
|
|
|
|
-- Reload config when screen geometry changes
|
|
screen.connect_signal("property::geometry", awesome.restart)
|
|
|
|
|
|
-- ===================================================================
|
|
-- Garbage collection (allows for lower memory consumption)
|
|
-- ===================================================================
|
|
|
|
collectgarbage("setpause", 110)
|
|
collectgarbage("setstepmul", 1000)
|
|
|
|
client.connect_signal("property::maximized", function(focused)
|
|
local hide = focused.maximized or focused.fullscreen
|
|
for _, c in ipairs(client.get()) do
|
|
if not c.floating and c.screen == focused.screen and c.first_tag == focused.first_tag then
|
|
c.minimized = hide
|
|
end
|
|
end
|
|
|
|
focused.minimized = false
|
|
end)
|
|
|
|
client.connect_signal("unmanage", function(unmanaged)
|
|
if unmanaged.maximized then
|
|
for _, c in ipairs(client.get()) do
|
|
if not c.floating and c.screen == unmanaged.screen then
|
|
c.minimized = false
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
client.connect_signal("focus", function(c)
|
|
if #c.screen.clients > 1 then
|
|
c.border_color = beautiful.border_focus
|
|
end
|
|
gears.timer.delayed_call(mouse_utils.move_mouse_onto_focused_client)
|
|
end)
|
|
|
|
client.connect_signal("unfocus", function(c)
|
|
c.border_color = beautiful.border_normal
|
|
end)
|