2023-01-19 13:42:20 +00:00
-- This file is part of Reno desktop.
--
-- Reno desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
--
-- Reno desktop is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with Reno desktop. If not, see <https://www.gnu.org/licenses/>.
-- Simple global context menu controls
local beautiful = require ( " beautiful " )
local menugen = require ( " context_menu " )
2023-05-27 14:57:46 +00:00
local xdglib = require ( " xdg_data " )
local menu_gen = require ( " menubar.menu_gen " )
local gears = require ( " gears " )
local json = require ( " dkjson " )
local function regenerate_xdg ( )
local desktop_dirs = { os.getenv ( " HOME " ) .. " /Desktop " }
local desktop_dirs_complete = 0
local _ = ( ( table.concat ( gears.filesystem . get_xdg_data_dirs ( ) , " : " ) or
" /usr/share:/usr/local/share " ) .. " : " .. os.getenv ( " HOME " ) .. " /.local/share " )
: gsub ( " [^:]* " , function ( path )
if gears.filesystem . dir_readable ( path .. " /applications " ) then
table.insert ( desktop_dirs , path .. " /applications " )
end
end )
local function count ( t )
local c = 0
for _ , _ in pairs ( t ) do
c = c + 1
end
return c
end
require ( " naughty " ) . notify ( { title = " Regenerating XDG cache... " } )
-- Generate a patch containing metadata
local meta = xdglib.generate_meta_patch ( _G.xdg )
-- Initialize structure
_G.xdg = xdglib.init_xdg_struct ( )
-- Add missing category entries
xdglib.add_categories ( xdg , menu_gen.all_categories )
-- Asynchronous process scanning
xdglib.async_process_dirs ( xdg , desktop_dirs , nil , function ( )
desktop_dirs_complete = desktop_dirs_complete + 1
if desktop_dirs_complete == # desktop_dirs then
for k , v in pairs ( xdg.categories ) do
if count ( v.apps ) == 0 then
xdg.categories [ k ] = nil
end
end
xdglib.apply_meta_patch ( xdg , meta )
require ( " naughty " ) . notify ( {
text = " Done! Restart WM to reload menus. "
} )
io.open ( gears.filesystem . get_xdg_cache_home ( ) ..
" .reno_xdg_cache.json " , " w "
) : write ( json.encode ( xdg ) ) : close ( )
end
end )
end
2023-01-19 13:42:20 +00:00
return function ( args )
local widget = menugen ( {
items = {
{ " Awesome " , {
2023-05-27 14:57:46 +00:00
{ " reload cache " , regenerate_xdg } ,
2023-01-19 13:42:20 +00:00
{ " open config dir " , " xdg-open " .. root_path } ,
{ " open docs " , " xdg-open https://awesomewm.org/doc/api/ " } ,
{ " restart " , function ( ) awesome.restart ( ) end } ,
{ " quit " , function ( ) awesome.quit ( ) end }
} , beautiful.awesome_icon } ,
{ " open terminal " , global.terminal } ,
} ,
2023-03-04 11:25:35 +00:00
parent = args.menu_parent
2023-01-19 13:42:20 +00:00
} )
return widget
end