From 3980cd813a35be50231bf2d593c36790364eeba9 Mon Sep 17 00:00:00 2001 From: Revela Date: Mon, 16 Mar 2026 10:36:46 -0500 Subject: [PATCH] Add Ctrl+V clipboard paste to UIControl_TextInput and UIScene_Keyboard Previously paste only worked in the chat screen. Wire Screen::getClipboard() into the two remaining text input paths so Ctrl+V works for sign editing, seed entry, server IP/port, and world name fields. --- .../Common/UI/UIControl_TextInput.cpp | 16 +++++++++++++ .../Common/UI/UIScene_Keyboard.cpp | 23 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/Minecraft.Client/Common/UI/UIControl_TextInput.cpp b/Minecraft.Client/Common/UI/UIControl_TextInput.cpp index 8e679b7c..422d8672 100644 --- a/Minecraft.Client/Common/UI/UIControl_TextInput.cpp +++ b/Minecraft.Client/Common/UI/UIControl_TextInput.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "UI.h" #include "UIControl_TextInput.h" +#include "..\..\Screen.h" UIControl_TextInput::UIControl_TextInput() { @@ -211,6 +212,21 @@ UIControl_TextInput::EDirectEditResult UIControl_TextInput::tickDirectEdit() } } + // Paste from clipboard + if (g_KBMInput.IsKeyPressed('V') && g_KBMInput.IsKeyDown(VK_CONTROL)) + { + wstring pasted = Screen::getClipboard(); + for (size_t i = 0; i < pasted.length(); i++) + { + wchar_t pc = pasted[i]; + if (pc < 0x20) continue; // skip control characters + if (m_iCharLimit > 0 && (int)m_editBuffer.length() >= m_iCharLimit) break; + m_editBuffer.insert(m_iCursorPos, 1, pc); + m_iCursorPos++; + changed = true; + } + } + // Arrow keys, Home, End, Delete for cursor movement if (g_KBMInput.IsKeyPressed(VK_LEFT) && m_iCursorPos > 0) { diff --git a/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp b/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp index 2f2f9132..1cdb22a5 100644 --- a/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp +++ b/Minecraft.Client/Common/UI/UIScene_Keyboard.cpp @@ -1,6 +1,7 @@ #include "stdafx.h" #include "UI.h" #include "UIScene_Keyboard.h" +#include "..\..\Screen.h" #ifdef _WINDOWS64 // Global buffer that stores the text entered in the native keyboard scene. @@ -224,6 +225,28 @@ void UIScene_Keyboard::tick() } } + // Paste from clipboard + if (g_KBMInput.IsKeyPressed('V') && g_KBMInput.IsKeyDown(VK_CONTROL)) + { + wstring pasted = Screen::getClipboard(); + for (size_t i = 0; i < pasted.length(); i++) + { + wchar_t pc = pasted[i]; + if (pc < 0x20) continue; // skip control characters + if (static_cast(m_win64TextBuffer.length()) >= m_win64MaxChars) break; + if (m_bPCMode) + { + m_win64TextBuffer.insert(m_iCursorPos, 1, pc); + m_iCursorPos++; + } + else + { + m_win64TextBuffer += pc; + } + changed = true; + } + } + if (m_bPCMode) { // Arrow keys, Home, End, Delete for cursor movement