ximagesink, xvimagesink: fix incorrect type conversion of pointer position
authorAkinobu Mita <akinobu.mita@gmail.com>
Sat, 2 Dec 2017 17:10:40 +0000 (02:10 +0900)
committerTim-Philipp Müller <tim@centricular.com>
Fri, 8 Dec 2017 00:48:16 +0000 (00:48 +0000)
I'm currently playing with modified ximagesink that does XGrabPointer()
in order to receive the mouse events occurred outside of the window and
send them to the navigation interface.

The pointer positions usually have positive coordinates, but it could
be negative with that change.

When the ximagesink handles XEvent that contains a negative pointer
coordinate, it incorrectly generates the GstEvent that contains an
extremely large positive pointer coordinate.

This is because the negative pointer position in XEvent is incorrectly
converted from signed to unsigned and passed as an argument to
gst_navigation_send_mouse_event() which causes implicit conversion from
integer to double.  So the pointer position in the received XEvent and
generated GstEvent are completely different.

This potential problem does not seem to be a real problem with unmodified
ximagesink but there is no reason to leave it as is.  This also fixes
xvimagesink that has the same potential problem.

https://bugzilla.gnome.org/show_bug.cgi?id=791140

sys/ximage/ximagesink.c
sys/xvimage/xvimagesink.c

index 9176ca6..e9615a2 100644 (file)
@@ -558,7 +558,7 @@ static void
 gst_x_image_sink_handle_xevents (GstXImageSink * ximagesink)
 {
   XEvent e;
-  guint pointer_x = 0, pointer_y = 0;
+  gint pointer_x = 0, pointer_y = 0;
   gboolean pointer_moved = FALSE;
   gboolean exposed = FALSE, configured = FALSE;
 
index 4ca0c11..72ff574 100644 (file)
@@ -407,7 +407,7 @@ static void
 gst_xv_image_sink_handle_xevents (GstXvImageSink * xvimagesink)
 {
   XEvent e;
-  guint pointer_x = 0, pointer_y = 0;
+  gint pointer_x = 0, pointer_y = 0;
   gboolean pointer_moved = FALSE;
   gboolean exposed = FALSE, configured = FALSE;