On Thu, 1 Sep 2022 21:52:30 GMT, Kevin Rushforth <[email protected]> wrote:
> What might help is a concrete example of an application that would hit this > bug, and an explanation of how the app would fail. Let's consider this scenario: an application sets a custom input method on a control, followed by the user loading a new skin via a menu (i.e. after the default skin has been installed). // 1. control is created control = new Control(); // 2. user wants to provide a custom input method control.setInputMethodRequests(USER1); // 3. Stage.show applies CSS and creates a default skin control.setInputMethodRequests(SKIN1); // 4. user loads a new L&F via menu // 5. new skin is created, constructor sets the control property while the old skin is still attached new UserSkin(control); control.setInputMethodRequests(SKIN2); // 6. user calls setSkin() to install the new skin oldSkin.dispose() control.setInputMethodRequests(null); // current implementation The problem here is that the skin code is unable to decide in step 5 whether to overwrite the input method or keep the current value - because it does not know whether the current value was set by the user (step 2) or the old skin (step 3). Furthermore, if we were to add any kind of conditional logic to step 3 and 5, the problem moves down the line to the dispose(0 method in step 6. since at that moment it is unclear whether the current value was set by the user or by the new skin. ------------- PR: https://git.openjdk.org/jfx/pull/845
