Magellan Linux

Annotation of /trunk/gtk2+/patches/gtk2+-2.10.11-mozilla-dnd-fix.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 144 - (hide annotations) (download)
Tue May 8 20:06:05 2007 UTC (17 years, 1 month 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.