Dispatcher: fix possible crash when no document (#7716)

pull/7725/head
zwim 3 years ago committed by GitHub
parent 6e1950676a
commit 78fdce8e9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -617,36 +617,39 @@ arguments are:
function Dispatcher:execute(ui, settings, gesture) function Dispatcher:execute(ui, settings, gesture)
for k, v in pairs(settings) do for k, v in pairs(settings) do
if settingsList[k] ~= nil and (settingsList[k].conditions == nil or settingsList[k].conditions == true) then if settingsList[k] ~= nil and (settingsList[k].conditions == nil or settingsList[k].conditions == true) then
if settingsList[k].category == "none" then -- Be sure we don't send a document setting event if there's not yet or no longer a document
if settingsList[k].arg ~= nil then if ui.document or (not settingsList[k].paging and not settingsList[k].rolling) then
ui:handleEvent(Event:new(settingsList[k].event, settingsList[k].arg)) if settingsList[k].category == "none" then
else if settingsList[k].arg ~= nil then
ui:handleEvent(Event:new(settingsList[k].event)) ui:handleEvent(Event:new(settingsList[k].event, settingsList[k].arg))
else
ui:handleEvent(Event:new(settingsList[k].event))
end
end end
end if settingsList[k].category == "absolutenumber"
if settingsList[k].category == "absolutenumber" or settingsList[k].category == "string"
or settingsList[k].category == "string" then
then ui:handleEvent(Event:new(settingsList[k].event, v))
ui:handleEvent(Event:new(settingsList[k].event, v)) end
end -- the event can accept a gesture object or an argument
-- the event can accept a gesture object or an argument if settingsList[k].category == "arg" then
if settingsList[k].category == "arg" then local arg = gesture or settingsList[k].arg
local arg = gesture or settingsList[k].arg ui:handleEvent(Event:new(settingsList[k].event, arg))
ui:handleEvent(Event:new(settingsList[k].event, arg)) end
end -- the event can accept a gesture object or a number
-- the event can accept a gesture object or a number if settingsList[k].category == "incrementalnumber" then
if settingsList[k].category == "incrementalnumber" then local arg = v ~= 0 and v or gesture or 0
local arg = v ~= 0 and v or gesture or 0 ui:handleEvent(Event:new(settingsList[k].event, arg))
ui:handleEvent(Event:new(settingsList[k].event, arg)) end
end if ui.document and settingsList[k].configurable then
if ui.document and settingsList[k].configurable then local value = v
local value = v if type(v) ~= "number" then
if type(v) ~= "number" then for i, r in ipairs(settingsList[k].args) do
for i, r in ipairs(settingsList[k].args) do if v == r then value = settingsList[k].configurable.values[i] break end
if v == r then value = settingsList[k].configurable.values[i] break end end
end end
ui.document.configurable[settingsList[k].configurable.name] = value
end end
ui.document.configurable[settingsList[k].configurable.name] = value
end end
end end
end end

Loading…
Cancel
Save