On Wed, 8 Feb 2023 18:12:40 GMT, Alexander Zuev <[email protected]> wrote:
>> So if I go back and look at the code before your previous fix, there was no
>> check,
>> so the timer is created and then I'd expect applies when the caret is
>> installed on a component.
>> Here that behaviour is changed, so that if we create a caret, then call
>> setBlinkRate(), and then install()
>> then the blink rate appears to be ignored whereas before 4512626 it was
>> applied.
>
>> if we create a caret, then call setBlinkRate(), and then install()
>> then the blink rate appears to be ignored whereas before 4512626 it was
>> applied.
>
> Ok, if the text component is already visible and editable and focused and we
> install the new caret then the blink rate will not have an effect until the
> focus is lost and regained or until it became non-editable - and i think that
> was close to what we had before and there is a bug to investigate and
> optimize such corner case. In all other cases the code works fine. The value
> set is being preserved and will be reactivated when any of the methods such
> as focusGained or when the component installUI is called - if the cursor is
> set before component becomes visible - will cause to re-evaluate the blink
> rate and the stored value set by user will take place.
Suppose I have this code
Caret c = new DefaultCaret()
c.setBlinkRate(50);
c.install(editableJComponent);
BEFORE 4512626 the JDK code looked like this
if (rate != 0) {
if (flasher == null) {
flasher = new Timer(rate, handler);
}
flasher.setDelay(rate);
}
With your fix it looks like this
if (rate != 0) {
if (component != null && component.isEditable()) {
if (flasher == null) {
flasher = new Timer(rate, handler);
}
}
}
So with my sample application code there's a change that my blink rate is
completely lost.
-------------
PR: https://git.openjdk.org/jdk20/pull/122