It does not work because the problem happens before.

But I suspect when the  gdk_drag_context_get_selected_action(event->context) 
returning ZERO problem is fixed, the need of gdk_drag_drop_done() will be the 
problem.

Cheers.
________________________________
De: Pankaj Bansal <pankaj.b.ban...@oracle.com>
Enviado: segunda-feira, 13 de maio de 2019 10:38
Para: Thiago Milczarek Sayao; openjfx-dev@openjdk.java.net
Assunto: RE: Findings on JDK-8211302

Hello Thiago,

This solution was proposed by one of the engineers in Oracle sometime back and 
we have tested it. This does not seem to solve the issue. If you wish to try 
this, please take the patch [1], which is attached in the bug JDK-8211302. This 
patch neatly defines the function depending upon the gtk version. You can test 
this patch and let us know if you could make this work.

[1] 
https://bugs.openjdk.java.net/secure/attachment/82098/8211302-drag-drop-done.patch


-Pankaj

-----Original Message-----
From: Thiago Milczarek Sayao [mailto:thiago.sa...@clamed.com.br]
Sent: Monday, May 13, 2019 6:59 PM
To: openjfx-dev@openjdk.java.net
Subject: Findings on JDK-8211302

Hello,

I have been looking into JDK-8211302.

https://bugs.openjdk.java.net/browse/JDK-8211302

Did not find a solution, but the problem is because 
gdk_drag_context_get_selected_action(event->context) is returning ZERO. That's 
also why the cursor does not update on the drop location. Subsequent events do 
not get fired to complete the drop, because it falls on the abort code below:

static void process_dnd_source_mouse_release(GdkWindow *window, GdkEventButton 
*event) {
    (void)window;
    (void)event;

    glass_gdk_master_pointer_ungrab();

    if (gdk_drag_context_get_selected_action(get_drag_context())) {
        gdk_drag_drop(get_drag_context(), GDK_CURRENT_TIME);
    } else {
        gdk_drag_abort(get_drag_context(), GDK_CURRENT_TIME);
        /* let the gdk_drag_abort messages handled before finish */
        gdk_threads_add_idle((GSourceFunc) dnd_finish_callback, NULL);
    }
}


I also suspect this will be needed, and it was introduced in GDK 3.20:

gdk_drag_drop_done(get_drag_context(), TRUE)

One solution is to check the version on build, other is to bundle the GTK lib 
(which makes it more safe to GDK changes).

Cheers.

Reply via email to