diff --git a/src/ol/interaction.js b/src/ol/interaction.js index feb41be8ff..2b9651ebce 100644 --- a/src/ol/interaction.js +++ b/src/ol/interaction.js @@ -3,7 +3,9 @@ */ import Collection from './Collection.js'; import DoubleClickZoom from './interaction/DoubleClickZoom.js'; -import DragPan from './interaction/DragPan.js'; +import DragPan, { + defaultCondition as dragPanDefaultCondition, +} from './interaction/DragPan.js'; import DragRotate from './interaction/DragRotate.js'; import DragZoom from './interaction/DragZoom.js'; import KeyboardPan from './interaction/KeyboardPan.js'; @@ -112,7 +114,11 @@ export function defaults(opt_options) { if (dragPan) { interactions.push( new DragPan({ - condition: options.onFocusOnly ? focusWithTabindex : undefined, + condition: options.onFocusOnly + ? function (event) { + return focusWithTabindex(event) && dragPanDefaultCondition(event); + } + : undefined, kinetic: kinetic, }) ); diff --git a/src/ol/interaction/DragPan.js b/src/ol/interaction/DragPan.js index 1d4f4daabb..145b870bc0 100644 --- a/src/ol/interaction/DragPan.js +++ b/src/ol/interaction/DragPan.js @@ -179,7 +179,7 @@ class DragPan extends PointerInteraction { * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Browser event. * @return {boolean} Combined condition result. */ -function defaultCondition(mapBrowserEvent) { +export function defaultCondition(mapBrowserEvent) { return noModifierKeys(mapBrowserEvent) && primaryAction(mapBrowserEvent); } diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js index bd73e397aa..9b32772315 100644 --- a/test/spec/ol/map.test.js +++ b/test/spec/ol/map.test.js @@ -1,5 +1,7 @@ import DoubleClickZoom from '../../../src/ol/interaction/DoubleClickZoom.js'; -import DragPan from '../../../src/ol/interaction/DragPan.js'; +import DragPan, { + defaultCondition, +} from '../../../src/ol/interaction/DragPan.js'; import Feature from '../../../src/ol/Feature.js'; import GeoJSON from '../../../src/ol/format/GeoJSON.js'; import ImageLayer from '../../../src/ol/layer/Image.js'; @@ -743,13 +745,13 @@ describe('ol.Map', function () { const interactions = defaultInteractions(options); expect(interactions.getLength()).to.eql(1); expect(interactions.item(0)).to.be.a(DragPan); - expect(interactions.item(0).condition_).to.not.be(focusWithTabindex); + expect(interactions.item(0).condition_).to.be(defaultCondition); }); - it('uses the focus condition when onFocusOnly option is set', function () { + it('does not use the default condition when onFocusOnly option is set', function () { options.onFocusOnly = true; options.dragPan = true; const interactions = defaultInteractions(options); - expect(interactions.item(0).condition_).to.be(focusWithTabindex); + expect(interactions.item(0).condition_).to.not.be(defaultCondition); }); });