diff --git a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/songsearch.lua b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/songsearch.lua index 47d3c713f2..baa5e8f278 100644 --- a/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/songsearch.lua +++ b/Themes/Til Death/BGAnimations/ScreenSelectMusic decorations/songsearch.lua @@ -1,10 +1,11 @@ local searchstring = "" -local englishes = {"a", "b", "c", "d", "e","f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",";"} +local englishes = {"?","-",".",",","1","2","3","4","5","6","7","8","9","0","a", "b", "c", "d", "e","f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",";"} local frameX = 10 local frameY = 180+capWideScale(get43size(120),120) local active = false local whee local lastsearchstring = "" +local CtrlPressed = false local function searchInput(event) if event.type ~= "InputEventType_Release" and active == true then @@ -25,7 +26,9 @@ local function searchInput(event) elseif event.DeviceInput.button == "DeviceButton_delete" then searchstring = "" elseif event.DeviceInput.button == "DeviceButton_=" then - searchstring = searchstring.."=" + searchstring = searchstring.."=" + elseif event.DeviceInput.button == "DeviceButton_v" and CtrlPressed then + searchstring = searchstring..HOOKS:GetClipboard() else for i=1,#englishes do -- add standard characters to string if event.DeviceInput.button == "DeviceButton_"..englishes[i] then @@ -39,6 +42,13 @@ local function searchInput(event) lastsearchstring = searchstring end end + if event.DeviceInput.button == "DeviceButton_right ctrl" or event.DeviceInput.button == "DeviceButton_left ctrl" then + if event.type == "InputEventType_Release" then + CtrlPressed = false + else + CtrlPressed = true + end + end end local t = Def.ActorFrame{ diff --git a/src/ScreenNetSelectBase.cpp b/src/ScreenNetSelectBase.cpp index 80cab07e9c..8c8aaf1065 100644 --- a/src/ScreenNetSelectBase.cpp +++ b/src/ScreenNetSelectBase.cpp @@ -17,6 +17,7 @@ #include "Font.h" #include "RageDisplay.h" #include "PlayerState.h" +#include "arch/ArchHooks/ArchHooks.h" #define CHAT_TEXT_OUTPUT_WIDTH THEME->GetMetricF(m_sName,"ChatTextOutputWidth") #define CHAT_TEXT_INPUT_WIDTH THEME->GetMetricF(m_sName,"ChatTextInputWidth") @@ -91,8 +92,15 @@ bool ScreenNetSelectBase::Input(const InputEventPlus &input) //If holding control skip chatbox input //This allows lua input bindings to work on regular keys+control - if(bHoldingCtrl) + if(bHoldingCtrl) { + wchar_t ch = INPUTMAN->DeviceInputToChar(input.DeviceI, false); + MakeUpper(&ch, 1); + if (ch == 'V') + { + PasteClipboard(); + } return ScreenWithMenuElements::Input(input); + } switch(input.DeviceI.button) { @@ -130,6 +138,7 @@ bool ScreenNetSelectBase::Input(const InputEventPlus &input) UpdateTextInput(); break; default: + wchar_t c; c = INPUTMAN->DeviceInputToChar(input.DeviceI, true); @@ -180,7 +189,13 @@ void ScreenNetSelectBase::TweenOffScreen() void ScreenNetSelectBase::UpdateTextInput() { - m_textChatInput.SetText( m_sTextInput ); + m_textChatInput.SetText(m_sTextInput); +} + +void ScreenNetSelectBase::PasteClipboard() +{ + m_sTextInput.append(HOOKS->GetClipboard() ); + UpdateTextInput(); } void ScreenNetSelectBase::UpdateUsers() @@ -813,6 +828,11 @@ class LunaScreenNetSelectBase : public Luna lua_pushnumber(L, p->GetLines()); return 1; } + static int PasteClipboard(T* p, lua_State *L) + { + p->PasteClipboard(); + return 1; + } public: LunaScreenNetSelectBase() { @@ -831,6 +851,7 @@ class LunaScreenNetSelectBase : public Luna ADD_METHOD(ShowPreviousMsg); ADD_METHOD(GetChatScroll); ADD_METHOD(GetChatLines); + ADD_METHOD(PasteClipboard); } }; diff --git a/src/ScreenNetSelectBase.h b/src/ScreenNetSelectBase.h index 8d2012d4d6..cefe18e90b 100644 --- a/src/ScreenNetSelectBase.h +++ b/src/ScreenNetSelectBase.h @@ -56,6 +56,7 @@ class ScreenNetSelectBase : public ScreenWithMenuElements void ShowNextMsg(); unsigned int GetScroll() { return scroll; } unsigned int GetLines() { return m_textChatOutput.lines; } + void PasteClipboard(); // Lua void PushSelf(lua_State *L) override; private: