[evolution/wip/gsettings] Bug 652629 - GnomeCanvas: Disregard synthesized crossing events



commit 1282a20dbf79badef18101fb53cd364fcd2f352b
Author: Matthew Barnes <mbarnes redhat com>
Date:   Sun Jul 10 12:18:15 2011 -0400

    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 files changed, 7 insertions(+), 0 deletions(-)
---
diff --git a/libgnomecanvas/gnome-canvas.c b/libgnomecanvas/gnome-canvas.c
index a0ad066..cca3df0 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);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]