diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/incrementable.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/incrementable.dart index 46ff1ff8300..f696d6f3437 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/incrementable.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/incrementable.dart @@ -72,7 +72,7 @@ class SemanticIncrementable extends SemanticRole { } @override - bool get acceptsPointerEvents => true; + bool get shouldAcceptPointerEvents => true; @override bool focusAsRouteDefault() { diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/platform_view.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/platform_view.dart index b67060078a0..2d209646ad7 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/platform_view.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/platform_view.dart @@ -33,7 +33,7 @@ class SemanticPlatformView extends SemanticRole { /// This is so that the platform views are not obscured by semantic elements /// and can be reached by inspecting the web page. @override - bool get acceptsPointerEvents => false; + bool get shouldAcceptPointerEvents => false; @override void update() { diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/semantics.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/semantics.dart index 0363b650574..d501979c9c0 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/semantics.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/semantics.dart @@ -602,7 +602,7 @@ abstract class SemanticRole { /// /// This approach allows framework full control when specified, with reasonable /// fallback inference for backward compatibility. - bool get acceptsPointerEvents { + bool get shouldAcceptPointerEvents { final hitTestBehavior = semanticsObject.hitTestBehavior; // TIER 1: Framework Declaration @@ -646,22 +646,6 @@ abstract class SemanticRole { } } - // Route-scoped containers accept pointer events as a fallback. - // This fixes the dialog dismissal bug (issue #149001) by ensuring that - // dialog containers act as barriers, preventing clicks on empty space - // from passing through to the modal barrier underneath. - // - // Note: Ideally, the framework should explicitly set - // SemanticsHitTestBehavior.opaque for dialogs instead of relying on this - // engine-side inference. This fallback exists for backward compatibility - // and cases where framework doesn't specify the behavior. - if (semanticsObject.hasChildren) { - return semanticsObject.scopesRoute; - } - - // Leaf nodes default to transparent. - // Non-interactive leaf nodes (like empty space) should not intercept - // pointer events. return false; } @@ -1879,7 +1863,7 @@ class SemanticsObject { // Apply updates to the DOM. _updateRole(); - if (semanticRole!.acceptsPointerEvents) { + if (semanticRole!.shouldAcceptPointerEvents) { element.style.pointerEvents = 'all'; } else { element.style.pointerEvents = 'none'; diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart index e86283c0911..fb7396f4287 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/semantics/text_field.dart @@ -208,7 +208,7 @@ class SemanticTextField extends SemanticRole { } @override - bool get acceptsPointerEvents => true; + bool get shouldAcceptPointerEvents => true; /// The element used for editing, e.g. ``, `