mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 09:12:52 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user