From 16e3b2f0acd76b14b2a9615d617dc742a12cf840 Mon Sep 17 00:00:00 2001 From: poire-z Date: Sun, 23 Jan 2022 18:40:37 +0100 Subject: [PATCH] Allow Backspace to work as back button --- frontend/apps/filemanager/filemanager.lua | 2 +- frontend/apps/reader/modules/readerback.lua | 2 +- frontend/apps/reader/modules/readerstyletweak.lua | 2 +- frontend/device/input.lua | 5 +++++ .../ui/elements/common_settings_menu_table.lua | 15 +++++++++++++++ frontend/ui/elements/filemanager_menu_order.lua | 2 ++ frontend/ui/elements/reader_menu_order.lua | 1 + frontend/ui/widget/bboxwidget.lua | 2 +- frontend/ui/widget/bookmapwidget.lua | 2 +- frontend/ui/widget/buttondialog.lua | 2 +- frontend/ui/widget/buttondialogtitle.lua | 2 +- frontend/ui/widget/configdialog.lua | 2 +- frontend/ui/widget/confirmbox.lua | 2 +- frontend/ui/widget/datetimewidget.lua | 2 +- frontend/ui/widget/dictquicklookup.lua | 2 +- frontend/ui/widget/doublespinwidget.lua | 2 +- frontend/ui/widget/footnotewidget.lua | 2 +- frontend/ui/widget/frontlightwidget.lua | 2 +- frontend/ui/widget/imageviewer.lua | 2 +- frontend/ui/widget/keyvaluepage.lua | 2 +- frontend/ui/widget/menu.lua | 2 +- frontend/ui/widget/multiconfirmbox.lua | 2 +- frontend/ui/widget/pagebrowserwidget.lua | 2 +- frontend/ui/widget/radiobuttonwidget.lua | 2 +- frontend/ui/widget/screensaverwidget.lua | 2 +- frontend/ui/widget/skimtowidget.lua | 2 +- frontend/ui/widget/spinwidget.lua | 2 +- frontend/ui/widget/textviewer.lua | 2 +- frontend/ui/widget/touchmenu.lua | 2 +- frontend/ui/widget/virtualkeyboard.lua | 2 +- plugins/statistics.koplugin/calendarview.lua | 2 +- 31 files changed, 50 insertions(+), 27 deletions(-) diff --git a/frontend/apps/filemanager/filemanager.lua b/frontend/apps/filemanager/filemanager.lua index 8cce1e448..c7e69cf73 100644 --- a/frontend/apps/filemanager/filemanager.lua +++ b/frontend/apps/filemanager/filemanager.lua @@ -434,7 +434,7 @@ function FileManager:setupLayout() if Device:hasKeys() then self.key_events.Home = { {"Home"}, doc = "go home" } -- Override the menu.lua way of handling the back key - self.file_chooser.key_events.Back = { {"Back"}, doc = "go back" } + self.file_chooser.key_events.Back = { {Device.input.group.Back}, doc = "go back" } if not Device:hasFewKeys() then -- Also remove the handler assigned to the "Back" key by menu.lua self.file_chooser.key_events.Close = nil diff --git a/frontend/apps/reader/modules/readerback.lua b/frontend/apps/reader/modules/readerback.lua index 517024f68..ef29cd7ff 100644 --- a/frontend/apps/reader/modules/readerback.lua +++ b/frontend/apps/reader/modules/readerback.lua @@ -21,7 +21,7 @@ local ReaderBack = EventListener:new{ function ReaderBack:init() if Device:hasKeys() then - self.ui.key_events.Back = { {"Back"}, doc = "Reader back" } + self.ui.key_events.Back = { {Device.input.group.Back}, doc = "Reader back" } end -- Regular function wrapping our method, to avoid re-creating -- an anonymous function at each page turn diff --git a/frontend/apps/reader/modules/readerstyletweak.lua b/frontend/apps/reader/modules/readerstyletweak.lua index 8053e19f2..e376aee82 100644 --- a/frontend/apps/reader/modules/readerstyletweak.lua +++ b/frontend/apps/reader/modules/readerstyletweak.lua @@ -51,7 +51,7 @@ function TweakInfoWidget:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "cancel" } + Close = { {Device.input.group.Back}, doc = "cancel" } } end diff --git a/frontend/device/input.lua b/frontend/device/input.lua index 2502ca10c..93949bf7e 100644 --- a/frontend/device/input.lua +++ b/frontend/device/input.lua @@ -137,6 +137,7 @@ local Input = { Cursor = { "Up", "Down", "Left", "Right" }, PgFwd = { "RPgFwd", "LPgFwd" }, PgBack = { "RPgBack", "LPgBack" }, + Back = { "Back" }, Alphabet = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" @@ -248,6 +249,10 @@ function Input:init() end logger.info("loaded custom event map", custom_event_map) end + + if G_reader_settings:isTrue("backspace_as_back") then + table.insert(self.group.Back, "Backspace") + end end --[[-- diff --git a/frontend/ui/elements/common_settings_menu_table.lua b/frontend/ui/elements/common_settings_menu_table.lua index 967b52285..2f8ce8ee4 100644 --- a/frontend/ui/elements/common_settings_menu_table.lua +++ b/frontend/ui/elements/common_settings_menu_table.lua @@ -434,6 +434,21 @@ common_settings.back_in_reader = { genGenericMenuEntry(_("Go to previous read page"), "back_in_reader", "previous_read_page"), }, } +if Device:hasKeyboard() then + common_settings.backspace_as_back = { + text = _("Backspace works as back button"), + checked_func = function() + return G_reader_settings:isTrue("backspace_as_back") + end, + callback = function() + G_reader_settings:flipNilOrFalse("backspace_as_back") + UIManager:show(InfoMessage:new{ + text = _("This will take effect on next restart."), + }) + end, + } +end + common_settings.opening_page_location_stack = { text = _("Add opening page to location history"), checked_func = function() diff --git a/frontend/ui/elements/filemanager_menu_order.lua b/frontend/ui/elements/filemanager_menu_order.lua index 5faa179d4..0a75db7ea 100644 --- a/frontend/ui/elements/filemanager_menu_order.lua +++ b/frontend/ui/elements/filemanager_menu_order.lua @@ -60,6 +60,8 @@ local order = { "back_to_exit", "back_in_filemanager", "back_in_reader", + "backspace_as_back", + "----------------------------", "android_volume_keys", "android_camera_key", "android_haptic_feedback", diff --git a/frontend/ui/elements/reader_menu_order.lua b/frontend/ui/elements/reader_menu_order.lua index 4d96d95a0..fe3495b52 100644 --- a/frontend/ui/elements/reader_menu_order.lua +++ b/frontend/ui/elements/reader_menu_order.lua @@ -101,6 +101,7 @@ local order = { "back_to_exit", "back_in_filemanager", "back_in_reader", + "backspace_as_back", "----------------------------", "page_turns_non_touch", "android_volume_keys", diff --git a/frontend/ui/widget/bboxwidget.lua b/frontend/ui/widget/bboxwidget.lua index 4aeaa137e..c8bfe2aa5 100644 --- a/frontend/ui/widget/bboxwidget.lua +++ b/frontend/ui/widget/bboxwidget.lua @@ -50,7 +50,7 @@ function BBoxWidget:init() } end if Device:hasKeys() then - self.key_events.Close = { {"Back"}, doc = "close windows" } + self.key_events.Close = { {Device.input.group.Back}, doc = "close windows" } self.key_events.Select = { {"Press"}, doc = "confirm adjust" } end end diff --git a/frontend/ui/widget/bookmapwidget.lua b/frontend/ui/widget/bookmapwidget.lua index efff90d0f..4fa5210eb 100644 --- a/frontend/ui/widget/bookmapwidget.lua +++ b/frontend/ui/widget/bookmapwidget.lua @@ -538,7 +538,7 @@ function BookMapWidget:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close page" }, + Close = { {Input.group.Back}, doc = "close page" }, ScrollRowUp = {{"Up"}, doc = "scroll up"}, ScrollRowDown = {{"Down"}, doc = "scrol down"}, ScrollPageUp = {{Input.group.PgBack}, doc = "prev page"}, diff --git a/frontend/ui/widget/buttondialog.lua b/frontend/ui/widget/buttondialog.lua index 32b00bea1..da0874f0b 100644 --- a/frontend/ui/widget/buttondialog.lua +++ b/frontend/ui/widget/buttondialog.lua @@ -20,7 +20,7 @@ local ButtonDialog = InputContainer:new{ function ButtonDialog:init() if Device:hasKeys() then - local close_keys = Device:hasFewKeys() and { "Back", "Left" } or "Back" + local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back self.key_events = { Close = { { close_keys }, doc = "close button dialog" } } diff --git a/frontend/ui/widget/buttondialogtitle.lua b/frontend/ui/widget/buttondialogtitle.lua index 1a4c2f530..bb318d56b 100644 --- a/frontend/ui/widget/buttondialogtitle.lua +++ b/frontend/ui/widget/buttondialogtitle.lua @@ -34,7 +34,7 @@ local ButtonDialogTitle = InputContainer:new{ function ButtonDialogTitle:init() if self.dismissable then if Device:hasKeys() then - local close_keys = Device:hasFewKeys() and { "Back", "Left" } or "Back" + local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back self.key_events = { Close = { { close_keys }, doc = "close button dialog" } } diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index c9b8e67b1..5181b5511 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -873,7 +873,7 @@ function ConfigDialog:init() end if Device:hasKeys() then -- set up keyboard events - local close_keys = Device:hasFewKeys() and { "Back", "Left" } or "Back" + local close_keys = Device:hasFewKeys() and { "Back", "Left" } or Device.input.group.Back self.key_events.Close = { { close_keys }, doc = "close config menu" } end if Device:hasDPad() then diff --git a/frontend/ui/widget/confirmbox.lua b/frontend/ui/widget/confirmbox.lua index 1b4bdc863..5def72e92 100644 --- a/frontend/ui/widget/confirmbox.lua +++ b/frontend/ui/widget/confirmbox.lua @@ -73,7 +73,7 @@ function ConfirmBox:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "cancel" } + Close = { {Device.input.group.Back}, doc = "cancel" } } end end diff --git a/frontend/ui/widget/datetimewidget.lua b/frontend/ui/widget/datetimewidget.lua index 55a7e301e..664759ee2 100644 --- a/frontend/ui/widget/datetimewidget.lua +++ b/frontend/ui/widget/datetimewidget.lua @@ -82,7 +82,7 @@ function DateTimeWidget:init() (self.is_date and 0.8 or 0.6)) if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close date widget" } + Close = { {Device.input.group.Back}, doc = "close date widget" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/dictquicklookup.lua b/frontend/ui/widget/dictquicklookup.lua index 7ecbf5322..14270628e 100644 --- a/frontend/ui/widget/dictquicklookup.lua +++ b/frontend/ui/widget/dictquicklookup.lua @@ -93,7 +93,7 @@ function DictQuickLookup:init() self.key_events = { ReadPrevResult = {{Input.group.PgBack}, doc = "read prev result"}, ReadNextResult = {{Input.group.PgFwd}, doc = "read next result"}, - Close = { {"Back"}, doc = "close quick lookup" } + Close = { {Input.group.Back}, doc = "close quick lookup" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/doublespinwidget.lua b/frontend/ui/widget/doublespinwidget.lua index 35b60f116..ddd978256 100644 --- a/frontend/ui/widget/doublespinwidget.lua +++ b/frontend/ui/widget/doublespinwidget.lua @@ -66,7 +66,7 @@ function DoubleSpinWidget:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close doublespin widget" } + Close = { {Device.input.group.Back}, doc = "close doublespin widget" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/footnotewidget.lua b/frontend/ui/widget/footnotewidget.lua index efcdce39d..b200c78d1 100644 --- a/frontend/ui/widget/footnotewidget.lua +++ b/frontend/ui/widget/footnotewidget.lua @@ -206,7 +206,7 @@ function FootnoteWidget:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "cancel" }, + Close = { {Device.input.group.Back}, doc = "cancel" }, Follow = { {"Press"}, doc = "follow link" }, } end diff --git a/frontend/ui/widget/frontlightwidget.lua b/frontend/ui/widget/frontlightwidget.lua index 6a20f5d9c..464229cc5 100644 --- a/frontend/ui/widget/frontlightwidget.lua +++ b/frontend/ui/widget/frontlightwidget.lua @@ -84,7 +84,7 @@ function FrontLightWidget:init() } if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close frontlight" } + Close = { {Device.input.group.Back}, doc = "close frontlight" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/imageviewer.lua b/frontend/ui/widget/imageviewer.lua index 644e4f4b2..ef78ef403 100644 --- a/frontend/ui/widget/imageviewer.lua +++ b/frontend/ui/widget/imageviewer.lua @@ -81,7 +81,7 @@ local ImageViewer = InputContainer:new{ function ImageViewer:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close viewer" }, + Close = { {Device.input.group.Back}, doc = "close viewer" }, ZoomIn = { {Device.input.group.PgBack}, doc = "Zoom In" }, ZoomOut = { {Device.input.group.PgFwd}, doc = "Zoom out" }, } diff --git a/frontend/ui/widget/keyvaluepage.lua b/frontend/ui/widget/keyvaluepage.lua index 2b8d2c098..23120bdda 100644 --- a/frontend/ui/widget/keyvaluepage.lua +++ b/frontend/ui/widget/keyvaluepage.lua @@ -283,7 +283,7 @@ function KeyValuePage:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close page" }, + Close = { {Input.group.Back}, doc = "close page" }, NextPage = {{Input.group.PgFwd}, doc = "next page"}, PrevPage = {{Input.group.PgBack}, doc = "prev page"}, } diff --git a/frontend/ui/widget/menu.lua b/frontend/ui/widget/menu.lua index ada708b59..b4480fc9c 100644 --- a/frontend/ui/widget/menu.lua +++ b/frontend/ui/widget/menu.lua @@ -925,7 +925,7 @@ function Menu:init() if Device:hasKeys() then -- set up keyboard events - self.key_events.Close = { {"Back"}, doc = "close menu" } + self.key_events.Close = { {Input.group.Back}, doc = "close menu" } if Device:hasFewKeys() then self.key_events.Close = { {"Left"}, doc = "close menu" } end diff --git a/frontend/ui/widget/multiconfirmbox.lua b/frontend/ui/widget/multiconfirmbox.lua index 4cd5be98f..b0967c0ec 100644 --- a/frontend/ui/widget/multiconfirmbox.lua +++ b/frontend/ui/widget/multiconfirmbox.lua @@ -73,7 +73,7 @@ function MultiConfirmBox:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "cancel" } + Close = { {Device.input.group.Back}, doc = "cancel" } } end end diff --git a/frontend/ui/widget/pagebrowserwidget.lua b/frontend/ui/widget/pagebrowserwidget.lua index 64bead343..4803317b4 100644 --- a/frontend/ui/widget/pagebrowserwidget.lua +++ b/frontend/ui/widget/pagebrowserwidget.lua @@ -50,7 +50,7 @@ function PageBrowserWidget:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close page" }, + Close = { {Device.input.group.Back}, doc = "close page" }, ScrollRowUp = {{"Up"}, doc = "scroll up"}, ScrollRowDown = {{"Down"}, doc = "scrol down"}, ScrollPageUp = {{Input.group.PgBack}, doc = "prev page"}, diff --git a/frontend/ui/widget/radiobuttonwidget.lua b/frontend/ui/widget/radiobuttonwidget.lua index 0fa7c8dd1..a86a6b34d 100644 --- a/frontend/ui/widget/radiobuttonwidget.lua +++ b/frontend/ui/widget/radiobuttonwidget.lua @@ -50,7 +50,7 @@ function RadioButtonWidget:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close widget" } + Close = { {Device.input.group.Back}, doc = "close widget" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/screensaverwidget.lua b/frontend/ui/widget/screensaverwidget.lua index a81e8a928..774e23389 100644 --- a/frontend/ui/widget/screensaverwidget.lua +++ b/frontend/ui/widget/screensaverwidget.lua @@ -15,7 +15,7 @@ local ScreenSaverWidget = InputContainer:new{ function ScreenSaverWidget:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close widget" }, + Close = { {Device.input.group.Back}, doc = "close widget" }, } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/skimtowidget.lua b/frontend/ui/widget/skimtowidget.lua index 6064860bd..dae01df30 100644 --- a/frontend/ui/widget/skimtowidget.lua +++ b/frontend/ui/widget/skimtowidget.lua @@ -27,7 +27,7 @@ function SkimToWidget:init() local screen_height = Screen:getHeight() if Device:hasKeys() then - self.key_events.Close = { { "Back" }, doc = "close skimto page" } + self.key_events.Close = { {Device.input.group.Back}, doc = "close skimto page" } end if Device:isTouchDevice() then self.ges_events = { diff --git a/frontend/ui/widget/spinwidget.lua b/frontend/ui/widget/spinwidget.lua index 40420e860..248780c8e 100644 --- a/frontend/ui/widget/spinwidget.lua +++ b/frontend/ui/widget/spinwidget.lua @@ -65,7 +65,7 @@ function SpinWidget:init() end if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close spin widget" } + Close = { {Device.input.group.Back}, doc = "close spin widget" } } end if Device:isTouchDevice() then diff --git a/frontend/ui/widget/textviewer.lua b/frontend/ui/widget/textviewer.lua index d1828e5eb..82b793c87 100644 --- a/frontend/ui/widget/textviewer.lua +++ b/frontend/ui/widget/textviewer.lua @@ -71,7 +71,7 @@ function TextViewer:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close text viewer" } + Close = { {Device.input.group.Back}, doc = "close text viewer" } } end diff --git a/frontend/ui/widget/touchmenu.lua b/frontend/ui/widget/touchmenu.lua index c5ff61ebf..c8067dc5f 100644 --- a/frontend/ui/widget/touchmenu.lua +++ b/frontend/ui/widget/touchmenu.lua @@ -474,7 +474,7 @@ function TouchMenu:init() } } - self.key_events.Back = { {"Back"}, doc = "back to upper menu or close touchmenu" } + self.key_events.Back = { {Input.group.Back}, doc = "back to upper menu or close touchmenu" } if Device:hasFewKeys() then self.key_events.Back = { {"Left"}, doc = "back to upper menu or close touchmenu" } end diff --git a/frontend/ui/widget/virtualkeyboard.lua b/frontend/ui/widget/virtualkeyboard.lua index 79625a670..b7835534f 100644 --- a/frontend/ui/widget/virtualkeyboard.lua +++ b/frontend/ui/widget/virtualkeyboard.lua @@ -672,7 +672,7 @@ function VirtualKeyPopup:init() self.key_events.PressKey = { {"Press"}, doc = "select key" } end if Device:hasKeys() then - self.key_events.Close = { {"Back"}, doc = "close keyboard" } + self.key_events.Close = { {Device.input.group.Back}, doc = "close keyboard" } end local offset_x = 2*keyboard_frame.bordersize + keyboard_frame.padding + parent_key.keyboard.key_padding diff --git a/plugins/statistics.koplugin/calendarview.lua b/plugins/statistics.koplugin/calendarview.lua index b1845eb09..594316a8f 100644 --- a/plugins/statistics.koplugin/calendarview.lua +++ b/plugins/statistics.koplugin/calendarview.lua @@ -430,7 +430,7 @@ function CalendarView:init() if Device:hasKeys() then self.key_events = { - Close = { {"Back"}, doc = "close page" }, + Close = { {Input.group.Back}, doc = "close page" }, NextMonth = {{Input.group.PgFwd}, doc = "next page"}, PrevMonth = {{Input.group.PgBack}, doc = "prev page"}, }