From 13dba0a461d7fe5b3763c92d27c93a64a8c842b7 Mon Sep 17 00:00:00 2001 From: Stanislav Brabec Date: Thu, 22 Jul 2010 16:19:49 -0500 Subject: [PATCH] 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 --- gtk/gtkdnd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 70b6628fb9..0859c45be1 100644 --- a/gtk/gtkdnd.c +++ b/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);