dotfiles/.config/awesome/ui/popups/layout/init.lua

119 lines
3.4 KiB
Lua
Raw Normal View History

local awful = require "awful"
local gears = require "gears"
local beautiful = require "beautiful"
local wibox = require "wibox"
local hotkeys_popup = require "awful.hotkeys_popup"
local ll = awful.widget.layoutlist {
base_layout = wibox.widget {
spacing = 5,
forced_num_cols = 4,
layout = wibox.layout.grid.vertical,
},
widget_template = {
{
{
id = 'icon_role',
forced_height = 1,
forced_width = 1,
widget = wibox.widget.imagebox,
},
margins = 15,
widget = wibox.container.margin,
},
id = 'background_role',
forced_width = 70,
forced_height = 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 = beautiful.border_normal,
bg = beautiful.bg_normal,
border_width = beautiful.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, start_at)
local k = gears.table.hasitem(t, value, true, start_at)
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,
--autostart = true,
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 -- Disable if not Wanted --
layout_popup:connect_signal("mouse::enter", function() layout_popup.timer:stop() end)
layout_popup:connect_signal("mouse::leave", function() layout_popup.timer:start() end)
-- Make sure you remove the default Mod4+Space and Mod4+Shift+Space
-- keybindings before adding this.
awful.keygrabber {
start_callback = function() layout_popup.visible = true end,
stop_callback = function() layout_popup.visible = false end,
export_keybindings = true,
release_event = 'release',
stop_key = {'Escape', 'Super_L', 'Super_R'},
keybindings = {
{{ modkey } , ' ' , function()
--layout_popup.timer:again()
awful.layout.set(
gears.table.iterate_value(ll.layouts, ll.current_layout, 1),
--layout_popup.timer:start()
layout_popup.changed()
)
end},
{{ modkey, 'Shift' } , ' ' , function()
--layout_popup.timer:again()
awful.layout.set(
gears.table.iterate_value(ll.layouts, ll.current_layout, -1),
--layout_popup.timer:start()
layout_popup.changed()
)
end},
}
}