From 2968f558eb6928735d870d3bb58f23652cb03560 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Wed, 8 May 2019 10:13:44 +0200 Subject: [PATCH] [fix, UX] Ignore first hold release when keyboard opened with hold (#5011) Fixes #4902. --- frontend/ui/widget/button.lua | 4 ++-- .../ui/widget/container/inputcontainer.lua | 4 ++-- frontend/ui/widget/inputdialog.lua | 4 ++-- frontend/ui/widget/inputtext.lua | 3 ++- frontend/ui/widget/virtualkeyboard.lua | 19 +++++++++++++++++-- 5 files changed, 25 insertions(+), 9 deletions(-) diff --git a/frontend/ui/widget/button.lua b/frontend/ui/widget/button.lua index 8b41f5d9e..9c1d67377 100644 --- a/frontend/ui/widget/button.lua +++ b/frontend/ui/widget/button.lua @@ -240,9 +240,9 @@ function Button:onHoldSelectButton() if self.enabled and self.hold_callback then self.hold_callback() elseif self.hold_input then - self:onInput(self.hold_input) + self:onInput(self.hold_input, true) elseif type(self.hold_input_func) == "function" then - self:onInput(self.hold_input_func()) + self:onInput(self.hold_input_func(), true) end return true end diff --git a/frontend/ui/widget/container/inputcontainer.lua b/frontend/ui/widget/container/inputcontainer.lua index 2ad428c7d..01aebae02 100644 --- a/frontend/ui/widget/container/inputcontainer.lua +++ b/frontend/ui/widget/container/inputcontainer.lua @@ -264,7 +264,7 @@ function InputContainer:onGesture(ev) end end -function InputContainer:onInput(input) +function InputContainer:onInput(input, ignore_first_hold_release) local InputDialog = require("ui/widget/inputdialog") self.input_dialog = InputDialog:new{ title = input.title or "", @@ -291,7 +291,7 @@ function InputContainer:onInput(input) }, } UIManager:show(self.input_dialog) - self.input_dialog:onShowKeyboard() + self.input_dialog:onShowKeyboard(ignore_first_hold_release) end function InputContainer:closeInputDialog() diff --git a/frontend/ui/widget/inputdialog.lua b/frontend/ui/widget/inputdialog.lua index 0998ea768..daf565066 100644 --- a/frontend/ui/widget/inputdialog.lua +++ b/frontend/ui/widget/inputdialog.lua @@ -466,9 +466,9 @@ function InputDialog:onCloseWidget() end) end -function InputDialog:onShowKeyboard() +function InputDialog:onShowKeyboard(ignore_first_hold_release) if not self.readonly and not self.keyboard_hidden then - self._input_widget:onShowKeyboard() + self._input_widget:onShowKeyboard(ignore_first_hold_release) end end diff --git a/frontend/ui/widget/inputtext.lua b/frontend/ui/widget/inputtext.lua index 9b59ada99..624b6fcfb 100644 --- a/frontend/ui/widget/inputtext.lua +++ b/frontend/ui/widget/inputtext.lua @@ -396,7 +396,8 @@ function InputText:focus() self._frame_textwidget.color = Blitbuffer.COLOR_BLACK end -function InputText:onShowKeyboard() +function InputText:onShowKeyboard(ignore_first_hold_release) + self.keyboard.ignore_first_hold_release = ignore_first_hold_release UIManager:show(self.keyboard) return true end diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index e2c40b32a..5f4b18895 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -185,6 +185,8 @@ function VirtualKey:onUnfocus() end function VirtualKey:onTapSelect(skip_flash) + -- just in case it's not flipped to false on hold release where it's supposed to + self.keyboard.ignore_first_hold_release = false if self.flash_keyboard and not skip_flash and not self.skiptap then self[1].inner_bordersize = self.focused_bordersize self:update_keyboard(false, true) @@ -235,8 +237,21 @@ function VirtualKey:onSwipeKey(arg, ges) return true end -VirtualKey.onHoldReleaseKey = VirtualKey.onTapSelect -VirtualKey.onPanReleaseKey = VirtualKey.onTapSelect +function VirtualKey:onHoldReleaseKey() + if self.keyboard.ignore_first_hold_release then + self.keyboard.ignore_first_hold_release = false + return true + end + self:onTapSelect() +end + +function VirtualKey:onPanReleaseKey() + if self.keyboard.ignore_first_hold_release then + self.keyboard.ignore_first_hold_release = false + return true + end + self:onTapSelect() +end function VirtualKey:invert(invert, hold) if invert then