131 lines
2.6 KiB
Lua
131 lines
2.6 KiB
Lua
local awful = require("awful")
|
|
local gears = require("gears")
|
|
local beautiful = require("beautiful")
|
|
local wibox = require("wibox")
|
|
|
|
local keys = require("config").keys
|
|
local theme = beautiful.get()
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
local ll = awful.widget.layoutlist({
|
|
base_layout = wibox.widget({
|
|
spacing = dpi(5),
|
|
forced_num_cols = dpi(4),
|
|
layout = wibox.layout.grid.vertical,
|
|
}),
|
|
|
|
widget_template = {
|
|
{
|
|
{
|
|
id = "icon_role",
|
|
forced_height = dpi(1),
|
|
forced_width = dpi(1),
|
|
widget = wibox.widget.imagebox,
|
|
},
|
|
margins = dpi(15),
|
|
widget = wibox.container.margin,
|
|
},
|
|
id = "background_role",
|
|
forced_width = dpi(70),
|
|
forced_height = dpi(70),
|
|
shape = gears.shape.rounded_rect,
|
|
widget = wibox.container.background,
|
|
},
|
|
})
|
|
|
|
local layout_popup = awful.popup({
|
|
widget = wibox.widget({
|
|
ll,
|
|
margins = 4, --border margins (padding)
|
|
widget = wibox.container.margin,
|
|
}),
|
|
|
|
border_color = theme.border_normal,
|
|
bg = theme.bg_normal,
|
|
border_width = theme.border_width,
|
|
placement = awful.placement.centered,
|
|
ontop = true,
|
|
visible = false,
|
|
shape = gears.shape.rounded_rect,
|
|
})
|
|
|
|
function gears.table.iterate_value(t, value, step_size, filter, _)
|
|
local k = gears.table.hasitem(t, value)
|
|
if not k then
|
|
return
|
|
end
|
|
|
|
step_size = step_size or 1
|
|
local new_key = gears.math.cycle(#t, k + step_size)
|
|
|
|
if filter and not filter(t[new_key]) then
|
|
for i = 1, #t do
|
|
local k2 = gears.math.cycle(#t, new_key + i)
|
|
if filter(t[k2]) then
|
|
return t[k2], k2
|
|
end
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
return t[new_key], new_key
|
|
end
|
|
|
|
-- Timer for Death of PopUp
|
|
layout_popup.timer = gears.timer({
|
|
timeout = 0.8,
|
|
single_shot = true,
|
|
callback = function()
|
|
layout_popup.visible = false
|
|
end,
|
|
})
|
|
|
|
function layout_popup.changed()
|
|
layout_popup.visible = true
|
|
if not layout_popup.visible then
|
|
layout_popup.timer:start()
|
|
else
|
|
layout_popup.timer:again()
|
|
end
|
|
end
|
|
|
|
-- Mouse Support
|
|
layout_popup:connect_signal("mouse::enter", function()
|
|
layout_popup.timer:stop()
|
|
end)
|
|
layout_popup:connect_signal("mouse::leave", function()
|
|
layout_popup.timer:start()
|
|
end)
|
|
|
|
awful.keygrabber({
|
|
start_callback = function()
|
|
layout_popup.visible = true
|
|
end,
|
|
|
|
stop_callback = function()
|
|
layout_popup.visible = false
|
|
end,
|
|
|
|
export_keybindings = true,
|
|
stop_event = "release",
|
|
stop_key = { "Escape", "Super_L", "Super_R" },
|
|
|
|
keybindings = {
|
|
{
|
|
{ keys.mod },
|
|
" ",
|
|
function()
|
|
awful.layout.set(gears.table.iterate_value(ll.layouts, ll.current_layout, 1), layout_popup.changed())
|
|
end,
|
|
},
|
|
|
|
{
|
|
{ keys.mod, "Shift" },
|
|
" ",
|
|
function()
|
|
awful.layout.set(gears.table.iterate_value(ll.layouts, ll.current_layout, -1), layout_popup.changed())
|
|
end,
|
|
},
|
|
},
|
|
})
|