From 1282a20dbf79badef18101fb53cd364fcd2f352b Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 10 Jul 2011 12:18:15 -0400 Subject: Bug 652629 - GnomeCanvas: Disregard synthesized crossing events synth_crossing() in gtkwidget.c does not set valid pointer coordinates, but GnomeCanvas relies on these coordinates to figure out what canvas item the event applies to. Detect these synthesized GDK_ENTER_NOTIFY and GDK_LEAVE_NOTIFY events and disregard them. This was breaking drag-and-drop of EMinicards and probably elsewhere. --- libgnomecanvas/gnome-canvas.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libgnomecanvas/gnome-canvas.c b/libgnomecanvas/gnome-canvas.c index a0ad066f44..cca3df0e56 100644 --- a/libgnomecanvas/gnome-canvas.c +++ b/libgnomecanvas/gnome-canvas.c @@ -2736,6 +2736,13 @@ gnome_canvas_crossing (GtkWidget *widget, GdkEventCrossing *event) if (event->window != bin_window) return FALSE; + /* XXX Detect and disregard synthesized crossing events generated + * by synth_crossing() in gtkwidget.c. The pointer coordinates + * are invalid and pick_current_item() relies on them. */ + if (event->x == 0 && event->y == 0 && + event->x_root == 0 && event->y_root == 0) + return FALSE; + canvas->state = event->state; return pick_current_item (canvas, (GdkEvent *) event); } -- cgit