aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Common/UI/UIStructs.h
diff options
context:
space:
mode:
authordtentiion <dtentiongit@gmail.com>2026-03-05 20:57:37 +0000
committerGitHub <noreply@github.com>2026-03-05 14:57:37 -0600
commitaadb5115040cfe0199e79a3e32dada6aa4b99fda (patch)
tree7aba2ccfc2d3361272ad0380ec69c98a4f6c3efe /Minecraft.Client/Common/UI/UIStructs.h
parentf48a39ae3d72fc47ed3a050f6419716dc398d8f5 (diff)
Fix save list, delete save, exit without saving, and blank username on Windows64 (#539)
* Fix world save rename not applying new name KeyboardCompleteWorldNameCallback had no _WINDOWS64 branch, so the typed name was validated then silently discarded on every rename attempt. Write the new name to a worldname.txt sidecar file next to the save (Windows64\GameHDD\{folder}\worldname.txt) and update the in-memory display name immediately. ReadLevelNameFromSaveFile now checks for this sidecar first so renamed saves persist correctly across restarts. * Fixed gamertag being blank upon renaming and re-joining a save * Save deletion fix, exiting without saving fix * Add native in-game keyboard UI for world naming and renaming
Diffstat (limited to 'Minecraft.Client/Common/UI/UIStructs.h')
-rw-r--r--Minecraft.Client/Common/UI/UIStructs.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/Minecraft.Client/Common/UI/UIStructs.h b/Minecraft.Client/Common/UI/UIStructs.h
index c41f2276..ac83458f 100644
--- a/Minecraft.Client/Common/UI/UIStructs.h
+++ b/Minecraft.Client/Common/UI/UIStructs.h
@@ -282,6 +282,44 @@ typedef struct _JoinMenuInitData
int iPad;
} JoinMenuInitData;
+// Native keyboard (Windows64 replacement for InputManager.RequestKeyboard WinAPI dialog)
+#ifdef _WINDOWS64
+typedef struct _UIKeyboardInitData
+{
+ const wchar_t* title;
+ const wchar_t* defaultText;
+ int maxChars;
+ int(*callback)(LPVOID, const bool);
+ LPVOID lpParam;
+ bool pcMode; // When true, disables on-screen keyboard buttons (PC keyboard users only need the text field)
+
+ _UIKeyboardInitData() : title(nullptr), defaultText(nullptr), maxChars(25), callback(nullptr), lpParam(nullptr), pcMode(false) {}
+} UIKeyboardInitData;
+
+// Stores the text typed in UIScene_Keyboard so callbacks can retrieve it
+// without calling InputManager.GetText (which shows the WinAPI dialog result).
+extern wchar_t g_Win64KeyboardResult[256];
+inline void Win64_GetKeyboardText(uint16_t* outBuf, int maxChars)
+{
+ wcsncpy_s((wchar_t*)outBuf, maxChars, g_Win64KeyboardResult, _TRUNCATE);
+}
+
+// Returns true if any XInput controller is currently connected.
+// Used to decide whether to show the in-game keyboard UI or fall back to PC input.
+#include <Xinput.h>
+inline bool Win64_IsControllerConnected()
+{
+ XINPUT_STATE state;
+ for (DWORD i = 0; i < XUSER_MAX_COUNT; i++)
+ {
+ memset(&state, 0, sizeof(state));
+ if (XInputGetState(i, &state) == ERROR_SUCCESS)
+ return true;
+ }
+ return false;
+}
+#endif // _WINDOWS64
+
// More Options
typedef struct _LaunchMoreOptionsMenuInitData
{