1 This patch is applied upstream to fix http://bugzilla.gnome.org/show_bug.cgi?id=122688
2 As this regresses mozilla products drag-and-drop (bug 162362) we are reverse applying
3 it as what it fixed is a corner case while mozilla case is a big problem.
4 The real problem is inside mozilla code, see http://bugzilla.gnome.org/show_bug.cgi?id=394525
5 but we can't fix this for binary thunderbird/firefox/seamonkey packages
7 --- a/gtk/gtkdnd.c 2006/11/05 08:55:47 16711
8 +++ b/gtk/gtkdnd.c 2006/11/06 17:16:37 16712
10 static gboolean gtk_drag_grab_broken_event_cb (GtkWidget *widget,
11 GdkEventGrabBroken *event,
13 +static void gtk_drag_grab_notify_cb (GtkWidget *widget,
14 + gboolean was_grabbed,
16 static gboolean gtk_drag_button_release_cb (GtkWidget *widget,
17 GdkEventButton *event,
21 g_signal_connect (info->ipc_widget, "grab_broken_event",
22 G_CALLBACK (gtk_drag_grab_broken_event_cb), info);
23 + g_signal_connect (info->ipc_widget, "grab_notify",
24 + G_CALLBACK (gtk_drag_grab_notify_cb), info);
25 g_signal_connect (info->ipc_widget, "button_release_event",
26 G_CALLBACK (gtk_drag_button_release_cb), info);
27 g_signal_connect (info->ipc_widget, "motion_notify_event",
29 gtk_drag_grab_broken_event_cb,
31 g_signal_handlers_disconnect_by_func (info->ipc_widget,
32 + gtk_drag_grab_notify_cb,
34 + g_signal_handlers_disconnect_by_func (info->ipc_widget,
35 gtk_drag_button_release_cb,
37 g_signal_handlers_disconnect_by_func (info->ipc_widget,
39 gtk_drag_grab_broken_event_cb,
41 g_signal_handlers_disconnect_by_func (info->ipc_widget,
42 + gtk_drag_grab_notify_cb,
44 + g_signal_handlers_disconnect_by_func (info->ipc_widget,
45 gtk_drag_button_release_cb,
47 g_signal_handlers_disconnect_by_func (info->ipc_widget,
48 @@ -4117,6 +4128,24 @@
53 +gtk_drag_grab_notify_cb (GtkWidget *widget,
54 + gboolean was_grabbed,
57 + GtkDragSourceInfo *info = (GtkDragSourceInfo *)data;
61 + /* We have to block callbacks to avoid recursion here, because
62 + gtk_drag_cancel calls gtk_grab_remove (via gtk_drag_end) */
63 + g_signal_handlers_block_by_func (widget, gtk_drag_grab_notify_cb, data);
64 + gtk_drag_cancel (info, gtk_get_current_event_time ());
65 + g_signal_handlers_unblock_by_func (widget, gtk_drag_grab_notify_cb, data);
70 /*************************************************************
71 * gtk_drag_button_release_cb:
72 * "button_release_event" callback during drag.