Fix responsiveness issue when selecting features on iPad

Implement an alternative solution for #6028 that doesn't rely on timeouts
This commit is contained in:
Quincy Morgan
2020-03-04 13:10:15 -08:00
parent c41e0b9937
commit 83d2656bbc
4 changed files with 13 additions and 14 deletions

View File

@@ -109,17 +109,10 @@ export function behaviorSelect(context) {
_p1 = null;
if (dist > tolerance) return;
// Defer processing the click,
// because this click may trigger a blur event,
// and the blur event may trigger a tag change,
// and we really want that tag change to go to the already selected entity
// and not the one that we are about to select with the click #6028, #5878
// (Be very careful entering modeSelect anywhere that might also blur a field!)
var datum = d3_event.target.__data__ || (_lastMouse && _lastMouse.target.__data__);
var isMultiselect = d3_event.shiftKey || d3_select('#surface .lasso').node();
window.setTimeout(function() {
processClick(datum, isMultiselect);
}, 20); // delay > whatever raw_tag_editor.js `scheduleChange` does (10ms).
processClick(datum, isMultiselect);
}

View File

@@ -166,11 +166,12 @@ export function uiEntityEditor(context) {
// Tag changes that fire on input can all get coalesced into a single
// history operation when the user leaves the field. #2342
function changeTags(changed, onInput) {
// Use explicit entityIDs in case the selection changes before the event is fired.
function changeTags(entityIDs, changed, onInput) {
var actions = [];
for (var i in _entityIDs) {
var entityID = _entityIDs[i];
for (var i in entityIDs) {
var entityID = entityIDs[i];
var entity = context.entity(entityID);
var tags = Object.assign({}, entity.tags); // shallow copy

View File

@@ -100,7 +100,7 @@ export function uiSectionPresetFields(context) {
_fieldsArr.forEach(function(field) {
field
.on('change', function(t, onInput) {
dispatch.call('change', field, t, onInput);
dispatch.call('change', field, _entityIDs, t, onInput);
})
.on('revert', function(keys) {
dispatch.call('revert', field, keys);

View File

@@ -553,9 +553,14 @@ export function uiSectionRawTagEditor(id, context) {
}
function scheduleChange() {
// Cache IDs in case the editor is reloaded before the change event is called. - #6028
var entityIDs = _entityIDs;
// Delay change in case this change is blurring an edited combo. - #5878
window.setTimeout(function() {
dispatch.call('change', this, _pendingChange);
if (!_pendingChange) return;
dispatch.call('change', this, entityIDs, _pendingChange);
_pendingChange = null;
}, 10);
}