-
Notifications
You must be signed in to change notification settings - Fork 29.2k
Fix crash on two finger selection gesture #168598
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix crash on two finger selection gesture #168598
Conversation
a2a7349
to
865f12d
Compare
865f12d
to
1d640fa
Compare
1d640fa
to
d4b904c
Compare
@@ -858,7 +873,10 @@ class TextSelectionOverlay { | |||
final TextPosition position = renderObject.getPositionForPoint( | |||
Offset(details.globalPosition.dx, centerOfLineGlobal), | |||
); | |||
_dragStartSelection ??= _selection; | |||
_dragStartSelection = | |||
defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider adding a quick comment here. It's not immediately obvious to me why we behave differently here based on the platform.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I kinda thought the same thing while reviewing 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One idea below to possibly reduce the amount of state, otherwise LGTM 👍
_dragStartSelection = | ||
defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS | ||
? _selection | ||
: null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just double checking a logical difference: after this change, on iOS/macOS, it's possible that _dragStartSelection will be overwritten when it is non-null, but previously it wouldn't have been.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, I didn't notice that. I'll update it to meet the original logical difference. It should still only be set on Apple platforms.
@@ -1267,6 +1330,9 @@ class SelectionOverlay { | |||
_isDraggingEndHandle = false; | |||
return; | |||
} | |||
if (_blockEndHandleDrag) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if you could get rid of the _blockStart/EndHandleDrag booleans by checking something like this here instead:
_isDraggingStartHandle && defaultTargetPlatform == TargetPlatform.iOS || defaultTargetPlatform == TargetPlatform.macOS || kIsWeb
That could be a getter to make things cleaner.
); | ||
final TestGesture gesture = await tester.startGesture( | ||
textOffsetToPosition(paragraph, 11), | ||
); // at the 'a' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be 'e' pos?
Same comment for code below
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch thanks!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, nice work!
1ef0af6
to
fdde5a2
Compare
e95427b
to
290cff8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍
// On Apple and web platforms only one selection handle can be dragged | ||
// at a time, so when the start handle is being dragged on these platforms | ||
// the the end handle cannot be dragged. | ||
bool get _canDragEndHandle => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these getters and the early returns are really easy to follow now 👍
Still looking into an issue with the magnifier after this change. |
aa7aa8b
to
8a9db17
Compare
… in progress (even if blocked by _canDrag*Handle)
…lling editableText.showMagnifier
dc74d0b
to
11a1205
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍 . The main magnifier fix you mentioned since last time is 42f1efe right?
Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 matanlurey@users.noreply.github.com Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 jsimionato@google.com Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 simonhadenius@gmail.com Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 30870216+gaaclarke@users.noreply.github.com [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 52160996+FMorschel@users.noreply.github.com Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 danny@tuppeny.com Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 dkwingsmt@users.noreply.github.com [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 victorsanniay@gmail.com Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 engine-flutter-autoroll@skia.org Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 danny@tuppeny.com Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 rmolivares@renzo-olivares.dev Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 matanlurey@users.noreply.github.com Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 47866232+chunhtai@users.noreply.github.com Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 matanlurey@users.noreply.github.com Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 matanlurey@users.noreply.github.com Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 mdebbar@google.com Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 mohellebiabdessalem@gmail.com refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 kevmoo@users.noreply.github.com [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 bruno.leroux@gmail.com Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 ybz975218925@live.com Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 alex.medinsh@gmail.com Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 engine-flutter-autoroll@skia.org Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 kyle.finlinson@verygood.ventures Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 huy@nevercode.io Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 30870216+gaaclarke@users.noreply.github.com [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 sarbagyastha@gmail.com Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 34871572+gmackall@users.noreply.github.com Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 jason-simmons@users.noreply.github.com Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 34465683+rkishan516@users.noreply.github.com Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. ...
…r#9315) Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 matanlurey@users.noreply.github.com Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 jsimionato@google.com Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 simonhadenius@gmail.com Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 30870216+gaaclarke@users.noreply.github.com [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 52160996+FMorschel@users.noreply.github.com Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 danny@tuppeny.com Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 dkwingsmt@users.noreply.github.com [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 victorsanniay@gmail.com Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 engine-flutter-autoroll@skia.org Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 danny@tuppeny.com Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 rmolivares@renzo-olivares.dev Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 matanlurey@users.noreply.github.com Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 47866232+chunhtai@users.noreply.github.com Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 matanlurey@users.noreply.github.com Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 matanlurey@users.noreply.github.com Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 mdebbar@google.com Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 mohellebiabdessalem@gmail.com refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 kevmoo@users.noreply.github.com [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 bruno.leroux@gmail.com Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 ybz975218925@live.com Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 alex.medinsh@gmail.com Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 engine-flutter-autoroll@skia.org Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 kyle.finlinson@verygood.ventures Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 huy@nevercode.io Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 30870216+gaaclarke@users.noreply.github.com [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 sarbagyastha@gmail.com Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 34871572+gmackall@users.noreply.github.com Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 jason-simmons@users.noreply.github.com Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 34465683+rkishan516@users.noreply.github.com Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. ...
…r#9315) Roll Flutter from 33cdd8ef31dc to 85564cbba9e7 (39 revisions) flutter/flutter@33cdd8e...85564cb 2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#169276)" (flutter/flutter#169347) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from a01ea49f53a4 to 956fd8b14e22 (1 revision) (flutter/flutter#169334) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 4de10a11ceb9 to 085f110ecf33 (1 revision) (flutter/flutter#169333) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from bcc7e7fce10e to a01ea49f53a4 (1 revision) (flutter/flutter#169329) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 18b85aced9b7 to bcc7e7fce10e (3 revisions) (flutter/flutter#169323) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 2a45b2f88a4f to 4de10a11ceb9 (2 revisions) (flutter/flutter#169322) 2025-05-23 matanlurey@users.noreply.github.com Remove patching of `package_config.json` from Flutter Pub wrapper. (flutter/flutter#169306) 2025-05-23 jsimionato@google.com Add missing dart_dynamic_modules flag for iOS DDM simulator builds (flutter/flutter#169254) 2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from ea73ccdc1417 to 18b85aced9b7 (6 revisions) (flutter/flutter#169315) 2025-05-23 simonhadenius@gmail.com Add flag to exclude focus for hidden children in Visibility, maintainFocusability. Set maintainFocusability to false in IndexedStack (flutter/flutter#159133) 2025-05-23 30870216+gaaclarke@users.noreply.github.com [Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter/flutter#169276) 2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 8f85d89fdc23 to 2a45b2f88a4f (6 revisions) (flutter/flutter#169312) 2025-05-23 52160996+FMorschel@users.noreply.github.com Removes unnecessary parentheses (flutter/flutter#169015) 2025-05-22 danny@tuppeny.com Unpin test/test_core/test_api packages (flutter/flutter#169198) 2025-05-22 dkwingsmt@users.noreply.github.com [Engine] Fix an edge case of RoundSuperellipseParam::Contains with sharp corners (flutter/flutter#167977) 2025-05-22 victorsanniay@gmail.com Replace goldens in test/cupertino/nav_bar_transition_test.dart (flutter/flutter#169172) 2025-05-22 engine-flutter-autoroll@skia.org Roll Skia from 13a299964c9f to ea73ccdc1417 (35 revisions) (flutter/flutter#169303) 2025-05-22 danny@tuppeny.com Increase sub-task timeout for Mac web_tool_tests (flutter/flutter#169307) 2025-05-22 rmolivares@renzo-olivares.dev Fix crash on two finger selection gesture (flutter/flutter#168598) 2025-05-22 matanlurey@users.noreply.github.com Disable the ability to opt-out of `explicit-package-dependencies`. (flutter/flutter#169283) 2025-05-22 47866232+chunhtai@users.noreply.github.com Fixes tab semantics gets dropped if the child produce a semantics node (flutter/flutter#169233) 2025-05-22 matanlurey@users.noreply.github.com Skip `{PLAT}_web_tools_test#expression_evaluation_*_test.dart`, turning tree 🔴 (flutter/flutter#169305) 2025-05-22 matanlurey@users.noreply.github.com Update tool-internal `generateLocalizations...()` to never use synthetic (`flutter_gen`) packages (flutter/flutter#169285) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Make `build_android_host_app_with_module_aar` build using an aar (#169171)" (flutter/flutter#169287) 2025-05-22 mdebbar@google.com Increase sub-task timeout for `web_tool_tests_1_2` (flutter/flutter#169277) 2025-05-22 mohellebiabdessalem@gmail.com refactor the usage of `MediaQuery.sizeOf(context).height` to use the new `.heightOf(context)` (flutter/flutter#168894) 2025-05-22 kevmoo@users.noreply.github.com [tool] Add --no-minify flag to JS Compiler (flutter/flutter#169102) 2025-05-22 bruno.leroux@gmail.com Update ButtonStyle documentation (flutter/flutter#168062) 2025-05-22 ybz975218925@live.com Fix the issue where DropdownMenu disposes of the controller. (flutter/flutter#168541) 2025-05-22 alex.medinsh@gmail.com Add bottomSheetScrimBuilder to Scaffold (flutter/flutter#167335) 2025-05-22 98614782+auto-submit[bot]@users.noreply.github.com Reverts "[Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (#168914)" (flutter/flutter#169250) 2025-05-21 engine-flutter-autoroll@skia.org Roll Dart SDK from 56940edd099d to 8f85d89fdc23 (6 revisions) (flutter/flutter#169237) 2025-05-21 kyle.finlinson@verygood.ventures Use gestureSettings.touchSlop in PrimaryPointerGestureRecognizer (flutter/flutter#161549) 2025-05-21 huy@nevercode.io Normalize BottomAppBarTheme (continue) (flutter/flutter#168966) 2025-05-21 30870216+gaaclarke@users.noreply.github.com [Reland] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (#168396) (flutter/flutter#168914) 2025-05-21 sarbagyastha@gmail.com Respect `calendarDelegate` in `showDateRangePicker` (flutter/flutter#168290) 2025-05-21 34871572+gmackall@users.noreply.github.com Make `build_android_host_app_with_module_aar` build using an aar (flutter/flutter#169171) 2025-05-21 jason-simmons@users.noreply.github.com Roll Dart SDK from 7c40eba6bf77 to 56940edd099d (flutter/flutter#169135) 2025-05-21 34465683+rkishan516@users.noreply.github.com Feat: Add full screen dialog support for dialog routes (flutter/flutter#167794) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human is aware of the problem. ...
This change blocks two selection handles from being able to be dragged simultaneously on iOS and the web, this matches the native behavior. On native Android both handles can still be dragged simultaneously this is the behavior observed on Google Keep/ Google Messages and Android's EditText.
Also fixes an issue on iOS where the magnifier would not return after hiding when double tapping and dragging to select and then dragging outside the TextField area. The cause of this issue was because editableText.showMagnifier decides whether to update the magnifier position or show a new one based on whether it was visible, so when it was hidden and we attempt to update it's position, it would try to show a new magnifier which left the magnifier in a broken state. This change makes editableText.showMagnifier depend on whether a magnifier exists instead of just checking it's visibility. Similarly editableText.hideMagnifier now does not depend on the magnifier visibility, instead it internally (selectionOverlay.hideMagnifier) checks if the magnifier exists.
Fixes #168578
Pre-launch Checklist
///
).