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)
commit6e770e0ebbc9b36fa06a9a3a7b485ee1e8ea97e5
tree3b7b6b720175fa155e02b6a25d5c64b2ac09a9b7
parent32eae2b166064f134ef0ac6bcda65e5cd41b4efb
ximagesink, xvimagesink: fix incorrect type conversion of pointer position

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