RFR: 8319880: JTextField text selection doesn't stop if ended during loss of window focus [v3]

Anass Baya abaya at openjdk.org
Thu Dec 4 14:05:02 UTC 2025


On Thu, 4 Dec 2025 05:21:15 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

>> Anass Baya has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   The issue occurs only on Wnidows
>
> src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java line 551:
> 
>> 549:         if (SwingUtilities.isLeftMouseButton(e)) {
>> 550:             lastClickMillis = e.getWhen();
>> 551:             dragActive = true;
> 
> should we set `dragActive ` here? it's just mousePressed, in which case all mousePress event will have dragActive set.
> I guess it should be set in `mouseDragged` and reset in `mouseReleased`, no?

The issue is that when we start selecting text and then switch to another window, our window loses focus. After losing focus, we no longer receive mouse events. So when we release the mouse button in the other window and then switch back, our window thinks the drag is still happening because it never received the mouse-release event.

To fix this, we added logic to stop the drag as soon as we lose focus. And when we regain focus, since we don’t know whether the mouse was released or not, we require a new mouse-press before allowing dragging again. We also added logic to ignore outdated drag events: any drag event that happened before the last mouse-press is considered outdated and is ignored.

So now the behavior matches what we see in native apps like Notepad. @aivanov-jdk asked to check how a native Windows app behaves in this situation and to make our behavior consistent with that.
 
This logic does not affect the behavior on macOS.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28582#discussion_r2589211078


More information about the client-libs-dev mailing list