From 69e3830bc122c73bc68bfb7f4120b5bcc2b06f3b Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Tue, 9 Apr 2019 22:19:56 +0200 Subject: [PATCH] [UX] VirtualKeyPopup: respond to hold & pan release (#4887) As suggested by @poire-z in https://github.com/koreader/koreader/pull/4886#discussion_r273569802 This is actually much better than before. It subtly changes the behavior of every key this way, but I don't think that's a bad thing. --- frontend/ui/widget/virtualkeyboard.lua | 27 +++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index 10cd48e3d..afb408633 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -131,6 +131,18 @@ function VirtualKey:init() range = self.dimen, }, }, + HoldReleaseKey = { + GestureRange:new{ + ges = "hold_release", + range = self.dimen, + }, + }, + PanReleaseKey = { + GestureRange:new{ + ges = "pan_release", + range = self.dimen, + }, + }, SwipeKey = { GestureRange:new{ ges = "swipe", @@ -219,6 +231,9 @@ function VirtualKey:onSwipeKey(arg, ges) return true end +VirtualKey.onHoldReleaseKey = VirtualKey.onTapSelect +VirtualKey.onPanReleaseKey = VirtualKey.onTapSelect + function VirtualKey:invert(invert, hold) if invert then self[1].inner_bordersize = self.focused_bordersize @@ -298,11 +313,21 @@ function VirtualKeyPopup:init() key_chars = key_chars, width = parent_key.width, height = parent_key.height, - hold_callback = nil, } + virtual_key.hold_callback = nil if v == key_char_orig then virtual_key[1].background = Blitbuffer.COLOR_LIGHT_GRAY + + -- restore ability to hold/pan release on central key after opening popup + virtual_key._keyOrigHoldPanHandler = function() + virtual_key.onHoldReleaseKey = virtual_key._onHoldReleaseKey + virtual_key.onPanReleaseKey = virtual_key._onPanReleaseKey + end + virtual_key._onHoldReleaseKey = virtual_key.onHoldReleaseKey + virtual_key.onHoldReleaseKey = virtual_key._keyOrigHoldPanHandler + virtual_key._onPanReleaseKey = virtual_key.onPanReleaseKey + virtual_key.onPanReleaseKey = virtual_key._keyOrigHoldPanHandler end table.insert(group, virtual_key)