Skip to content

Commit b28d0ac

Browse files
committed
fix: 修复Boat后端1.21.9+无法使用Shift/Ctrl/Alt快捷键的问题 #1330
1 parent 3333eda commit b28d0ac

File tree

4 files changed

+30
-30
lines changed

4 files changed

+30
-30
lines changed

FCL/src/main/java/com/tungsten/fcl/control/FCLInput.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ public void sendKeyEvent(int keycode, boolean press) {
110110
if (MOUSE_MAP.containsKey(keycode) && MOUSE_MAP.get(keycode) != null) {
111111
menu.getBridge().pushEventMouseButton(MOUSE_MAP.get(keycode), press);
112112
} else {
113-
menu.getBridge().pushEventKey(keycode, 0, press);
114113
if (!FCLBridge.BACKEND_IS_BOAT) {
115-
int code = LwjglKeycodeMap.convertKeycode(keycode);
116-
if (code >= 0) {
117-
CallbackBridge.setModifiers(code, press);
118-
}
119114
}
115+
int code = LwjglKeycodeMap.convertKeycode(keycode);
116+
if (code >= 0) {
117+
CallbackBridge.setModifiers(code, press);
118+
}
119+
menu.getBridge().pushEventKey(keycode, 0, press);
120120
}
121121
}
122122
}

FCLauncher/src/main/java/com/tungsten/fclauncher/bridge/FCLBridge.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public FCLBridge() {
126126

127127
public native void setEventPipe();
128128

129-
public native void pushEvent(long time, int type, int keycode, int keyChar);
129+
public native void pushEvent(long time, int type, int keycode, int keyChar, int modifiers);
130130

131131
public static native int nativeGetFps();
132132

@@ -185,7 +185,7 @@ public void pushEventMouseButton(int button, boolean press) {
185185
} else if (button == Button3) {
186186
button = Button2;
187187
}
188-
pushEvent(System.nanoTime(), press ? ButtonPress : ButtonRelease, button + 1, 0);
188+
pushEvent(System.nanoTime(), press ? ButtonPress : ButtonRelease, button + 1, 0, CallbackBridge.getCurrentMods());
189189
} else {
190190
switch (button) {
191191
case Button4:
@@ -206,7 +206,7 @@ public void pushEventMouseButton(int button, boolean press) {
206206

207207
public void pushEventPointer(int x, int y) {
208208
if (BACKEND_IS_BOAT) {
209-
pushEvent(System.nanoTime(), MotionNotify, x, y);
209+
pushEvent(System.nanoTime(), MotionNotify, x, y, CallbackBridge.getCurrentMods());
210210
} else {
211211
CallbackBridge.sendCursorPos(x, y);
212212
}
@@ -222,30 +222,30 @@ public void pushEventPointer(float x, float y) {
222222

223223
public void pushEventKey(int keyCode, int keyChar, boolean press) {
224224
if (BACKEND_IS_BOAT) {
225-
pushEvent(System.nanoTime(), press ? KeyPress : KeyRelease, keyCode, keyChar);
225+
pushEvent(System.nanoTime(), press ? KeyPress : KeyRelease, keyCode, keyChar, CallbackBridge.getCurrentMods());
226226
} else {
227227
CallbackBridge.sendKeycode(keyCode, (char) keyChar, 0, CallbackBridge.getCurrentMods(), press);
228228
}
229229
}
230230

231231
public void pushEventChar(char keyChar) {
232232
if (BACKEND_IS_BOAT) {
233-
pushEvent(System.nanoTime(), KeyChar, FCLKeycodes.KEY_RESERVED, keyChar);
233+
pushEvent(System.nanoTime(), KeyChar, FCLKeycodes.KEY_RESERVED, keyChar, CallbackBridge.getCurrentMods());
234234
} else {
235235
CallbackBridge.sendChar(keyChar, 0);
236236
}
237237
}
238238

239239
public void pushEventWindow(int width, int height) {
240240
if (BACKEND_IS_BOAT) {
241-
pushEvent(System.nanoTime(), ConfigureNotify, width, height);
241+
pushEvent(System.nanoTime(), ConfigureNotify, width, height, 0);
242242
} else {
243243
CallbackBridge.sendUpdateWindowSize(width, height);
244244
}
245245
}
246246

247247
public void pushEventMessage(int msg) {
248-
pushEvent(System.nanoTime(), FCLMessage, msg, 0);
248+
pushEvent(System.nanoTime(), FCLMessage, msg, 0, 0);
249249
}
250250

251251
// FCLBridge callbacks

FCLauncher/src/main/jni/fcl/fcl_event.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ int fclPollEvent(FCLEvent* event) {
120120
return ret;
121121
}
122122

123-
JNIEXPORT void JNICALL Java_com_tungsten_fclauncher_bridge_FCLBridge_pushEvent(JNIEnv* env, jclass clazz, jlong time, jint type, jint p1, jint p2) {
123+
JNIEXPORT void JNICALL Java_com_tungsten_fclauncher_bridge_FCLBridge_pushEvent(JNIEnv* env, jclass clazz, jlong time, jint type, jint p1, jint p2, jint modifiers) {
124124
if (!fcl->has_event_pipe) {
125125
return;
126126
}
@@ -135,7 +135,7 @@ JNIEXPORT void JNICALL Java_com_tungsten_fclauncher_bridge_FCLBridge_pushEvent(J
135135
}
136136
event->time = time;
137137
event->type = type;
138-
event->state = 0;
138+
event->state = modifiers;
139139
switch (type) {
140140
case KeyChar:
141141
event->keychar = p2;

FCLauncher/src/main/jni/glfw/fcl_window.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,22 @@
2020
//
2121
static int translateState(int state)
2222
{
23-
int mods = 0;
24-
25-
if (state & ShiftMask)
26-
mods |= GLFW_MOD_SHIFT;
27-
if (state & ControlMask)
28-
mods |= GLFW_MOD_CONTROL;
29-
if (state & Mod1Mask)
30-
mods |= GLFW_MOD_ALT;
31-
if (state & Mod4Mask)
32-
mods |= GLFW_MOD_SUPER;
33-
if (state & LockMask)
34-
mods |= GLFW_MOD_CAPS_LOCK;
35-
if (state & Mod2Mask)
36-
mods |= GLFW_MOD_NUM_LOCK;
37-
38-
return mods;
23+
// int mods = 0;
24+
//
25+
// if (state & ShiftMask)
26+
// mods |= GLFW_MOD_SHIFT;
27+
// if (state & ControlMask)
28+
// mods |= GLFW_MOD_CONTROL;
29+
// if (state & Mod1Mask)
30+
// mods |= GLFW_MOD_ALT;
31+
// if (state & Mod4Mask)
32+
// mods |= GLFW_MOD_SUPER;
33+
// if (state & LockMask)
34+
// mods |= GLFW_MOD_CAPS_LOCK;
35+
// if (state & Mod2Mask)
36+
// mods |= GLFW_MOD_NUM_LOCK;
37+
38+
return state;
3939
}
4040

4141
// Translates an FCL key code to a GLFW key token

0 commit comments

Comments
 (0)