From 87ad07f2984dd0dc3236886b4cb1cd619238ed79 Mon Sep 17 00:00:00 2001 From: Marcus Minhorst Date: Sat, 26 Jul 2025 17:59:42 -0400 Subject: [PATCH] Added SDL HoldingQueryKey implemenation Co-authored-by: Boondorl --- src/common/platform/posix/sdl/i_system.cpp | 32 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/common/platform/posix/sdl/i_system.cpp b/src/common/platform/posix/sdl/i_system.cpp index d7e22034f..6c9beb5d1 100644 --- a/src/common/platform/posix/sdl/i_system.cpp +++ b/src/common/platform/posix/sdl/i_system.cpp @@ -79,7 +79,7 @@ int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad #endif double PerfToSec, PerfToMillisec; -CVAR(String, queryiwad_key, "", CVAR_GLOBALCONFIG | CVAR_ARCHIVE); // Currently unimplemented. +CVAR(String, queryiwad_key, "shift", CVAR_GLOBALCONFIG | CVAR_ARCHIVE); CVAR(Bool, con_printansi, true, CVAR_GLOBALCONFIG|CVAR_ARCHIVE); CVAR(Bool, con_4bitansi, false, CVAR_GLOBALCONFIG|CVAR_ARCHIVE); EXTERN_CVAR(Bool, longsavemessages) @@ -305,8 +305,34 @@ void I_PrintStr(const char *cp) bool HoldingQueryKey(const char* key) { - // TODO: Implement - return false; + int code = 0; + + if (!stricmp(key, "shift")) + code = SDL_SCANCODE_LSHIFT; + else if (!stricmp(key, "control") || !stricmp(key, "ctrl")) + code = SDL_SCANCODE_LCTRL; + + if (!code) return false; + + auto window = SDL_CreateWindow( + "HoldingQueryKey", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + 1, 1, + SDL_WINDOW_HIDDEN + ); + + if (!window) return false; + + SDL_PumpEvents(); + + auto keys = SDL_GetKeyboardState(nullptr); + bool state = (code == SDL_SCANCODE_LCTRL && (keys[SDL_SCANCODE_LCTRL] || keys[SDL_SCANCODE_RCTRL])) + || (code == SDL_SCANCODE_LSHIFT && (keys[SDL_SCANCODE_LSHIFT] || keys[SDL_SCANCODE_RSHIFT])); + + SDL_DestroyWindow(window); + + return state; } bool I_PickIWad (bool showwin, FStartupSelectionInfo& info)