diff --git a/.luacheckrc b/.luacheckrc index cb1b73554..26ec29b21 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -26,7 +26,9 @@ read_globals = { "DOVERLAPPIXELS", "FOLLOW_LINK_TIMEOUT", "DTAP_ZONE_MENU", + "DTAP_ZONE_MENU_EXT", "DTAP_ZONE_CONFIG", + "DTAP_ZONE_CONFIG_EXT", "DTAP_ZONE_MINIBAR", "DTAP_ZONE_FORWARD", "DTAP_ZONE_BACKWARD", diff --git a/defaults.lua b/defaults.lua index 71e37f8e9..11ac93b85 100644 --- a/defaults.lua +++ b/defaults.lua @@ -72,9 +72,11 @@ FOLLOW_LINK_TIMEOUT = 0.5 -- y: y coordinate of top left corner in proportion to screen height -- w: tap zone width in proportion to screen width -- h: tap zone height in proportion to screen height -DTAP_ZONE_MENU = {x = 1/8, y = 0, w = 3/4, h = 1/8} -DTAP_ZONE_CONFIG = {x = 1/8, y = 7/8, w = 3/4, h = 1/8} -DTAP_ZONE_MINIBAR = {x = 0, y = 31/32, w = 1, h = 1/32} +DTAP_ZONE_MENU = {x = 0, y = 0, w = 1, h = 1/8} +DTAP_ZONE_MENU_EXT = {x = 1/4, y = 0, w = 2/4, h = 1/5} -- taller, narrower extension +DTAP_ZONE_CONFIG = {x = 0, y = 7/8, w = 1, h = 1/8} +DTAP_ZONE_CONFIG_EXT = {x = 1/4, y = 2/3, w = 2/4, h = 1/5} -- taller, narrower extension +DTAP_ZONE_MINIBAR = {x = 0, y = 12/13, w = 1, h = 1/13} DTAP_ZONE_FORWARD = {x = 1/4, y = 0, w = 3/4, h = 1} DTAP_ZONE_BACKWARD = {x = 0, y = 0, w = 1/4, h = 1} -- DTAP_ZONE_BOOKMARK = {x = 7/8, y = 0, w = 1/8, h = 1/8} -- deprecated diff --git a/frontend/apps/filemanager/filemanagermenu.lua b/frontend/apps/filemanager/filemanagermenu.lua index 50a6e5269..066f779b9 100644 --- a/frontend/apps/filemanager/filemanagermenu.lua +++ b/frontend/apps/filemanager/filemanagermenu.lua @@ -72,6 +72,18 @@ function FileManagerMenu:initGesListener() }, handler = function(ges) return self:onTapShowMenu(ges) end, }, + { + id = "filemanager_ext_tap", + ges = "tap", + screen_zone = { + ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y, + ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h, + }, + overrides = { + "filemanager_tap", + }, + handler = function(ges) return self:onTapShowMenu(ges) end, + }, { id = "filemanager_swipe", ges = "swipe", @@ -85,6 +97,18 @@ function FileManagerMenu:initGesListener() }, handler = function(ges) return self:onSwipeShowMenu(ges) end, }, + { + id = "filemanager_ext_swipe", + ges = "swipe", + screen_zone = { + ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y, + ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h, + }, + overrides = { + "filemanager_swipe", + }, + handler = function(ges) return self:onSwipeShowMenu(ges) end, + }, }) end diff --git a/frontend/apps/reader/modules/readerconfig.lua b/frontend/apps/reader/modules/readerconfig.lua index 19717d8c5..bff7df833 100644 --- a/frontend/apps/reader/modules/readerconfig.lua +++ b/frontend/apps/reader/modules/readerconfig.lua @@ -50,6 +50,18 @@ function ReaderConfig:initGesListener() }, handler = function() return self:onTapShowConfigMenu() end, }, + { + id = "readerconfigmenu_ext_tap", + ges = "tap", + screen_zone = { + ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y, + ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h, + }, + overrides = { + "readerconfigmenu_tap", + }, + handler = function() return self:onTapShowConfigMenu() end, + }, { id = "readerconfigmenu_swipe", ges = "swipe", @@ -63,6 +75,18 @@ function ReaderConfig:initGesListener() }, handler = function(ges) return self:onSwipeShowConfigMenu(ges) end, }, + { + id = "readerconfigmenu_ext_swipe", + ges = "swipe", + screen_zone = { + ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y, + ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h, + }, + overrides = { + "readerconfigmenu_swipe", + }, + handler = function(ges) return self:onSwipeShowConfigMenu(ges) end, + }, { id = "readerconfigmenu_pan", ges = "pan", @@ -76,6 +100,18 @@ function ReaderConfig:initGesListener() }, handler = function(ges) return self:onSwipeShowConfigMenu(ges) end, }, + { + id = "readerconfigmenu_ext_pan", + ges = "pan", + screen_zone = { + ratio_x = DTAP_ZONE_CONFIG_EXT.x, ratio_y = DTAP_ZONE_CONFIG_EXT.y, + ratio_w = DTAP_ZONE_CONFIG_EXT.w, ratio_h = DTAP_ZONE_CONFIG_EXT.h, + }, + overrides = { + "readerconfigmenu_pan", + }, + handler = function(ges) return self:onSwipeShowConfigMenu(ges) end, + }, }) end diff --git a/frontend/apps/reader/modules/readerfooter.lua b/frontend/apps/reader/modules/readerfooter.lua index e191ce8a7..5e35c00c9 100644 --- a/frontend/apps/reader/modules/readerfooter.lua +++ b/frontend/apps/reader/modules/readerfooter.lua @@ -632,9 +632,10 @@ function ReaderFooter:setupTouchZones() screen_zone = footer_screen_zone, handler = function(ges) return self:onTapFooter(ges) end, overrides = { + "readerconfigmenu_ext_tap", + "readerconfigmenu_tap", "tap_forward", "tap_backward", - "readerconfigmenu_tap", }, -- (Low priority: tap on existing highlights -- or links have priority) diff --git a/frontend/apps/reader/modules/readerhighlight.lua b/frontend/apps/reader/modules/readerhighlight.lua index 0df2e61bd..ea9fb2654 100644 --- a/frontend/apps/reader/modules/readerhighlight.lua +++ b/frontend/apps/reader/modules/readerhighlight.lua @@ -192,15 +192,17 @@ function ReaderHighlight:setupTouchZones() -- Tap on existing highlights have priority over -- everything but tap on links (as links can be -- part of some highlighted text) - "tap_forward", - "tap_backward", - "readermenu_tap", - "readerconfigmenu_tap", - "readerfooter_tap", "tap_top_left_corner", "tap_top_right_corner", "tap_left_bottom_corner", "tap_right_bottom_corner", + "readerfooter_tap", + "readerconfigmenu_ext_tap", + "readerconfigmenu_tap", + "readermenu_ext_tap", + "readermenu_tap", + "tap_forward", + "tap_backward", }, handler = function(ges) return self:onTap(nil, ges) end }, diff --git a/frontend/apps/reader/modules/readerlink.lua b/frontend/apps/reader/modules/readerlink.lua index b72c64311..e08dceb4b 100644 --- a/frontend/apps/reader/modules/readerlink.lua +++ b/frontend/apps/reader/modules/readerlink.lua @@ -56,16 +56,18 @@ function ReaderLink:init() overrides = { -- Tap on links have priority over everything (it can -- be disabled with "Tap to follow links" menu item) - "tap_forward", - "tap_backward", - "readermenu_tap", - "readerconfigmenu_tap", "readerhighlight_tap", - "readerfooter_tap", "tap_top_left_corner", "tap_top_right_corner", "tap_left_bottom_corner", "tap_right_bottom_corner", + "readerfooter_tap", + "readerconfigmenu_ext_tap", + "readerconfigmenu_tap", + "readermenu_ext_tap", + "readermenu_tap", + "tap_forward", + "tap_backward", }, handler = function(ges) return self:onTap(_, ges) end, }, diff --git a/frontend/apps/reader/modules/readermenu.lua b/frontend/apps/reader/modules/readermenu.lua index 9ebba88b2..71573bd5b 100644 --- a/frontend/apps/reader/modules/readermenu.lua +++ b/frontend/apps/reader/modules/readermenu.lua @@ -101,6 +101,18 @@ function ReaderMenu:onReaderReady() }, handler = function(ges) return self:onTapShowMenu(ges) end, }, + { + id = "readermenu_ext_tap", + ges = "tap", + screen_zone = { + ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y, + ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h, + }, + overrides = { + "readermenu_tap", + }, + handler = function(ges) return self:onTapShowMenu(ges) end, + }, { id = "readermenu_swipe", ges = "swipe", @@ -114,6 +126,18 @@ function ReaderMenu:onReaderReady() }, handler = function(ges) return self:onSwipeShowMenu(ges) end, }, + { + id = "readermenu_ext_swipe", + ges = "swipe", + screen_zone = { + ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y, + ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h, + }, + overrides = { + "readermenu_swipe", + }, + handler = function(ges) return self:onSwipeShowMenu(ges) end, + }, { id = "readermenu_pan", ges = "pan", @@ -127,6 +151,18 @@ function ReaderMenu:onReaderReady() }, handler = function(ges) return self:onSwipeShowMenu(ges) end, }, + { + id = "readermenu_ext_pan", + ges = "pan", + screen_zone = { + ratio_x = DTAP_ZONE_MENU_EXT.x, ratio_y = DTAP_ZONE_MENU_EXT.y, + ratio_w = DTAP_ZONE_MENU_EXT.w, ratio_h = DTAP_ZONE_MENU_EXT.h, + }, + overrides = { + "readermenu_pan", + }, + handler = function(ges) return self:onSwipeShowMenu(ges) end, + }, }) end diff --git a/frontend/ui/widget/configdialog.lua b/frontend/ui/widget/configdialog.lua index 6bdc2e598..52021eb10 100644 --- a/frontend/ui/widget/configdialog.lua +++ b/frontend/ui/widget/configdialog.lua @@ -1379,8 +1379,14 @@ function ConfigDialog:onSwipeCloseMenu(arg, ges_ev) w = DTAP_ZONE_CONFIG.w * Screen:getWidth(), h = DTAP_ZONE_CONFIG.h * Screen:getHeight(), } + local range_ext = { + x = DTAP_ZONE_CONFIG_EXT.x * Screen:getWidth(), + y = DTAP_ZONE_CONFIG_EXT.y * Screen:getHeight(), + w = DTAP_ZONE_CONFIG_EXT.w * Screen:getWidth(), + h = DTAP_ZONE_CONFIG_EXT.h * Screen:getHeight(), + } if ges_ev.direction == "south" and (ges_ev.pos:intersectWith(self.dialog_frame.dimen) - or ges_ev.pos:intersectWith(range)) then + or ges_ev.pos:intersectWith(range) or ges_ev.pos:intersectWith(range_ext)) then self:closeDialog() return true end diff --git a/plugins/gestures.koplugin/main.lua b/plugins/gestures.koplugin/main.lua index 9d0a6d14e..45f50cd9c 100644 --- a/plugins/gestures.koplugin/main.lua +++ b/plugins/gestures.koplugin/main.lua @@ -823,18 +823,22 @@ function Gestures:setupGesture(ges) local overrides_swipe_pan, overrides_swipe_pan_release if self.is_docless then overrides_tap_corner = { + "filemanager_ext_tap", "filemanager_tap", } overrides_horizontal_edge = { + "filemanager_ext_swipe", "filemanager_swipe", } else overrides_tap_corner = { - "tap_backward", - "tap_forward", - "readermenu_tap", - "readerconfigmenu_tap", "readerfooter_tap", + "readerconfigmenu_ext_tap", + "readerconfigmenu_tap", + "readermenu_ext_tap", + "readermenu_tap", + "tap_forward", + "tap_backward", } overrides_hold_corner = { -- As hold corners are "ignored" by default, and we have @@ -844,17 +848,21 @@ function Gestures:setupGesture(ges) "readerfooter_hold", } overrides_vertical_edge = { + "readerconfigmenu_ext_swipe", + "readerconfigmenu_swipe", + "readermenu_ext_swipe", + "readermenu_swipe", "paging_swipe", "rolling_swipe", - "readermenu_swipe", - "readerconfigmenu_swipe", } overrides_horizontal_edge = { "swipe_link", + "readerconfigmenu_ext_swipe", + "readerconfigmenu_swipe", + "readermenu_ext_swipe", + "readermenu_swipe", "paging_swipe", "rolling_swipe", - "readermenu_swipe", - "readerconfigmenu_swipe", } overrides_pan = { "paging_swipe", @@ -1034,13 +1042,15 @@ function Gestures:setupGesture(ges) distance = "short" if self.is_docless then overrides = { + "filemanager_ext_tap", "filemanager_tap", - "filemanager_swipe" + "filemanager_ext_swipe", + "filemanager_swipe", } else overrides = { - "rolling_swipe", "paging_swipe", + "rolling_swipe", } end elseif ges == "spread_gesture" then diff --git a/spec/unit/defaults_spec.lua b/spec/unit/defaults_spec.lua index 14f8c23c4..cff6b47bd 100644 --- a/spec/unit/defaults_spec.lua +++ b/spec/unit/defaults_spec.lua @@ -8,7 +8,7 @@ describe("defaults module", function() it("should load all defaults from defaults.lua", function() Defaults:init() - assert.is_same(98, #Defaults.defaults_name) + assert.is_same(100, #Defaults.defaults_name) end) it("should save changes to defaults.persistent.lua", function() @@ -16,7 +16,7 @@ describe("defaults module", function() os.remove(persistent_filename) -- To see indices and help updating this when new settings are added: - -- for i=1, 98 do print(i.." ".. Defaults.defaults_name[i]) end + -- for i=1, 100 do print(i.." ".. Defaults.defaults_name[i]) end -- not in persistent but checked in defaults Defaults.changed[20] = true @@ -24,7 +24,7 @@ describe("defaults module", function() Defaults.changed[56] = true Defaults.changed[85] = true Defaults:saveSettings() - assert.is_same(98, #Defaults.defaults_name) + assert.is_same(100, #Defaults.defaults_name) assert.is_same("DTAP_ZONE_BACKWARD", Defaults.defaults_name[85]) assert.is_same("DCREREADER_CONFIG_WORD_SPACING_LARGE", Defaults.defaults_name[50]) assert.is_same("DCREREADER_CONFIG_H_MARGIN_SIZES_XXX_LARGE", Defaults.defaults_name[20])