From 6c5c560dc785153a550d535da3e9fcbae576617b Mon Sep 17 00:00:00 2001 From: VDm Date: Sat, 2 Aug 2025 18:42:09 +0400 Subject: [PATCH] fix(ui): implement key repeating (e.g. backspace) for CSimpleEditBox --- src/ui/CSimpleEditBox.cpp | 17 +++++++++++++++++ src/ui/CSimpleEditBox.hpp | 1 + 2 files changed, 18 insertions(+) diff --git a/src/ui/CSimpleEditBox.cpp b/src/ui/CSimpleEditBox.cpp index eaee9fc..1d62d60 100644 --- a/src/ui/CSimpleEditBox.cpp +++ b/src/ui/CSimpleEditBox.cpp @@ -891,6 +891,23 @@ int32_t CSimpleEditBox::OnLayerKeyDown(const CKeyEvent& evt) { } } +int32_t CSimpleEditBox::OnLayerKeyDownRepeat(const CKeyEvent& evt) { + if (!this->m_visible) { + return 0; + } + + if (!CSimpleEditBox::s_currentFocus && this->m_autoFocus) { + CSimpleEditBox::SetKeyboardFocus(this); + return this->OnLayerKeyDown(evt); + } + + if (this == CSimpleEditBox::s_currentFocus) { + return this->OnLayerKeyDown(evt); + } + + return 0; +} + int32_t CSimpleEditBox::OnLayerMouseDown(const CMouseEvent& evt, const char* btn) { int32_t eaten = CSimpleFrame::OnLayerMouseDown(evt, btn); diff --git a/src/ui/CSimpleEditBox.hpp b/src/ui/CSimpleEditBox.hpp index 7a3ed72..e1ae8a1 100644 --- a/src/ui/CSimpleEditBox.hpp +++ b/src/ui/CSimpleEditBox.hpp @@ -72,6 +72,7 @@ class CSimpleEditBox : public CSimpleFrame, CSimpleFontedFrame { virtual void OnFrameSizeChanged(float width, float height); virtual int32_t OnLayerChar(const CCharEvent& evt); virtual int32_t OnLayerKeyDown(const CKeyEvent& evt); + virtual int32_t OnLayerKeyDownRepeat(const CKeyEvent& evt); virtual int32_t OnLayerMouseDown(const CMouseEvent& evt, const char* btn); virtual int32_t OnLayerMouseUp(const CMouseEvent& evt, const char* btn); virtual void FontUpdated(CSimpleFontedFrameFont* font, int32_t a3);