Looking at vino-server with ltrace, it seems that XTestFakeMotionEvent() is called correctly:
gdk_screen_get_number(0x9dac108, 446, 0xbff06e78, 0x8057e99, 0x9df7000) = 0 XTestFakeMotionEvent(0x9d9ebe0, 0, 351, 446, 0) = 1 poll(0xbff06f08, 1, 0, 1, 45) = 1 read(18, "\005", 1) = 1 read(18, "", 5) = 5 g_type_check_instance_cast(0x9df7000, 0x9dfe7d0, 0xbff06e78, 0x8064207, 0x9e2a1c 0) = 0x9df7000 gdk_screen_get_display(0x9dac108, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = 0x9da 9010 gdk_x11_display_get_xdisplay(0x9da9010, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = 0x9d9ebe0 gdk_screen_get_number(0x9dac108, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = 0 XTestFakeMotionEvent(0x9d9ebe0, 0, 377, 464, 0) = 1 poll(0xbff06f08, 1, 0, 1, 45) = 1
... and so on.
Using the xevent app from http://www.isv.uu.se/~ziemann/xevent/ then shows that XTestFakeMotionEvent() always sets the mouse to upper left corner, while XTestFakeRelativeMotionEvent() works correctly. Maybe a bug in the new X server?
Looking at vino-server with ltrace, it seems that XTestFakeMotion Event() is called correctly:
gdk_screen_ get_number( 0x9dac108, 446, 0xbff06e78, 0x8057e99, 0x9df7000) = 0 Event(0x9d9ebe0 , 0, 351, 446, 0) = 1 check_instance_ cast(0x9df7000, 0x9dfe7d0, 0xbff06e78, 0x8064207, 0x9e2a1c get_display( 0x9dac108, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = 0x9da display_ get_xdisplay( 0x9da9010, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = get_number( 0x9dac108, 464, 0xbff06e78, 0x8057e99, 0x9df7000) = 0 Event(0x9d9ebe0 , 0, 377, 464, 0) = 1
XTestFakeMotion
poll(0xbff06f08, 1, 0, 1, 45) = 1
read(18, "\005", 1) = 1
read(18, "", 5) = 5
g_type_
0) = 0x9df7000
gdk_screen_
9010
gdk_x11_
0x9d9ebe0
gdk_screen_
XTestFakeMotion
poll(0xbff06f08, 1, 0, 1, 45) = 1
... and so on.
Using the xevent app from http:// www.isv. uu.se/~ ziemann/ xevent/ then shows that XTestFakeMotion Event() always sets the mouse to upper left corner, while XTestFakeRelati veMotionEvent( ) works correctly. Maybe a bug in the new X server?