mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-10-01 03:27:36 +00:00
Fix stuck pointer grab due to passing GDK_CURRENT_TIME to gtk_drag_begin()
If gtk_drag_begin() gets passed GDK_CURRENT_TIME, try to use gtk_get_current_event_time(). If it fails, use GDK_CURRENT_TIME when ungrabbing in gtk_drag_end(). For more see https://bugzilla.gnome.org/show_bug.cgi?id=623865
This commit is contained in:
parent
f1627fc8f5
commit
13dba0a461
10
gtk/gtkdnd.c
10
gtk/gtkdnd.c
@ -2335,7 +2335,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
|
||||
NULL);
|
||||
|
||||
if (event)
|
||||
time = gdk_event_get_time (event);
|
||||
{
|
||||
time = gdk_event_get_time (event);
|
||||
if (time == GDK_CURRENT_TIME)
|
||||
time = gtk_get_current_event_time ();
|
||||
}
|
||||
|
||||
if (gdk_pointer_grab (ipc_widget->window, FALSE,
|
||||
GDK_POINTER_MOTION_MASK |
|
||||
@ -4056,6 +4060,10 @@ gtk_drag_end (GtkDragSourceInfo *info, guint32 time)
|
||||
GtkWidget *source_widget = info->widget;
|
||||
GdkDisplay *display = gtk_widget_get_display (source_widget);
|
||||
|
||||
/* Prevent ungrab before grab (see bug 623865) */
|
||||
if (info->grab_time == GDK_CURRENT_TIME)
|
||||
time = GDK_CURRENT_TIME;
|
||||
|
||||
if (info->update_idle)
|
||||
{
|
||||
g_source_remove (info->update_idle);
|
||||
|
Loading…
Reference in New Issue
Block a user