conf2/awesome/.config/awesome/titlebar-config.lua
2019-10-20 17:51:59 +02:00

152 lines
4.6 KiB
Lua

-----------------------------------------------------------------------------------------------------------------------
-- Titlebar config --
-----------------------------------------------------------------------------------------------------------------------
-- Grab environment
local awful = require("awful")
local wibox = require("wibox")
local beautiful = require("beautiful")
-- local redflat = require("redflat")
local redtitle = require("redflat.titlebar")
local redutil = require("redflat.util")
local clientmenu = require("redflat.float.clientmenu")
-- Initialize tables and vars for module
-----------------------------------------------------------------------------------------------------------------------
local titlebar = {}
-- Support functions
-----------------------------------------------------------------------------------------------------------------------
local function title_buttons(c)
return awful.util.table.join(
awful.button(
{ }, 1,
function()
client.focus = c; c:raise()
awful.mouse.client.move(c)
end
),
awful.button(
{ }, 3,
function()
client.focus = c; c:raise()
clientmenu:show(c)
end
)
)
end
local function on_maximize(c)
-- hide/show title bar
local is_max = c.maximized_vertical or c.maximized
local action = is_max and "cut_all" or "restore_all"
redtitle[action]({ c })
-- dirty size correction
local model = redtitle.get_model(c)
if model and not model.hidden then
c.height = c:geometry().height + (is_max and model.size or -model.size)
if is_max then c.y = c.screen.workarea.y end
end
end
-- Connect titlebar building signal
-----------------------------------------------------------------------------------------------------------------------
function titlebar:init()
local style = {}
-- titlebar schemes
style.base = redutil.table.merge(redutil.table.check(beautiful, "titlebar.base") or {}, { size = 9 })
style.iconic = redutil.table.merge(style.base, { size = 24 })
-- titlebar elements styles
style.mark_mini = redutil.table.merge(
redutil.table.check(beautiful, "titlebar.mark") or {},
{ size = 30, gap = 10, angle = 0 }
)
style.icon = redutil.table.merge(
redutil.table.check(beautiful, "titlebar.icon") or {},
{ gap = 10 }
)
-- titlebar setup for clients
client.connect_signal(
"request::titlebars",
function(c)
-- build titlebar and mouse buttons for it
local buttons = title_buttons(c)
redtitle(c, style.base)
-- build mini titlebar model
local base = wibox.widget({
nil,
{
right = style.mark_mini.gap,
redtitle.mark.focus(c, style.mark_mini),
layout = wibox.container.margin,
},
{
redtitle.mark.property(c, "floating", style.mark_mini),
redtitle.mark.property(c, "sticky", style.mark_mini),
redtitle.mark.property(c, "ontop", style.mark_mini),
spacing = style.mark_mini.gap,
layout = wibox.layout.fixed.horizontal()
},
buttons = buttons,
layout = wibox.layout.align.horizontal,
})
-- build titlebar model with control buttons
local title = redtitle.label(c, style.iconic, true)
title:buttons(buttons)
local iconic = wibox.widget({
{
{
redtitle.button.focus(c, style.icon),
redtitle.button.property(c, "ontop", style.icon),
redtitle.button.property(c, "below", style.icon),
spacing = style.icon.gap,
layout = wibox.layout.fixed.horizontal()
},
top = 1, bottom = 1, left = 4, right = style.icon.gap + 2 * 18,
widget = wibox.container.margin
},
title,
{
{
redtitle.button.property(c, "floating", style.icon),
redtitle.button.property(c, "sticky", style.icon),
redtitle.button.property(c, "minimized", style.icon),
redtitle.button.property(c, "maximized", style.icon),
redtitle.button.close(c, style.icon),
spacing = style.icon.gap,
layout = wibox.layout.fixed.horizontal()
},
top = 1, bottom = 1, right = 4,
widget = wibox.container.margin
},
layout = wibox.layout.align.horizontal,
})
-- Set both models to titlebar
redtitle.add_layout(c, nil, base, style.base.size)
redtitle.add_layout(c, nil, iconic, style.iconic.size)
redtitle.switch(c, nil, redtitle._index)
-- hide titlebar when window maximized
if c.maximized_vertical or c.maximized then on_maximize(c) end
c:connect_signal("property::maximized_vertical", on_maximize)
c:connect_signal("property::maximized", on_maximize)
end
)
end
-- End
-----------------------------------------------------------------------------------------------------------------------
return titlebar