Annotation of /trunk/gtk2+/patches/gtk2+-2.10.11-mozilla-dnd-fix.patch
Parent Directory | Revision Log
Revision 144 -
(hide annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 2899 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 2899 byte(s)
-import
1 | niro | 144 | 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 | ||
6 | |||
7 | --- /branches/gtk-2-10/gtk/gtkdnd.c 2006/11/05 08:55:47 16711 | ||
8 | +++ branches/gtk-2-10/gtk/gtkdnd.c 2006/11/06 17:16:37 16712 | ||
9 | @@ -285,6 +285,9 @@ | ||
10 | static gboolean gtk_drag_grab_broken_event_cb (GtkWidget *widget, | ||
11 | GdkEventGrabBroken *event, | ||
12 | gpointer data); | ||
13 | +static void gtk_drag_grab_notify_cb (GtkWidget *widget, | ||
14 | + gboolean was_grabbed, | ||
15 | + gpointer data); | ||
16 | static gboolean gtk_drag_button_release_cb (GtkWidget *widget, | ||
17 | GdkEventButton *event, | ||
18 | gpointer data); | ||
19 | @@ -2331,6 +2334,8 @@ | ||
20 | |||
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", | ||
28 | @@ -3762,6 +3767,9 @@ | ||
29 | gtk_drag_grab_broken_event_cb, | ||
30 | info); | ||
31 | g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
32 | + gtk_drag_grab_notify_cb, | ||
33 | + info); | ||
34 | + g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
35 | gtk_drag_button_release_cb, | ||
36 | info); | ||
37 | g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
38 | @@ -3926,6 +3934,9 @@ | ||
39 | gtk_drag_grab_broken_event_cb, | ||
40 | info); | ||
41 | g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
42 | + gtk_drag_grab_notify_cb, | ||
43 | + info); | ||
44 | + g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
45 | gtk_drag_button_release_cb, | ||
46 | info); | ||
47 | g_signal_handlers_disconnect_by_func (info->ipc_widget, | ||
48 | @@ -4117,6 +4128,24 @@ | ||
49 | return TRUE; | ||
50 | } | ||
51 | |||
52 | +static void | ||
53 | +gtk_drag_grab_notify_cb (GtkWidget *widget, | ||
54 | + gboolean was_grabbed, | ||
55 | + gpointer data) | ||
56 | +{ | ||
57 | + GtkDragSourceInfo *info = (GtkDragSourceInfo *)data; | ||
58 | + | ||
59 | + if (!was_grabbed) | ||
60 | + { | ||
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); | ||
66 | + } | ||
67 | +} | ||
68 | + | ||
69 | + | ||
70 | /************************************************************* | ||
71 | * gtk_drag_button_release_cb: | ||
72 | * "button_release_event" callback during drag. |