From da8e23c0112b87cc75951525905d6094bef0de5c Mon Sep 17 00:00:00 2001 From: hius07 <62179190+hius07@users.noreply.github.com> Date: Sun, 12 Nov 2023 07:44:56 +0200 Subject: [PATCH] InputDialog: tap outside to close dialog if keyboard is hidden (#11094) --- .../apps/reader/modules/readerhandmade.lua | 1 + frontend/ui/widget/buttondialog.lua | 10 ++++++---- frontend/ui/widget/inputdialog.lua | 18 ++++++++++++++---- frontend/ui/widget/menu.lua | 1 + frontend/ui/widget/textviewer.lua | 1 + 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/frontend/apps/reader/modules/readerhandmade.lua b/frontend/apps/reader/modules/readerhandmade.lua index 99ed6101a..60a34a582 100644 --- a/frontend/apps/reader/modules/readerhandmade.lua +++ b/frontend/apps/reader/modules/readerhandmade.lua @@ -484,6 +484,7 @@ function ReaderHandMade:addOrEditPageTocItem(pageno, when_updated_callback, sele { { text = _("Cancel"), + id = "close", callback = function() UIManager:close(dialog) end, diff --git a/frontend/ui/widget/buttondialog.lua b/frontend/ui/widget/buttondialog.lua index 50d76117c..b11655199 100644 --- a/frontend/ui/widget/buttondialog.lua +++ b/frontend/ui/widget/buttondialog.lua @@ -267,16 +267,18 @@ function ButtonDialog:onCloseWidget() end) end -function ButtonDialog:onTapClose() - UIManager:close(self) +function ButtonDialog:onClose() if self.tap_close_callback then self.tap_close_callback() end + UIManager:close(self) return true end -function ButtonDialog:onClose() - self:onTapClose() +function ButtonDialog:onTapClose(arg, ges) + if ges.pos:notIntersectWith(self.movable.dimen) then + self:onClose() + end return true end diff --git a/frontend/ui/widget/inputdialog.lua b/frontend/ui/widget/inputdialog.lua index a01be520b..b3dc6a6e8 100644 --- a/frontend/ui/widget/inputdialog.lua +++ b/frontend/ui/widget/inputdialog.lua @@ -436,7 +436,10 @@ function InputDialog:init() self.ges_events.Tap = { GestureRange:new{ ges = "tap", - range = self[1].dimen, -- screen above the keyboard + range = Geom:new{ + w = self.screen_width, + h = self.screen_height, + }, }, } end @@ -478,13 +481,20 @@ function InputDialog:getAddedWidgetAvailableWidth() return self._input_widget.width end --- Close the keyboard if we tap anywhere outside of the keyboard (that isn't an input field, where it would be caught via InputText:onTapTextBox) -function InputDialog:onTap() +-- Tap outside of inputbox to hide the keyboard (inside the inputbox it is caught via InputText:onTapTextBox). +-- If the keyboard is hidden, tap outside of the dialog to close the dialog. +function InputDialog:onTap(arg, ges) -- This is slightly more fine-grained than VK's own visibility lock, hence the duplication... if self.deny_keyboard_hiding then return end - self:onCloseKeyboard() + if self:isKeyboardVisible() then + self:onCloseKeyboard() + else + if ges.pos:notIntersectWith(self.dialog_frame.dimen) then + self:onCloseDialog() + end + end end function InputDialog:getInputText() diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index dab43dd0d..e1fd759d2 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -724,6 +724,7 @@ function Menu:init() { { text = _("Cancel"), + id = "close", callback = function() self.page_info_text:closeInputDialog() end, diff --git a/frontend/ui/widget/textviewer.lua b/frontend/ui/widget/textviewer.lua index 884cd90d7..c3bacfa28 100644 --- a/frontend/ui/widget/textviewer.lua +++ b/frontend/ui/widget/textviewer.lua @@ -441,6 +441,7 @@ function TextViewer:findDialog() { { text = _("Cancel"), + id = "close", callback = function() UIManager:close(input_dialog) end,