From a0262bd08bd76da4d86575602075811c0078b431 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Fri, 4 Mar 2022 08:21:05 +0700 Subject: [PATCH] Update GLFW window state (hover, visibility) This fixes DynamicFPS mod being broken --- .../src/main/assets/components/lwjgl3/version | 2 +- .../net/kdt/pojavlaunch/BaseMainActivity.java | 14 ++++++++++++++ .../net/kdt/pojavlaunch/LWJGLGLFWKeycode.java | 5 ++++- .../java/org/lwjgl/glfw/CallbackBridge.java | 3 ++- .../src/main/jni/input_bridge_v3.c | 18 ++++++++++++++++++ .../src/main/java/org/lwjgl/glfw/GLFW.java | 4 +++- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/version b/app_pojavlauncher/src/main/assets/components/lwjgl3/version index e5b42f549..bdd22c5d4 100644 --- a/app_pojavlauncher/src/main/assets/components/lwjgl3/version +++ b/app_pojavlauncher/src/main/assets/components/lwjgl3/version @@ -1 +1 @@ -20220228 +20220304 diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java index ea46a30bb..49ef73fd7 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/BaseMainActivity.java @@ -152,6 +152,7 @@ public class BaseMainActivity extends BaseActivity { final int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; final View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility(uiOptions); + CallbackBridge.nativeSetWindowAttrib(LWJGLGLFWKeycode.GLFW_HOVERED, 1); } @Override @@ -159,10 +160,23 @@ public class BaseMainActivity extends BaseActivity { if (CallbackBridge.isGrabbing()){ sendKeyPress(LWJGLGLFWKeycode.GLFW_KEY_ESCAPE); } + CallbackBridge.nativeSetWindowAttrib(LWJGLGLFWKeycode.GLFW_HOVERED, 0); mIsResuming = false; super.onPause(); } + @Override + protected void onStart() { + super.onStart(); + CallbackBridge.nativeSetWindowAttrib(LWJGLGLFWKeycode.GLFW_VISIBLE, 1); + } + + @Override + protected void onStop() { + CallbackBridge.nativeSetWindowAttrib(LWJGLGLFWKeycode.GLFW_VISIBLE, 0); + super.onStop(); + } + public static void fullyExit() { android.os.Process.killProcess(android.os.Process.myPid()); } diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LWJGLGLFWKeycode.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LWJGLGLFWKeycode.java index 5482b01f6..1f1d4ede0 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LWJGLGLFWKeycode.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/LWJGLGLFWKeycode.java @@ -195,5 +195,8 @@ public class LWJGLGLFWKeycode GLFW_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1, GLFW_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2, GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3; - + + public static final int + GLFW_VISIBLE = 0x20004, + GLFW_HOVERED = 0x2000B; } diff --git a/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java index 7a3d20552..bdaf7e1bf 100644 --- a/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -211,7 +211,8 @@ public class CallbackBridge { private static native void nativeSendMouseButton(int button, int action, int mods); private static native void nativeSendScroll(double xoffset, double yoffset); private static native void nativeSendScreenSize(int width, int height); - + public static native void nativeSetWindowAttrib(int attrib, int value); + public static native boolean nativeIsGrabbing(); static { System.loadLibrary("pojavexec"); diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index b9df89e76..59e2306fd 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -363,3 +363,21 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScroll(JNIEn JNIEXPORT void JNICALL Java_org_lwjgl_glfw_GLFW_nglfwSetShowingWindow(JNIEnv* env, jclass clazz, jlong window) { showingWindow = (long) window; } + +JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetWindowAttrib(JNIEnv* env, jclass clazz, jint attrib, jint value) { + if (!showingWindow) { + return; // nothing to do yet + } + + jclass glfwClazz = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, "org/lwjgl/glfw/GLFW"); + assert(glfwClazz != NULL); + jmethodID glfwMethod = (*runtimeJNIEnvPtr_JRE)->GetStaticMethodID(runtimeJNIEnvPtr_JRE, glfwMethod, "glfwSetWindowAttrib", "(JII)V"); + assert(glfwMethod != NULL); + + (*runtimeJNIEnvPtr_JRE)->CallStaticVoidMethod( + runtimeJNIEnvPtr_JRE, + glfwClazz, glfwMethod, + (jlong) showingWindow, attrib, value + ); +} + diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java index 930f51a8b..1b15369b2 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java @@ -995,9 +995,11 @@ public class GLFW win.width = mGLFWWindowWidth; win.height = mGLFWWindowHeight; - win.title = title; + win.windowAttribs.put(GLFW_HOVERED, 1); + win.windowAttribs.put(GLFW_VISIBLE, 1); + mGLFWWindowMap.put(ptr, win); mainContext = ptr; return ptr;