On Wed, 21 Dec 2022 12:56:12 GMT, Thiago Milczarek Sayao <tsa...@openjdk.org> 
wrote:

>> This PR  was previously discussed on #905.
>> 
>> The approach is to grab the keyboard focus so the window that originated the 
>> drag will keep it.
>> 
>> I did some cleanup on grabbing related functions as well.
>> 
>> `gdk_keyboard_focus()` is deprecated, so is `gdk_device*` functions in favor 
>> of `gdk_seat*`. But that's only available in later Gtk versions. I checked 
>> and newer Gtk will use `gdk_seat*` inside the deprecated 
>> `gdk_keyboard_focus()`.
>> 
>> Edit:
>> 
>> The current changes uses another approach that is to not ungrab pointer 
>> device when focus is received on another window. There's also some cleanup 
>> on grabbing related functions and grab moved from starting on mouse click to 
>> the actual drag.
>
> Thiago Milczarek Sayao has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Grab drag focus on drag

I took a second look at the code that calls `grab_mouse_drag_focus`, which was 
changed to call it on a drag start rather than on a mouse click, and it looks 
like there is a problem with the way it is now implemented. It will now be 
called multiple times during a drag operation, instead of just at the start of 
the drag operation.

modules/javafx.graphics/src/main/native-glass/gtk/glass_window.cpp line 353:

> 351:         // and no exit/enter event should be reported during this drag.
> 352:         // We can grab mouse pointer for these needs.
> 353:         grab_mouse_drag_focus();

Now that this code has moved here, it will be called every time the mouse moves 
during a drag operation. It should only be called once when the drag first 
starts.

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

Changes requested by kcr (Lead).

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

Reply via email to