Initial Commit
This commit is contained in:
201
module/exit-screen.lua
Normal file
201
module/exit-screen.lua
Normal file
@@ -0,0 +1,201 @@
|
||||
local awful = require('awful')
|
||||
local gears = require('gears')
|
||||
local wibox = require('wibox')
|
||||
local beautiful = require('beautiful')
|
||||
local icons = require('theme.icons')
|
||||
local clickable_container = require('widget.material.clickable-container')
|
||||
local apps = require('configuration.apps')
|
||||
local dpi = require('beautiful').xresources.apply_dpi
|
||||
|
||||
-- Appearance
|
||||
local icon_size = beautiful.exit_screen_icon_size or dpi(140)
|
||||
|
||||
local buildButton = function(icon)
|
||||
local abutton =
|
||||
wibox.widget {
|
||||
wibox.widget {
|
||||
wibox.widget {
|
||||
wibox.widget {
|
||||
image = icon,
|
||||
widget = wibox.widget.imagebox
|
||||
},
|
||||
top = dpi(16),
|
||||
bottom = dpi(16),
|
||||
left = dpi(16),
|
||||
right = dpi(16),
|
||||
widget = wibox.container.margin
|
||||
},
|
||||
shape = gears.shape.circle,
|
||||
forced_width = icon_size,
|
||||
forced_height = icon_size,
|
||||
widget = clickable_container
|
||||
},
|
||||
left = dpi(24),
|
||||
right = dpi(24),
|
||||
widget = wibox.container.margin
|
||||
}
|
||||
|
||||
return abutton
|
||||
end
|
||||
|
||||
function suspend_command()
|
||||
exit_screen_hide()
|
||||
awful.spawn.with_shell(apps.default.lock .. ' & systemctl suspend')
|
||||
end
|
||||
function exit_command()
|
||||
_G.awesome.quit()
|
||||
end
|
||||
function lock_command()
|
||||
exit_screen_hide()
|
||||
awful.spawn.with_shell('sleep 1 && ' .. apps.default.lock)
|
||||
end
|
||||
function poweroff_command()
|
||||
awful.spawn.with_shell('poweroff')
|
||||
awful.keygrabber.stop(_G.exit_screen_grabber)
|
||||
end
|
||||
function reboot_command()
|
||||
awful.spawn.with_shell('reboot')
|
||||
awful.keygrabber.stop(_G.exit_screen_grabber)
|
||||
end
|
||||
|
||||
local poweroff = buildButton(icons.power, 'Shutdown')
|
||||
poweroff:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
poweroff_command()
|
||||
end
|
||||
)
|
||||
|
||||
local reboot = buildButton(icons.restart, 'Restart')
|
||||
reboot:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
reboot_command()
|
||||
end
|
||||
)
|
||||
|
||||
local suspend = buildButton(icons.sleep, 'Sleep')
|
||||
suspend:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
suspend_command()
|
||||
end
|
||||
)
|
||||
|
||||
local exit = buildButton(icons.logout, 'Logout')
|
||||
exit:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
exit_command()
|
||||
end
|
||||
)
|
||||
|
||||
local lock = buildButton(icons.lock, 'Lock')
|
||||
lock:connect_signal(
|
||||
'button::release',
|
||||
function()
|
||||
lock_command()
|
||||
end
|
||||
)
|
||||
|
||||
-- Get screen geometry
|
||||
local screen_geometry = awful.screen.focused().geometry
|
||||
|
||||
-- Create the widget
|
||||
exit_screen =
|
||||
wibox(
|
||||
{
|
||||
x = screen_geometry.x,
|
||||
y = screen_geometry.y,
|
||||
visible = false,
|
||||
ontop = true,
|
||||
type = 'splash',
|
||||
height = screen_geometry.height,
|
||||
width = screen_geometry.width
|
||||
}
|
||||
)
|
||||
|
||||
exit_screen.bg = '#212121CC'
|
||||
--exit_screen.fg = beautiful.exit_screen_fg or beautiful.wibar_fg or '#FEFEFE'
|
||||
|
||||
local exit_screen_grabber
|
||||
|
||||
function exit_screen_hide()
|
||||
awful.keygrabber.stop(exit_screen_grabber)
|
||||
exit_screen.visible = false
|
||||
end
|
||||
|
||||
function exit_screen_show()
|
||||
-- naughty.notify({text = "starting the keygrabber"})
|
||||
exit_screen_grabber =
|
||||
awful.keygrabber.run(
|
||||
function(_, key, event)
|
||||
if event == 'release' then
|
||||
return
|
||||
end
|
||||
|
||||
if key == 's' then
|
||||
suspend_command()
|
||||
elseif key == 'e' then
|
||||
exit_command()
|
||||
elseif key == 'l' then
|
||||
lock_command()
|
||||
elseif key == 'p' then
|
||||
poweroff_command()
|
||||
elseif key == 'r' then
|
||||
reboot_command()
|
||||
elseif key == 'Escape' or key == 'q' or key == 'x' then
|
||||
-- naughty.notify({text = "Cancel"})
|
||||
exit_screen_hide()
|
||||
-- else awful.keygrabber.stop(exit_screen_grabber)
|
||||
end
|
||||
end
|
||||
)
|
||||
exit_screen.visible = true
|
||||
end
|
||||
|
||||
exit_screen:buttons(
|
||||
gears.table.join(
|
||||
-- Middle click - Hide exit_screen
|
||||
awful.button(
|
||||
{},
|
||||
2,
|
||||
function()
|
||||
exit_screen_hide()
|
||||
end
|
||||
),
|
||||
-- Right click - Hide exit_screen
|
||||
awful.button(
|
||||
{},
|
||||
3,
|
||||
function()
|
||||
exit_screen_hide()
|
||||
end
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Item placement
|
||||
exit_screen:setup {
|
||||
nil,
|
||||
{
|
||||
nil,
|
||||
{
|
||||
-- {
|
||||
poweroff,
|
||||
reboot,
|
||||
suspend,
|
||||
exit,
|
||||
lock,
|
||||
layout = wibox.layout.fixed.horizontal
|
||||
-- },
|
||||
-- widget = exit_screen_box
|
||||
},
|
||||
nil,
|
||||
expand = 'none',
|
||||
layout = wibox.layout.align.horizontal
|
||||
},
|
||||
nil,
|
||||
expand = 'none',
|
||||
layout = wibox.layout.align.vertical
|
||||
}
|
||||
Reference in New Issue
Block a user