Virtual keyboard: auto releasable Shift and keypopups (#9659)

Long-press on Shift to keep it non-auto-released.
reviewable/pr9720/r1
weijiuqiao 2 years ago committed by GitHub
parent e1a52b5881
commit 42d4056f8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -51,7 +51,7 @@ local arabic_comma = ar_popup.arabic_comma
return { return {
min_layer = 1, min_layer = 1,
max_layer = 4, max_layer = 4,
shiftmode_keys = {["بدّل"] = true}, -- بدّل means "Shift". shiftmode_keys = {[""] = true},
symbolmode_keys = {["رمز"] = true,["حرف"]=true}, -- رمز means "Symbol", حرف means "letter" (traditionally "ABC" on QWERTY layouts) symbolmode_keys = {["رمز"] = true,["حرف"]=true}, -- رمز means "Symbol", حرف means "letter" (traditionally "ABC" on QWERTY layouts)
utf8mode_keys = {["🌐"] = true}, -- The famous globe key for layout switching utf8mode_keys = {["🌐"] = true}, -- The famous globe key for layout switching
umlautmode_keys = {["Äéß"] = false}, -- No need for this keyboard panel umlautmode_keys = {["Äéß"] = false}, -- No need for this keyboard panel
@ -104,7 +104,7 @@ return {
}, },
-- fourth row -- fourth row
{ {
{ "بدّل", "بدّل", "بدّل", "بدّل", { label = "",
width = 1.40}, width = 1.40},
{ label = "🌐", }, { label = "🌐", },
{ "رمز", "رمز", "حرف", "حرف", { "رمز", "رمز", "حرف", "حرف",

@ -51,6 +51,10 @@ local VirtualKey = InputContainer:extend{
face = Font:getFace("infont"), face = Font:getFace("infont"),
} }
-- For caps lock, it's necessary because after setLayout, the new shift key is no longer the same virtual key
-- thus rendering its preset .ignore_key_release property useless
local ignore_key_release
function VirtualKey:init() function VirtualKey:init()
local label_font_size = G_reader_settings:readSetting("keyboard_key_font_size", DEFAULT_LABEL_SIZE) local label_font_size = G_reader_settings:readSetting("keyboard_key_font_size", DEFAULT_LABEL_SIZE)
self.face = Font:getFace("infont", label_font_size) self.face = Font:getFace("infont", label_font_size)
@ -58,8 +62,19 @@ function VirtualKey:init()
if self.keyboard.symbolmode_keys[self.label] ~= nil then if self.keyboard.symbolmode_keys[self.label] ~= nil then
self.callback = function () self.keyboard:setLayer("Sym") end self.callback = function () self.keyboard:setLayer("Sym") end
self.skiptap = true self.skiptap = true
elseif self.keyboard.shiftmode_keys[self.label] ~= nil then elseif self.keyboard.shiftmode_keys[self.label] ~= nil or self.keyboard.shiftmode_keys[self.key] ~= nil then
self.callback = function () self.keyboard:setLayer("Shift") end -- self.key needed because the shift key's label could be the capslock instead of the shift
local key = self.key or self.label
local releasable = key == ""
self.callback = function()
self.keyboard.release_shift = releasable
self.keyboard:setLayer("Shift")
end
self.hold_callback = function()
ignore_key_release = true
if releasable then self.keyboard.release_shift = false end
self.keyboard:setLayer("Shift")
end
self.skiptap = true self.skiptap = true
elseif self.keyboard.utf8mode_keys[self.label] ~= nil then elseif self.keyboard.utf8mode_keys[self.label] ~= nil then
self.key_chars = self:genKeyboardLayoutKeyChars() self.key_chars = self:genKeyboardLayoutKeyChars()
@ -144,7 +159,15 @@ function VirtualKey:init()
self.keyboard:scrollDown() self.keyboard:scrollDown()
end end
else else
self.callback = function () self.keyboard:addChar(self.key) end self.callback = function()
self.keyboard:addChar(self.key)
if self.close_after_callback_widget then
UIManager:close(self.close_after_callback_widget)
end
if self.keyboard.shiftmode and not self.keyboard.symbolmode and self.keyboard.release_shift then
self.keyboard:setLayer("Shift")
end
end
self.hold_callback = function() self.hold_callback = function()
if not self.key_chars then return end if not self.key_chars then return end
@ -279,7 +302,7 @@ function VirtualKey:init()
}, },
}, },
} }
if (self.keyboard.shiftmode_keys[self.label] ~= nil and self.keyboard.shiftmode) or if ((self.keyboard.shiftmode_keys[self.label] ~= nil or self.keyboard.shiftmode_keys[self.key]) and self.keyboard.shiftmode) or
(self.keyboard.umlautmode_keys[self.label] ~= nil and self.keyboard.umlautmode) or (self.keyboard.umlautmode_keys[self.label] ~= nil and self.keyboard.umlautmode) or
(self.keyboard.symbolmode_keys[self.label] ~= nil and self.keyboard.symbolmode) then (self.keyboard.symbolmode_keys[self.label] ~= nil and self.keyboard.symbolmode) then
self[1].background = Blitbuffer.COLOR_LIGHT_GRAY self[1].background = Blitbuffer.COLOR_LIGHT_GRAY
@ -419,6 +442,10 @@ function VirtualKey:onSwipeKey(arg, ges)
end end
function VirtualKey:onHoldReleaseKey() function VirtualKey:onHoldReleaseKey()
if ignore_key_release then
ignore_key_release = nil
return true
end
if self.ignore_key_release then if self.ignore_key_release then
self.ignore_key_release = nil self.ignore_key_release = nil
return true return true
@ -577,6 +604,7 @@ function VirtualKeyPopup:init()
key_chars = key_chars, key_chars = key_chars,
width = parent_key.width, width = parent_key.width,
height = parent_key.height, height = parent_key.height,
close_after_callback_widget = self,
} }
-- Support any function as a callback. -- Support any function as a callback.
if v_func then if v_func then
@ -958,6 +986,10 @@ function VirtualKeyboard:addKeys()
- self.key_padding - self.key_padding
local key_height = base_key_height local key_height = base_key_height
label = label or self.KEYS[i][j].label or key label = label or self.KEYS[i][j].label or key
if label == "" and self.shiftmode and (not self.release_shift or self.symbolmode) then
key = label
label = "" -- capslock symbol
end
local virtual_key = VirtualKey:new{ local virtual_key = VirtualKey:new{
key = key, key = key,
key_chars = key_chars, key_chars = key_chars,

Loading…
Cancel
Save