The change listener on caretPositionProperty() was not getting invoked on 
replacing the content with same text as there was no change in caret position. 
Since the textProperty invalidation sets the forward bias to true by default, 
incorrect caret position was  calculated when the same text was replaced after 
clicking on the trailing edge of last character or empty space in the TextField.

Since caretShapeProperty invalidation listener gets invoked without changing 
the caret position, updating the caretBiasProperty on this listener solves the 
issue.

Since the caret position value will be same when the caret is present after the 
last character or before the last character, it can not be validated using unit 
test.
The fix can be validated using MonkeyTester.
Steps to select TextField option in Monkey Tester.

- Open the MonkeyTester app and select TextField from the left option pane.
- Select Short from Text selection option and click on the TextField to bring 
it into focus.
- Select all using cmd(ctrl) + a and copy using cmd(ctrl) + c
- Click on empty space in the TextField after the present content.
- Select all again using the keyboard shortcut and paste using cmd(ctrl) + v
- The caret should be displayed after the last character. Without the fix caret 
gets displayed before the last character.

-------------

Commit messages:
 - Textfield cursor issue fix

Changes: https://git.openjdk.org/jfx/pull/1287/files
 Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1287&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8242616
  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/1287.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1287/head:pull/1287

PR: https://git.openjdk.org/jfx/pull/1287

Reply via email to