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.
This commit is contained in:
Matthew Barnes
2011-07-10 12:18:15 -04:00
committed by Rodrigo Moya
parent 3f74670d94
commit 1282a20dbf

View File

@ -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);
}