RFR: 8296621: Stage steals focus on scene change [v4]
Ambarish Rapte
arapte at openjdk.org
Tue Dec 6 05:41:55 UTC 2022
On Mon, 5 Dec 2022 21:03:09 GMT, Thiago Milczarek Sayao <tsayao at openjdk.org> wrote:
>> Simple fix to not requestFocus() on scene change.
>>
>> The attached bug sample shows that the TextField focused on the scene remains focused when the scene comes back.
>
> Thiago Milczarek Sayao has updated the pull request incrementally with one additional commit since the last revision:
>
> Add new line
Suggesting minor changes in the test.
tests/system/src/test/java/test/robot/javafx/scene/SceneChangeShouldNotFocusStageTest.java line 61:
> 59: public static void initFX() throws Exception {
> 60: new Thread(() -> Application.launch(TestApp.class, (String[]) null)).start();
> 61: waitForLatch(startupLatch, 10, "FX runtime failed to start.");
With the changes made in #950, we have a new pattern for launch and exit.
These two lines would be now: `Util.launch(startupLatch, TestApp.class);`
and similarly exit method would be : `Util.shutdown(stage);`
and `waitForLatch` method can be removed.
tests/system/src/test/java/test/robot/javafx/scene/SceneChangeShouldNotFocusStageTest.java line 80:
> 78: tl.setCycleCount(Animation.INDEFINITE);
> 79: tl.getKeyFrames().addAll(new KeyFrame(Duration.millis(0), e -> stage.setScene(scene1)),
> 80: new KeyFrame(Duration.millis(200), e -> stage.setScene(scene2)));
With `Duration.millis(0)`, JavaFX gets no time to switch to `scene2`. We should allow some time for `stage.setScene(scene2)` to be processed.
We can observe the behavior by commenting two lines 55 and 88, and adding a delay `Util.sleep(10000)` in `exit()` method : The `scene2` will never be seen on Window.
I would recommend to change `Duration.millis(0)` to `Duration.millis(100)` OR any other duration with sufficient gap between the two Frames.
-------------
Changes requested by arapte (Reviewer).
PR: https://git.openjdk.org/jfx/pull/940
More information about the openjfx-dev
mailing list