Browse Source

fixes shift/unshift bug

develop
Harald Albrecht 5 years ago
parent
commit
0810e11a40
  1. 8
      sdcard/layouts/kdenlive.lua
  2. 69
      sdcard/snippets/routehandlers.lua
  3. 26
      spec/layouts/kdenlive_spec.lua

8
sdcard/layouts/kdenlive.lua

@ -30,8 +30,12 @@ local mb = require "snippets/multibow"
-- Unshift to primary keymap. For simplification, use it with the "anykey"
-- release handlers, see below.
function k.unshift()
mb.activate_keymap(k.keymap.name)
function k.unshift(keyno)
if keyno == 11 then
print(debug.traceback())
else
mb.activate_keymap(k.keymap.name)
end
end
-- Key colors for unshifted and shifted keys; keep them rather muted in order

69
sdcard/snippets/routehandlers.lua

@ -20,17 +20,31 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
]] --
-- This all-key, central key router forwards Keybow key events to
-- their correct handlers, depending on which keyboard layout currently
-- is active.
-- This all-key, central key router forwards Keybow key events to their
-- correct handlers, depending on which keyboard layout currently is active.
--
-- A keymap grab will always only route keys to the "grabbing" keymap, and to
-- no other keymap. Without a keymap grab in place, permanent keymaps will be
-- searched first for a matching key definition, with the first hit to score.
-- The current keymap will be considered only last, after all permanent
-- keymaps have been exhausted.
--
-- Additionally, "any" keyhandlers will be considered only for (1) the
-- grabbing keymap (if a grab is active) and for (2) the current keymap.
-- Permanent keymaps cannot have "any" key handlers (or rather, they will be
-- ignored.)
function mb.route(keyno, pressed)
local keydef, grabbed_any_keydef, anykdeydef
-- Checks for a keymap grab being enforced at this time...
local keydef, any_kdeydef
-- Checks for a keymap grab being enforced at this time; if the grabbing
-- keymap does not define the key, then it's game over. Additionally,
-- grabbing keymaps may define "any" handlers.
if mb.grab_keymap then
keydef = mb.grab_keymap[keyno]
grabbed_any_keydef = mb.grab_keymap[-1]
any_kdeydef = mb.grab_keymap[-1]
else
-- Checks for key in permanent keymaps first...
-- No grab in place, so continue checking for a matching key in the
-- permanent keymaps first. Remember, there cannot be "any" handlers
-- with permanent keymaps.
for name, keymap in pairs(mb.keymaps) do
if keymap.permanent then
keydef = keymap[keyno]
@ -39,17 +53,18 @@ function mb.route(keyno, pressed)
end
end
end
-- Checks for key in current keymap if no persistent key was found yet.
if not keydef then
if mb.current_keymap then
keydef = mb.current_keymap[keyno]
anykeydef = mb.current_keymap[-1]
end
-- If no permanent key matched then finally check for our key in the
-- current keymap. Additionally, the current keymap is allowed to
-- define an "any" handler.
if not keydef and mb.current_keymap then
keydef = mb.current_keymap[keyno]
any_kdeydef = mb.current_keymap[-1]
end
end
-- Bails out if no key definition to route to could be found.
if not (keydef or anykeydef or grabbed_any_keydef) then
-- Bails out now if either a specific nor an "any" key definition to route
-- to could be found.
if not (keydef or any_kdeydef) then
return
end
@ -61,25 +76,13 @@ function mb.route(keyno, pressed)
mb.led(led, {r = 0, g = 0, b = 0})
end
end
if grabbed_any_keydef and grabbed_any_keydef.press then
grabbed_any_keydef.press(keyno)
end
if keydef and keydef.press then
keydef.press(keyno)
end
if anykeydef and anykeydef.press then
anykeydef.press(keyno)
end
if keydef and keydef.press then keydef.press(keyno) end
if any_kdeydef and any_kdeydef.press then any_kdeydef.press(keyno) end
else
if grabbed_any_keydef and grabbed_any_keydef.release then
grabbed_any_keydef.release(keyno)
end
if keydef and keydef.release then
keydef.release(keyno)
end
if anykeydef and anykeydef.release then
anykeydef.release(keyno)
end
if keydef and keydef.release then keydef.release(keyno) end
if any_kdeydef and any_kdeydef.release then any_kdeydef.release(keyno) end
mb.activate_leds()
end
end

26
spec/layouts/kdenlive_spec.lua

@ -46,14 +46,24 @@ describe("Kdenlive keymap", function()
_G.setup()
end)
inslit("", function()
assert.is.equal(k.keymap.name, mb.current_keymap.name)
hwk.tap(shift.KEY_SHIFT)
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
hwk.tap(0) -- FIXME
assert.is.equal(k.keymap.name, mb.current_keymap.name)
hwk.tap(shift.KEY_SHIFT)
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
inslit("automatically un-shifts after key press", function()
local some_key = shift.KEY_SHIFT ~= 0 and 0 or 1
for round = 1, 2 do
for round = 1, 2 do
assert.is.equal(k.keymap.name, mb.current_keymap.name)
hwk.tap(shift.KEY_SHIFT)
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
hwk.tap(some_key)
assert.is.equal(k.keymap.name, mb.current_keymap.name)
end
for round = 1, 2 do
hwk.tap(shift.KEY_SHIFT)
assert.is.equal(k.keymap_shifted.name, mb.current_keymap.name)
hwk.tap(shift.KEY_SHIFT)
assert.is.equal(k.keymap.name, mb.current_keymap.name)
end
end
end)
end)

Loading…
Cancel
Save