Index: src/x/xmousenu.c
===================================================================
--- src/x/xmousenu.c	(revision 11745)
+++ src/x/xmousenu.c	(working copy)
@@ -192,21 +192,18 @@
 
    ALLEGRO_SYSTEM_XGLX *system = (void *)al_system_driver();
    Display *display = system->x11display;
+   ALLEGRO_DISPLAY_XGLX *d = (void *)al_get_current_display();
 
    int window_width = al_get_display_width();
    int window_height = al_get_display_height();
    if (x < 0 || y < 0 || x >= window_width || y >= window_height)
       return false;
 
-   int new_x = x;
-   int new_y = y;
-   int dx = new_x - the_mouse.state.x;
-   int dy = new_y - the_mouse.state.y;
+   _al_mutex_lock(&system->lock);
+   XWarpPointer(display, None, d->window, 0, 0, 0, 0, x, y);
+   _al_mutex_unlock(&system->lock);
+   
 
-   if (dx != 0 || dy != 0) {
-      XWarpPointer(display, None, None, 0, 0, 0, 0, dx, dy);
-   }
-
    return true;
 }
 
