Skip to content

Commit 73533a2

Browse files
authored
Fix inputs focus on safari (#2675)
## Description It seems that since release of new web implementations `select` doesn't work as it should on Safari. The problem is caused by `setPointerCapture` method. Even though it is called on all browsers, input stays focused only on Safari. This PR changes method of calling `setPointerCapture` - now we do this only for `Div` elements. Fixes #2673 ## Test plan Tested on example app
1 parent d91de59 commit 73533a2

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/web/tools/PointerEventManager.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
1919
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.DOWN);
2020
const target = event.target as HTMLElement;
2121

22-
target.setPointerCapture(adaptedEvent.pointerId);
22+
if (target instanceof HTMLDivElement) {
23+
target.setPointerCapture(adaptedEvent.pointerId);
24+
}
25+
2326
this.markAsInBounds(adaptedEvent.pointerId);
2427
this.trackedPointers.add(adaptedEvent.pointerId);
2528

@@ -47,7 +50,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
4750
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.UP);
4851
const target = event.target as HTMLElement;
4952

50-
target.releasePointerCapture(adaptedEvent.pointerId);
53+
if (target instanceof HTMLDivElement) {
54+
target.releasePointerCapture(adaptedEvent.pointerId);
55+
}
56+
5157
this.markAsOutOfBounds(adaptedEvent.pointerId);
5258
this.trackedPointers.delete(adaptedEvent.pointerId);
5359

@@ -79,7 +85,10 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
7985
// incorporating it here seems stupid), so we just call it again here, every time
8086
// pointer moves until it succeeds.
8187
// God, I do love web development.
82-
if (!target.hasPointerCapture(event.pointerId)) {
88+
if (
89+
!target.hasPointerCapture(event.pointerId) &&
90+
target instanceof HTMLDivElement
91+
) {
8392
target.setPointerCapture(event.pointerId);
8493
}
8594

0 commit comments

Comments
 (0)