Skip to content

Commit cb04859

Browse files
committed
Workaround race-condition in wine that causes cursor recentering bug
1 parent f76da01 commit cb04859

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

jme3-lwjgl3/src/main/java/com/jme3/input/lwjgl/SdlMouseInput.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import com.jme3.input.event.MouseMotionEvent;
4040
import com.jme3.math.Vector2f;
4141
import com.jme3.system.AppSettings;
42+
import com.jme3.system.JmeSystem;
4243
import com.jme3.system.lwjgl.LwjglWindow;
4344
import com.jme3.util.BufferUtils;
4445
import java.nio.ByteBuffer;
@@ -94,6 +95,7 @@ public class SdlMouseInput implements MouseInput {
9495
private boolean cursorVisible = true;
9596
private boolean windowFocused = true;
9697
private boolean visibleCursorPositionValid;
98+
private boolean protonCursorRestorePending;
9799
private boolean initialized;
98100

99101
public SdlMouseInput(final LwjglWindow context) {
@@ -296,6 +298,12 @@ public int getButtonCount() {
296298

297299
@Override
298300
public void update() {
301+
if (protonCursorRestorePending && cursorVisible && windowFocused
302+
&& !SDL_GetWindowRelativeMouseMode(context.getWindowHandle())) {
303+
protonCursorRestorePending = false;
304+
restoreVisibleCursorPosition();
305+
}
306+
299307
if (currentCursor != null && currentCursor.length > 1) {
300308
long now = SDL_GetTicksNS();
301309
long frameTimeMs = (now - currentCursorFrameStartTimeNs) / 1_000_000L;
@@ -356,10 +364,12 @@ public void setCursorVisible(boolean visible) {
356364
if (!wasVisible) {
357365
if (restoreVisibleCursorPosition()) {
358366
queueMousePositionSyncEvent();
367+
protonCursorRestorePending = JmeSystem.getPlatform().isWineProton();
359368
}
360369
}
361370
SDL_SetWindowRelativeMouseMode(context.getWindowHandle(), false);
362371
} else {
372+
protonCursorRestorePending = false;
363373
if (wasVisible || !visibleCursorPositionValid) {
364374
saveVisibleCursorPosition();
365375
}

0 commit comments

Comments
 (0)