diff --git a/src/java/org/lwjgl/opengl/AWTUtil.java b/src/java/org/lwjgl/opengl/AWTUtil.java index 07456e3c..b287d5e1 100644 --- a/src/java/org/lwjgl/opengl/AWTUtil.java +++ b/src/java/org/lwjgl/opengl/AWTUtil.java @@ -108,8 +108,9 @@ final class AWTUtil { public static void setCursorPosition(Component component, Robot robot, int x, int y) { if (robot != null) { - int transformed_x = component.getX() + x; - int transformed_y = component.getY() + component.getHeight() - 1 - y; + Point location = component.getLocationOnScreen(); + int transformed_x = location.x + x; + int transformed_y = location.y + component.getHeight() - 1 - y; robot.mouseMove(transformed_x, transformed_y); } } diff --git a/src/java/org/lwjgl/opengl/LinuxAWTInput.java b/src/java/org/lwjgl/opengl/LinuxAWTInput.java index fe655802..aad3b1df 100644 --- a/src/java/org/lwjgl/opengl/LinuxAWTInput.java +++ b/src/java/org/lwjgl/opengl/LinuxAWTInput.java @@ -117,7 +117,7 @@ final class LinuxAWTInput extends AbstractAWTInput { try { LinuxPeerInfo linux_peer_info = (LinuxPeerInfo)peer_info; long new_window = linux_peer_info.getDrawable(); - if (new_window != cached_window) { + if (cached_mouse == null || new_window != cached_window) { ungrabInput(); cached_window = new_window; try { diff --git a/src/java/org/lwjgl/opengl/MacOSXDisplay.java b/src/java/org/lwjgl/opengl/MacOSXDisplay.java index 646c0e12..a45a5001 100644 --- a/src/java/org/lwjgl/opengl/MacOSXDisplay.java +++ b/src/java/org/lwjgl/opengl/MacOSXDisplay.java @@ -321,7 +321,7 @@ final class MacOSXDisplay implements DisplayImplementation { } public void setCursorPosition(int x, int y) { - AWTUtil.setCursorPosition(frame, robot, x, y); + AWTUtil.setCursorPosition(frame.getCanvas(), robot, x, y); } public void setNativeCursor(Object handle) throws LWJGLException {