forked from facebook/react-native
-
Notifications
You must be signed in to change notification settings - Fork 145
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 cursor not showing when tabbing into multiline TextInput #1342
Merged
Saadnajmi
merged 1 commit into
microsoft:main
from
christophpurrer:fixCursorTabbingIntoMultilineText
Aug 9, 2022
Merged
Fix cursor not showing when tabbing into multiline TextInput #1342
Saadnajmi
merged 1 commit into
microsoft:main
from
christophpurrer:fixCursorTabbingIntoMultilineText
Aug 9, 2022
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This bug happens because `RCTUITextView` (which multiline TextInput uses) was overriding NSTextView's `becomeFirstResponder` method and didn't call `[super becomeFirstResponder]`. This seems to mess with AppKit's logic of drawing the cursor initially. This is alluded to in the [docs](https://developer.apple.com/documentation/appkit/nstextview/1807130-becomefirstresponder?language=objc#) for `[NSTextView becomeFirstResponder]`: > If the previous first responder was not a text view on the same layout manager as the receiving text view, this method draws the selection and updates the insertion point if necessary. Simply switching to call `[super becomeFirstResponder]` led to a cryptic exception within AppKit. This was likely because in the `reactFocus` (and `reactFocusIfNeeded`) we were calling `becomeFirstResponder` directly. The [docs](https://developer.apple.com/documentation/appkit/nsresponder/1526750-becomefirstresponder?language=objc#) for `[NSResponder becomeFirstResponder]` say: > Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly. This fixed the issue
ac0ec7a
to
87afcb7
Compare
Thanks! Glad my changes are kind of "followed up" here |
Saadnajmi
approved these changes
Aug 9, 2022
Saadnajmi
approved these changes
Aug 9, 2022
shwanton
pushed a commit
to shwanton/react-native-macos
that referenced
this pull request
Feb 13, 2023
…ft#1342) This bug happens because `RCTUITextView` (which multiline TextInput uses) was overriding NSTextView's `becomeFirstResponder` method and didn't call `[super becomeFirstResponder]`. This seems to mess with AppKit's logic of drawing the cursor initially. This is alluded to in the [docs](https://developer.apple.com/documentation/appkit/nstextview/1807130-becomefirstresponder?language=objc#) for `[NSTextView becomeFirstResponder]`: > If the previous first responder was not a text view on the same layout manager as the receiving text view, this method draws the selection and updates the insertion point if necessary. Simply switching to call `[super becomeFirstResponder]` led to a cryptic exception within AppKit. This was likely because in the `reactFocus` (and `reactFocusIfNeeded`) we were calling `becomeFirstResponder` directly. The [docs](https://developer.apple.com/documentation/appkit/nsresponder/1526750-becomefirstresponder?language=objc#) for `[NSResponder becomeFirstResponder]` say: > Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly. This fixed the issue Co-authored-by: Liron Yahdav <[email protected]> # Conflicts: # React/Views/UIView+React.m
shwanton
pushed a commit
to shwanton/react-native-macos
that referenced
this pull request
Mar 10, 2023
…ft#1342) This bug happens because `RCTUITextView` (which multiline TextInput uses) was overriding NSTextView's `becomeFirstResponder` method and didn't call `[super becomeFirstResponder]`. This seems to mess with AppKit's logic of drawing the cursor initially. This is alluded to in the [docs](https://developer.apple.com/documentation/appkit/nstextview/1807130-becomefirstresponder?language=objc#) for `[NSTextView becomeFirstResponder]`: > If the previous first responder was not a text view on the same layout manager as the receiving text view, this method draws the selection and updates the insertion point if necessary. Simply switching to call `[super becomeFirstResponder]` led to a cryptic exception within AppKit. This was likely because in the `reactFocus` (and `reactFocusIfNeeded`) we were calling `becomeFirstResponder` directly. The [docs](https://developer.apple.com/documentation/appkit/nsresponder/1526750-becomefirstresponder?language=objc#) for `[NSResponder becomeFirstResponder]` say: > Use the NSWindow makeFirstResponder: method, not this method, to make an object the first responder. Never invoke this method directly. This fixed the issue Co-authored-by: Liron Yahdav <[email protected]> # Conflicts: # React/Views/UIView+React.m
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Please select one of the following
Summary
This bug happens because
RCTUITextView
(which multiline TextInput uses) was overriding NSTextView'sbecomeFirstResponder
method and didn't call[super becomeFirstResponder]
.This seems to mess with AppKit's logic of drawing the cursor initially.
This is alluded to in the docs for
[NSTextView becomeFirstResponder]
:Simply switching to call
[super becomeFirstResponder]
led to a cryptic exception within AppKit. This was likely because in thereactFocus
(andreactFocusIfNeeded
) we were callingbecomeFirstResponder
directly.The docs for
[NSResponder becomeFirstResponder]
say:There necessary fixes are already part of 84c0863#diff-8a3ec110f2ee884d2ef078efddc4ebba9413c7e8cb90b6f5cebff19b2c0a1951 and hence not included in this diff
Changelog
[macOS] [Fixed] - Fix cursor not showing when tabbing into multiline TextInput
Test Plan
Using this example
Before
before.mov
After
after.mov