no global_keybinds param, stop running keygrabbers gracefully

This commit is contained in:
BZ 2023-11-20 01:52:19 +01:00
parent b56319dc93
commit fc2b46896f
1 changed files with 35 additions and 17 deletions

View File

@ -1,6 +1,7 @@
local awful = require("awful") local awful = require("awful")
local glib = require("lgi").GLib local glib = require("lgi").GLib
local gears = require("gears") local gears = require("gears")
local akeygrabber = require("awful.keygrabber")
local unpack = unpack or table.unpack -- luacheck: globals unpack local unpack = unpack or table.unpack -- luacheck: globals unpack
local awesome, keygrabber, client, root = awesome, keygrabber, client, root local awesome, keygrabber, client, root = awesome, keygrabber, client, root
@ -28,8 +29,16 @@ local function generate_conversion_map()
return nil return nil
end end
local function stop_keygrabber()
local instance = akeygrabber.current_instance
if instance then
instance:stop()
end
akeygrabber.stop()
end
local function run_key_sequence(seq) local function run_key_sequence(seq)
keygrabber:stop()
for _, s in ipairs(seq) do for _, s in ipairs(seq) do
if s.action == "press" then if s.action == "press" then
root.fake_input("key_press", s.key) root.fake_input("key_press", s.key)
@ -40,8 +49,6 @@ local function run_key_sequence(seq)
end end
local function run_key_sequence_xdotool(seq) local function run_key_sequence_xdotool(seq)
keygrabber:stop()
local run_fn = function(s) local run_fn = function(s)
if s.action == "press" then if s.action == "press" then
awful.spawn("xdotool keydown " .. s.key) awful.spawn("xdotool keydown " .. s.key)
@ -122,6 +129,8 @@ local function new(args)
local mods = mod_keysym and { mod_keysym } or generate_conversion_map() local mods = mod_keysym and { mod_keysym } or generate_conversion_map()
local no_global_keybinds = cfg.no_global_keybinds
local wm_keys = { local wm_keys = {
mods = mods, mods = mods,
up = up, up = up,
@ -197,7 +206,14 @@ local function new(args)
} }
end end
local run_fn = use_xdotool and run_key_sequence_xdotool or run_key_sequence local run_fn = function(seq)
stop_keygrabber()
if use_xdotool then
run_key_sequence_xdotool(seq)
else
run_key_sequence(seq)
end
end
-- use dynamic titles to determine type of client (default) -- use dynamic titles to determine type of client (default)
local navigate = function(dir) local navigate = function(dir)
@ -261,6 +277,7 @@ local function new(args)
M.navigate = navigate M.navigate = navigate
-- setup keybinds -- setup keybinds
if not no_global_keybinds then
glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function() glib.idle_add(glib.PRIORITY_DEFAULT_IDLE, function()
local aw = {} local aw = {}
for k, v in pairs(cfg) do for k, v in pairs(cfg) do
@ -277,6 +294,7 @@ local function new(args)
end end
root.keys(awful.util.table.join(root.keys(), unpack(aw))) root.keys(awful.util.table.join(root.keys(), unpack(aw)))
end) end)
end
return M return M
end end