Skip to content

Commit 6eab3b0

Browse files
Merge pull request #496 from Hedgehogsoft/main
fix incorrect repeat value
2 parents 81bbed1 + 19d4925 commit 6eab3b0

File tree

1 file changed

+17
-21
lines changed

1 file changed

+17
-21
lines changed

RGFW.h

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3627,7 +3627,7 @@ void RGFW_keyCallback(RGFW_window* win, RGFW_key key, RGFW_keymod mod, RGFW_bool
36273627
_RGFW->keyboard[key].current = press;
36283628

36293629
event.key.value = key;
3630-
event.key.mod = repeat;
3630+
event.key.repeat = repeat;
36313631
event.key.mod = mod;
36323632
event.key.state = press;
36333633
event.common.win = win;
@@ -4285,7 +4285,7 @@ RGFW_bool RGFW_monitorModeCompare(RGFW_monitorMode* mon, RGFW_monitorMode* mon2,
42854285
}
42864286

42874287
RGFW_bool RGFW_window_shouldClose(RGFW_window* win) {
4288-
return (win == NULL || win->internal.shouldClose || (win->internal.exitKey && RGFW_window_isKeyDown(win, win->internal.exitKey)));
4288+
return (win == NULL || win->internal.shouldClose || (win->internal.exitKey && RGFW_isKeyDown(win->internal.exitKey)));
42894289
}
42904290

42914291
void RGFW_window_setShouldClose(RGFW_window* win, RGFW_bool shouldClose) {
@@ -4656,10 +4656,10 @@ void RGFW_keyUpdateKeyModsEx(RGFW_window* win, RGFW_bool capital, RGFW_bool numl
46564656

46574657
void RGFW_keyUpdateKeyMods(RGFW_window* win, RGFW_bool capital, RGFW_bool numlock, RGFW_bool scroll) {
46584658
RGFW_keyUpdateKeyModsEx(win, capital, numlock,
4659-
RGFW_window_isKeyDown(win, RGFW_keyControlL) || RGFW_window_isKeyDown(win, RGFW_keyControlR),
4660-
RGFW_window_isKeyDown(win, RGFW_keyAltL) || RGFW_window_isKeyDown(win, RGFW_keyAltR),
4661-
RGFW_window_isKeyDown(win, RGFW_keyShiftL) || RGFW_window_isKeyDown(win, RGFW_keyShiftR),
4662-
RGFW_window_isKeyDown(win, RGFW_keySuperL) || RGFW_window_isKeyDown(win, RGFW_keySuperR),
4659+
RGFW_isKeyDown(RGFW_keyControlL) || RGFW_isKeyDown(RGFW_keyControlR),
4660+
RGFW_isKeyDown(RGFW_keyAltL) || RGFW_isKeyDown(RGFW_keyAltR),
4661+
RGFW_isKeyDown(RGFW_keyShiftL) || RGFW_isKeyDown(RGFW_keyShiftR),
4662+
RGFW_isKeyDown(RGFW_keySuperL) || RGFW_isKeyDown(RGFW_keySuperR),
46634663
scroll);
46644664
}
46654665

@@ -6665,7 +6665,7 @@ void RGFW_XHandleEvent(void) {
66656665
XkbGetState(_RGFW->display, XkbUseCoreKbd, &state);
66666666
RGFW_keyUpdateKeyMods(win, (state.locked_mods & LockMask), (state.locked_mods & Mod2Mask), (state.locked_mods & Mod3Mask));
66676667

6668-
RGFW_keyCallback(win, value, win->internal.mod, keyRepeat, RGFW_FALSE);
6668+
RGFW_keyCallback(win, value, win->internal.mod, RGFW_FALSE, RGFW_FALSE);
66696669
break;
66706670
}
66716671
case ButtonPress: {
@@ -8875,7 +8875,7 @@ static void RGFW_wl_keyboard_key(void* data, struct wl_keyboard *keyboard, u32 s
88758875
RGFW_key RGFWkey = RGFW_apiKeyToRGFW(key + 8);
88768876

88778877
RGFW_keyUpdateKeyMods(RGFW_key_win, RGFW_BOOL(xkb_keymap_mod_get_index(RGFW->keymap, "Lock")), RGFW_BOOL(xkb_keymap_mod_get_index(RGFW->keymap, "Mod2")), RGFW_BOOL(xkb_keymap_mod_get_index(RGFW->keymap, "ScrollLock")));
8878-
RGFW_keyCallback(RGFW_key_win, (u8)RGFWkey, RGFW_key_win->internal.mod, RGFW_window_isKeyDown(RGFW_key_win, (u8)RGFWkey), RGFW_BOOL(state));
8878+
RGFW_keyCallback(RGFW_key_win, (u8)RGFWkey, RGFW_key_win->internal.mod, RGFW_isKeyDown((u8)RGFWkey) && RGFW_BOOL(state), RGFW_BOOL(state));
88798879

88808880
/* [comment by Kala Telo (@kala-telo) and edited by Riley Mabb (@ColleagueRiley)]
88818881
we send the event at the moment we receive it, and
@@ -10638,10 +10638,8 @@ LRESULT CALLBACK WndProcW(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
1063810638
else value = RGFW_keyControlL;
1063910639
}
1064010640

10641-
RGFW_bool repeat = ((lParam & 0x40000000) != 0) || RGFW_window_isKeyDown(win, value);
10642-
1064310641
RGFW_keyUpdateKeyMods(win, (GetKeyState(VK_CAPITAL) & 0x0001), (GetKeyState(VK_NUMLOCK) & 0x0001), (GetKeyState(VK_SCROLL) & 0x0001));
10644-
RGFW_keyCallback(win, value, win->internal.mod, repeat, RGFW_FALSE);
10642+
RGFW_keyCallback(win, value, win->internal.mod, RGFW_FALSE, RGFW_FALSE);
1064510643
break;
1064610644
}
1064710645
case WM_SYSKEYDOWN: case WM_KEYDOWN: {
@@ -10664,7 +10662,7 @@ LRESULT CALLBACK WndProcW(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
1066410662
else value = RGFW_keyControlL;
1066510663
}
1066610664

10667-
RGFW_bool repeat = ((lParam & 0x40000000) != 0) || RGFW_window_isKeyDown(win, value);
10665+
RGFW_bool repeat = RGFW_isKeyDown(value);
1066810666

1066910667
RGFW_keyUpdateKeyMods(win, (GetKeyState(VK_CAPITAL) & 0x0001), (GetKeyState(VK_NUMLOCK) & 0x0001), (GetKeyState(VK_SCROLL) & 0x0001));
1067010668
RGFW_keyCallback(win, value, win->internal.mod, repeat, 1);
@@ -13068,7 +13066,7 @@ static void RGFW__osxKeyDown(id self, SEL _cmd, id event) {
1306813066
u32 key = (u16)((u32(*)(id, SEL))objc_msgSend)(event, sel_registerName("keyCode"));
1306913067

1307013068
RGFW_key value = (u8)RGFW_apiKeyToRGFW(key);
13071-
RGFW_bool repeat = RGFW_window_isKeyPressed(win, value);
13069+
RGFW_bool repeat = RGFW_isKeyDown(value);
1307213070

1307313071
RGFW_keyCallback(win, value, win->internal.mod, repeat, 1);
1307413072

@@ -13090,9 +13088,8 @@ static void RGFW__osxKeyUp(id self, SEL _cmd, id event) {
1309013088
u32 key = (u16)((u32(*)(id, SEL))objc_msgSend)(event, sel_registerName("keyCode"));
1309113089

1309213090
RGFW_key value = (u8)RGFW_apiKeyToRGFW(key);
13093-
RGFW_bool repeat = RGFW_window_isKeyDown(win, (u8)value);
1309413091

13095-
RGFW_keyCallback(win, value, win->internal.mod, repeat, 0);
13092+
RGFW_keyCallback(win, value, win->internal.mod, RGFW_FALSE, 0);
1309613093
}
1309713094

1309813095
static void RGFW__osxFlagsChanged(id self, SEL _cmd, id event) {
@@ -13119,23 +13116,22 @@ static void RGFW__osxFlagsChanged(id self, SEL _cmd, id event) {
1311913116
for (i = 0; i < 5; i++) {
1312013117
u32 shift = (1 << (i + 16));
1312113118
RGFW_key key = i + RGFW_keyCapsLock;
13122-
if ((flags & shift) && !RGFW_window_isKeyDown(win, (u8)key)) {
13119+
if ((flags & shift) && !RGFW_isKeyDown((u8)key)) {
1312313120
pressed = RGFW_TRUE;
1312413121
value = (u8)key;
1312513122
break;
1312613123
}
13127-
if (!(flags & shift) && RGFW_window_isKeyDown(win, (u8)key)) {
13124+
if (!(flags & shift) && RGFW_isKeyDown((u8)key)) {
1312813125
pressed = RGFW_FALSE;
1312913126
value = (u8)key;
1313013127
break;
1313113128
}
1313213129
}
1313313130

13134-
RGFW_bool repeat = RGFW_window_isKeyDown(win, (u8)value);
13135-
RGFW_keyCallback(win, value, win->internal.mod, repeat, pressed);
13131+
RGFW_keyCallback(win, value, win->internal.mod, RGFW_isKeyDown(value) && pressed, pressed);
1313613132

1313713133
if (value != RGFW_keyCapsLock) {
13138-
RGFW_keyCallback(win, value + 4, win->internal.mod, repeat, pressed);
13134+
RGFW_keyCallback(win, value + 4, win->internal.mod, RGFW_isKeyDown(value + 4) && pressed, pressed);
1313913135
}
1314013136

1314113137
}
@@ -14773,7 +14769,7 @@ void EMSCRIPTEN_KEEPALIVE RGFW_handleKeyEvent(char* code, u32 codepoint, RGFW_bo
1477314769

1477414770
u32 physicalKey = RGFW_WASMPhysicalToRGFW(hash);
1477514771

14776-
RGFW_keyCallback(_RGFW->root, physicalKey, _RGFW->root->internal.mod, RGFW_window_isKeyDown(_RGFW->root, (u8)physicalKey), press);
14772+
RGFW_keyCallback(_RGFW->root, physicalKey, _RGFW->root->internal.mod, RGFW_isKeyDown((u8)physicalKey) && press, press);
1477714773
if (press) {
1477814774
; RGFW_keyCharCallback(_RGFW->root, codepoint);
1477914775
}

0 commit comments

Comments
 (0)