From add8505a5be644103567003031c789580113ae25 Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Mon, 6 Feb 2012 10:53:28 -0200 Subject: [PATCH] implement auto repeat configuration for key press events, to give more flexibility --- modules/client_entergame/characterlist.lua | 7 +- .../client_modulemanager/modulemanager.lua | 3 + modules/core_lib/hotkeys.lua | 134 ------------------ modules/core_lib/keyboard.lua | 18 +-- modules/core_widgets/uipopupmenu.lua | 3 +- modules/core_widgets/uiwindow.lua | 3 +- modules/game/game.lua | 3 +- src/framework/core/inputevent.h | 4 +- src/framework/luafunctions.cpp | 2 + src/framework/platform/platformwindow.cpp | 4 +- src/framework/platform/platformwindow.h | 1 - src/framework/ui/uilineedit.cpp | 51 ++++--- src/framework/ui/uilineedit.h | 2 +- src/framework/ui/uimanager.cpp | 2 +- src/framework/ui/uiwidget.cpp | 14 +- src/framework/ui/uiwidget.h | 7 +- src/otclient/ui/uigame.cpp | 6 +- src/otclient/ui/uigame.h | 2 +- 18 files changed, 68 insertions(+), 198 deletions(-) delete mode 100644 modules/core_lib/hotkeys.lua diff --git a/modules/client_entergame/characterlist.lua b/modules/client_entergame/characterlist.lua index 516c871b..10b22dc1 100644 --- a/modules/client_entergame/characterlist.lua +++ b/modules/client_entergame/characterlist.lua @@ -6,14 +6,13 @@ local loadBox local characterList -- private functions -local function onCharactersWindowKeyPress(self, keyCode, keyboardModifiers, wouldFilter) - if wouldFilter then return end +local function onCharactersWindowKeyPress(self, keyCode, keyboardModifiers) if keyboardModifiers == KeyboardNoModifier then if keyCode == KeyUp then - characterList:focusPreviousChild(ActiveFocusReason) + characterList:focusPreviousChild(KeyboardFocusReason) return true elseif keyCode == KeyDown or keyCode == KeyTab then - characterList:focusNextChild(ActiveFocusReason) + characterList:focusNextChild(KeyboardFocusReason) return true end end diff --git a/modules/client_modulemanager/modulemanager.lua b/modules/client_modulemanager/modulemanager.lua index c1cf41da..a0071d45 100644 --- a/modules/client_modulemanager/modulemanager.lua +++ b/modules/client_modulemanager/modulemanager.lua @@ -13,6 +13,9 @@ function ModuleManager.init() ModuleManager.updateModuleInfo(focusedChild:getText()) end }) + Keyboard.bindKeyPress('Up', function() moduleList:focusPreviousChild(KeyboardFocusReason) end, moduleManagerWindow) + Keyboard.bindKeyPress('Down', function() moduleList:focusNextChild(KeyboardFocusReason) end, moduleManagerWindow) + moduleManagerButton = TopMenu.addButton('moduleManagerButton', 'Module manager', 'modulemanager.png', ModuleManager.toggle) addEvent(ModuleManager.listModules) diff --git a/modules/core_lib/hotkeys.lua b/modules/core_lib/hotkeys.lua deleted file mode 100644 index caefe721..00000000 --- a/modules/core_lib/hotkeys.lua +++ /dev/null @@ -1,134 +0,0 @@ -Hotkeys = {} - --- private functions -local function translateKeyCombo(keyCombo) - if not keyCombo or #keyCombo == 0 then return nil end - table.sort(keyCombo) - local keyComboDesc = '' - for k,v in pairs(keyCombo) do - local keyDesc = KeyCodeDescs[v] - if keyDesc == nil then return nil end - keyComboDesc = keyComboDesc .. '+' .. keyDesc - end - keyComboDesc = keyComboDesc:sub(2) - return keyComboDesc -end - -local function retranslateKeyComboDesc(keyComboDesc) - if keyComboDesc == nil then return nil end - local keyCombo = {} - for i,currentKeyDesc in ipairs(keyComboDesc:split('+')) do - for keyCode, keyDesc in pairs(KeyCodeDescs) do - if keyDesc:lower() == currentKeyDesc:trim():lower() then - table.insert(keyCombo, keyCode) - end - end - end - return translateKeyCombo(keyCombo) -end - -local function determineKeyComboDesc(keyCode, keyboardModifiers) - local keyCombo = {} - if keyCode == KeyCtrl or keyCode == KeyShift or keyCode == KeyAlt then - table.insert(keyCombo, keyCode) - elseif KeyCodeDescs[keyCode] ~= nil then - if keyboardModifiers == KeyboardCtrlModifier then - table.insert(keyCombo, KeyCtrl) - elseif keyboardModifiers == KeyboardAltModifier then - table.insert(keyCombo, KeyAlt) - elseif keyboardModifiers == KeyboardCtrlAltModifier then - table.insert(keyCombo, KeyCtrl) - table.insert(keyCombo, KeyAlt) - elseif keyboardModifiers == KeyboardShiftModifier then - table.insert(keyCombo, KeyShift) - elseif keyboardModifiers == KeyboardCtrlShiftModifier then - table.insert(keyCombo, KeyCtrl) - table.insert(keyCombo, KeyShift) - elseif keyboardModifiers == KeyboardAltShiftModifier then - table.insert(keyCombo, KeyAlt) - table.insert(keyCombo, KeyShift) - elseif keyboardModifiers == KeyboardCtrlAltShiftModifier then - table.insert(keyCombo, KeyCtrl) - table.insert(keyCombo, KeyAlt) - table.insert(keyCombo, KeyShift) - end - table.insert(keyCombo, keyCode) - end - table.sort(keyCombo) - return translateKeyCombo(keyCombo) -end - -local function onWidgetKeyDown(widget, keyCode, keyboardModifiers) - if keyCode == KeyUnknown then return end - local keyComboDesc = determineKeyComboDesc(keyCode, keyboardModifiers) - local callback = widget.boundKeyDownCombos[keyComboDesc] - if callback then - callback() - return true - end - return false -end - -local function onWidgetKeyPress(widget, keyCode, keyboardModifiers, wouldFilter) - local keyComboDesc = determineKeyComboDesc(keyCode, keyboardModifiers) - if keyCode == KeyUnknown then return end - local callback = widget.boundKeyPressCombos[keyComboDesc] - if callback then - callback() - return true - end - return false -end - -local function connectKeyDownEvent(widget) - if widget.boundKeyDownCombos then return end - connect(widget, { onKeyDown = onWidgetKeyDown }) - widget.boundKeyDownCombos = {} -end - -local function connectKeyPressEvent(widget) - if widget.boundKeyPressCombos then return end - connect(widget, { onKeyPress = onWidgetKeyPress }) - widget.boundKeyPressCombos = {} -end - --- public functions -function Hotkeys.bindKeyDown(keyComboDesc, callback, widget) - widget = widget or rootWidget - connectKeyDownEvent(widget) - local keyComboDesc = retranslateKeyComboDesc(keyComboDesc) - if keyComboDesc then - widget.boundKeyDownCombos[keyComboDesc] = callback - else - error('key combo \'' .. keyComboDesc .. '\' is failed') - end -end - -function Hotkeys.bindKeyPress(keyComboDesc, callback, widget) - widget = widget or rootWidget - connectKeyPressEvent(widget) - local keyComboDesc = retranslateKeyComboDesc(keyComboDesc) - if keyComboDesc then - widget.boundKeyPressCombos[keyComboDesc] = callback - else - error('key combo \'' .. keyComboDesc .. '\' is failed') - end -end - -function Hotkeys.unbindKeyDown(keyComboDesc, widget) - widget = widget or rootWidget - if widget.boundKeyDownCombos == nil then return end - local keyComboDesc = retranslateKeyComboDesc(keyComboDesc) - if keyComboDesc then - widget.boundKeyDownCombos[keyComboDesc] = nil - end -end - -function Hotkeys.unbindKeyPress(keyComboDesc, widget) - widget = widget or rootWidget - if widget.boundKeyPressCombos == nil then return end - local keyComboDesc = retranslateKeyComboDesc(keyComboDesc) - if keyComboDesc then - widget.boundKeyPressCombos[keyComboDesc] = nil - end -end diff --git a/modules/core_lib/keyboard.lua b/modules/core_lib/keyboard.lua index 52e99553..788aba27 100644 --- a/modules/core_lib/keyboard.lua +++ b/modules/core_lib/keyboard.lua @@ -59,7 +59,7 @@ local function determineKeyComboDesc(keyCode, keyboardModifiers) end local function onWidgetKeyDown(widget, keyCode, keyboardModifiers) - if keyCode == KeyUnknown then return end + if keyCode == KeyUnknown then return false end local keyComboDesc = determineKeyComboDesc(keyCode, keyboardModifiers) local callback = widget.boundKeyDownCombos[keyComboDesc] if callback then @@ -69,12 +69,12 @@ local function onWidgetKeyDown(widget, keyCode, keyboardModifiers) return false end -local function onWidgetKeyPress(widget, keyCode, keyboardModifiers, wouldFilter) +local function onWidgetKeyPress(widget, keyCode, keyboardModifiers, autoRepeatTicks) local keyComboDesc = determineKeyComboDesc(keyCode, keyboardModifiers) - if keyCode == KeyUnknown then return end - local callback = widget.boundKeyPressCombos[keyComboDesc] - if callback then - callback() + if keyCode == KeyUnknown then return false end + local comboConf = widget.boundKeyPressCombos[keyComboDesc] + if comboConf and (autoRepeatTicks >= comboConf.autoRepeatDelay or autoRepeatTicks == 0) and comboConf.callback then + comboConf.callback() return true end return false @@ -104,12 +104,14 @@ function Keyboard.bindKeyDown(keyComboDesc, callback, widget) end end -function Keyboard.bindKeyPress(keyComboDesc, callback, widget) +function Keyboard.bindKeyPress(keyComboDesc, callback, widget, autoRepeatDelay) + autoRepeatDelay = autoRepeatDelay or 500 widget = widget or rootWidget connectKeyPressEvent(widget) local keyComboDesc = retranslateKeyComboDesc(keyComboDesc) if keyComboDesc then - widget.boundKeyPressCombos[keyComboDesc] = callback + widget.boundKeyPressCombos[keyComboDesc] = { callback = callback, autoRepeatDelay = autoRepeatDelay } + widget:setAutoRepeatDelay(math.min(autoRepeatDelay, widget:getAutoRepeatDelay())) else error('key combo \'' .. keyComboDesc .. '\' is failed') end diff --git a/modules/core_widgets/uipopupmenu.lua b/modules/core_widgets/uipopupmenu.lua index 3b8d9e07..f34d39da 100644 --- a/modules/core_widgets/uipopupmenu.lua +++ b/modules/core_widgets/uipopupmenu.lua @@ -56,8 +56,7 @@ function UIPopupMenu:onMousePress(mousePos, mouseButton) return false end -function UIPopupMenu:onKeyPress(keyCode, keyboardModifiers, wouldFilter) - if wouldFilter then return end +function UIPopupMenu:onKeyPress(keyCode, keyboardModifiers) if keyCode == KeyEscape then self:destroy() return true diff --git a/modules/core_widgets/uiwindow.lua b/modules/core_widgets/uiwindow.lua index c92b9156..5d599d64 100644 --- a/modules/core_widgets/uiwindow.lua +++ b/modules/core_widgets/uiwindow.lua @@ -6,8 +6,7 @@ function UIWindow.create() return window end -function UIWindow:onKeyPress(keyCode, keyboardModifiers, wouldFilter) - if wouldFilter then return end +function UIWindow:onKeyPress(keyCode, keyboardModifiers) if keyboardModifiers == KeyboardNoModifier then if keyCode == KeyEnter then signalcall(self.onEnter, self) diff --git a/modules/game/game.lua b/modules/game/game.lua index 55e722ad..353bd445 100644 --- a/modules/game/game.lua +++ b/modules/game/game.lua @@ -2,8 +2,7 @@ local m_mouseGrabberWidget -- private functions -local function onGameKeyPress(self, keyCode, keyboardModifiers, wouldFilter) - if wouldFilter then return end +local function onGameKeyPress(self, keyCode, keyboardModifiers) if keyboardModifiers == KeyboardCtrlModifier then if keyCode == KeyG then CharacterList.show() diff --git a/src/framework/core/inputevent.h b/src/framework/core/inputevent.h index a6e098a9..c065d1c9 100644 --- a/src/framework/core/inputevent.h +++ b/src/framework/core/inputevent.h @@ -37,8 +37,8 @@ struct InputEvent { mouseButton = Fw::MouseNoButton; keyCode = Fw::KeyUnknown; keyText = ""; + autoRepeatTicks = 0; mouseMoved = Point(); - wouldFilter = false; }; Fw::InputEventType type; @@ -49,7 +49,7 @@ struct InputEvent { int keyboardModifiers; Point mousePos; Point mouseMoved; - bool wouldFilter; + int autoRepeatTicks; }; #endif diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index 539a6d82..3c29d702 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -101,6 +101,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("setPhantom", &UIWidget::setPhantom); g_lua.bindClassMemberFunction("setFixedSize", &UIWidget::setFixedSize); g_lua.bindClassMemberFunction("setLastFocusReason", &UIWidget::setLastFocusReason); + g_lua.bindClassMemberFunction("setAutoRepeatDelay", &UIWidget::setAutoRepeatDelay); g_lua.bindClassMemberFunction("isVisible", &UIWidget::isVisible); g_lua.bindClassMemberFunction("isChildLocked", &UIWidget::isChildLocked); g_lua.bindClassMemberFunction("hasChild", &UIWidget::hasChild); @@ -154,6 +155,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("getStyle", &UIWidget::getStyle); g_lua.bindClassMemberFunction("getChildCount", &UIWidget::getChildCount); g_lua.bindClassMemberFunction("getLastFocusReason", &UIWidget::getLastFocusReason); + g_lua.bindClassMemberFunction("getAutoRepeatDelay", &UIWidget::getAutoRepeatDelay); g_lua.bindClassMemberFunction("getStyleName", &UIWidget::getStyleName); g_lua.bindClassMemberFunction("setX", &UIWidget::setX); g_lua.bindClassMemberFunction("setY", &UIWidget::setY); diff --git a/src/framework/platform/platformwindow.cpp b/src/framework/platform/platformwindow.cpp index af3c4bed..b6956989 100644 --- a/src/framework/platform/platformwindow.cpp +++ b/src/framework/platform/platformwindow.cpp @@ -58,7 +58,7 @@ void PlatformWindow::processKeyDown(Fw::Key keyCode) else if(keyCode == Fw::KeyShift) m_inputEvent.keyboardModifiers |= Fw::KeyboardShiftModifier; - m_inputEvent.reset(); + m_inputEvent.reset(Fw::KeyDownInputEvent); m_inputEvent.type = Fw::KeyDownInputEvent; m_inputEvent.keyCode = keyCode; @@ -126,7 +126,7 @@ void PlatformWindow::fireKeysPress() if(m_onInputEvent) { m_inputEvent.reset(Fw::KeyPressInputEvent); m_inputEvent.keyCode = keyCode; - m_inputEvent.wouldFilter = g_clock.ticksElapsed(firstKeyPress) < KEY_PRESS_REPEAT_DELAY; + m_inputEvent.autoRepeatTicks = g_clock.ticksElapsed(firstKeyPress); m_onInputEvent(m_inputEvent); } m_lastKeysPress[keyCode] = g_clock.ticks(); diff --git a/src/framework/platform/platformwindow.h b/src/framework/platform/platformwindow.h index 1b0f5bba..ba421d56 100644 --- a/src/framework/platform/platformwindow.h +++ b/src/framework/platform/platformwindow.h @@ -31,7 +31,6 @@ class PlatformWindow { enum { KEY_PRESS_REPEAT_INTERVAL = 30, - KEY_PRESS_REPEAT_DELAY = 500 }; typedef std::function OnResizeCallback; diff --git a/src/framework/ui/uilineedit.cpp b/src/framework/ui/uilineedit.cpp index 8ec38388..035096bd 100644 --- a/src/framework/ui/uilineedit.cpp +++ b/src/framework/ui/uilineedit.cpp @@ -429,36 +429,33 @@ void UILineEdit::onFocusChange(bool focused, Fw::FocusReason reason) UIWidget::onFocusChange(focused, reason); } -bool UILineEdit::onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter) +bool UILineEdit::onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks) { - if(UIWidget::onKeyPress(keyCode, keyboardModifiers, wouldFilter)) + if(UIWidget::onKeyPress(keyCode, keyboardModifiers, autoRepeatTicks)) return true; - if(!wouldFilter) { - if(keyCode == Fw::KeyDelete) // erase right character - removeCharacter(true); - else if(keyCode == Fw::KeyBackspace) // erase left character { - removeCharacter(false); - else if(keyCode == Fw::KeyRight) // move cursor right - moveCursor(true); - else if(keyCode == Fw::KeyLeft) // move cursor left - moveCursor(false); - else if(keyCode == Fw::KeyHome) // move cursor to first character - setCursorPos(0); - else if(keyCode == Fw::KeyEnd) // move cursor to last character - setCursorPos(m_text.length()); - else if(keyCode == Fw::KeyV && keyboardModifiers == Fw::KeyboardCtrlModifier) - appendText(g_window.getClipboardText()); - else if(keyCode == Fw::KeyTab) { - if(!m_alwaysActive) { - if(UIWidgetPtr parent = getParent()) - parent->focusNextChild(Fw::KeyboardFocusReason); - } - } else - return false; - return true; - } - return false; + if(keyCode == Fw::KeyDelete) // erase right character + removeCharacter(true); + else if(keyCode == Fw::KeyBackspace) // erase left character { + removeCharacter(false); + else if(keyCode == Fw::KeyRight) // move cursor right + moveCursor(true); + else if(keyCode == Fw::KeyLeft) // move cursor left + moveCursor(false); + else if(keyCode == Fw::KeyHome) // move cursor to first character + setCursorPos(0); + else if(keyCode == Fw::KeyEnd) // move cursor to last character + setCursorPos(m_text.length()); + else if(keyCode == Fw::KeyV && keyboardModifiers == Fw::KeyboardCtrlModifier) + appendText(g_window.getClipboardText()); + else if(keyCode == Fw::KeyTab) { + if(!m_alwaysActive) { + if(UIWidgetPtr parent = getParent()) + parent->focusNextChild(Fw::KeyboardFocusReason); + } + } else + return false; + return true; } bool UILineEdit::onKeyText(const std::string& keyText) diff --git a/src/framework/ui/uilineedit.h b/src/framework/ui/uilineedit.h index 1754c9b9..319b9317 100644 --- a/src/framework/ui/uilineedit.h +++ b/src/framework/ui/uilineedit.h @@ -63,7 +63,7 @@ protected: virtual void onGeometryChange(const Rect& oldRect, const Rect& newRect); virtual void onFocusChange(bool focused, Fw::FocusReason reason); virtual bool onKeyText(const std::string& keyText); - virtual bool onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter); + virtual bool onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks); virtual bool onMousePress(const Point& mousePos, Fw::MouseButton button); private: diff --git a/src/framework/ui/uimanager.cpp b/src/framework/ui/uimanager.cpp index 2b33c407..de45e7ac 100644 --- a/src/framework/ui/uimanager.cpp +++ b/src/framework/ui/uimanager.cpp @@ -69,7 +69,7 @@ void UIManager::inputEvent(const InputEvent& event) m_keyboardReceiver->propagateOnKeyDown(event.keyCode, event.keyboardModifiers); break; case Fw::KeyPressInputEvent: - m_keyboardReceiver->propagateOnKeyPress(event.keyCode, event.keyboardModifiers, event.wouldFilter); + m_keyboardReceiver->propagateOnKeyPress(event.keyCode, event.keyboardModifiers, event.autoRepeatTicks); break; case Fw::KeyUpInputEvent: m_keyboardReceiver->propagateOnKeyUp(event.keyCode, event.keyboardModifiers); diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index 4f660c77..eee0b97e 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -36,6 +36,7 @@ UIWidget::UIWidget() m_lastFocusReason = Fw::ActiveFocusReason; m_states = Fw::DefaultState; m_clickTimer.stop(); + m_autoRepeatDelay = 500; initBaseStyle(); initText(); @@ -1152,9 +1153,9 @@ bool UIWidget::onKeyDown(uchar keyCode, int keyboardModifiers) return callLuaField("onKeyDown", keyCode, keyboardModifiers); } -bool UIWidget::onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter) +bool UIWidget::onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks) { - return callLuaField("onKeyPress", keyCode, keyboardModifiers, wouldFilter); + return callLuaField("onKeyPress", keyCode, keyboardModifiers, autoRepeatTicks); } bool UIWidget::onKeyUp(uchar keyCode, int keyboardModifiers) @@ -1260,7 +1261,7 @@ bool UIWidget::propagateOnKeyDown(uchar keyCode, int keyboardModifiers) return onKeyDown(keyCode, keyboardModifiers); } -bool UIWidget::propagateOnKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter) +bool UIWidget::propagateOnKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks) { // do a backup of children list, because it may change while looping it UIWidgetList children; @@ -1275,11 +1276,14 @@ bool UIWidget::propagateOnKeyPress(uchar keyCode, int keyboardModifiers, bool wo } for(const UIWidgetPtr& child : children) { - if(child->propagateOnKeyPress(keyCode, keyboardModifiers, wouldFilter)) + if(child->propagateOnKeyPress(keyCode, keyboardModifiers, autoRepeatTicks)) return true; } - return onKeyPress(keyCode, keyboardModifiers, wouldFilter); + if(autoRepeatTicks == 0 || autoRepeatTicks >= m_autoRepeatDelay) { + return onKeyPress(keyCode, keyboardModifiers, autoRepeatTicks); + } else + return false; } bool UIWidget::propagateOnKeyUp(uchar keyCode, int keyboardModifiers) diff --git a/src/framework/ui/uiwidget.h b/src/framework/ui/uiwidget.h index da127349..7685d8c6 100644 --- a/src/framework/ui/uiwidget.h +++ b/src/framework/ui/uiwidget.h @@ -124,6 +124,7 @@ public: void setDragable(bool dragable); void setFixedSize(bool fixed); void setLastFocusReason(Fw::FocusReason reason); + void setAutoRepeatDelay(int delay) { m_autoRepeatDelay = delay; } bool isVisible(); bool isChildLocked(const UIWidgetPtr& child); @@ -177,7 +178,7 @@ protected: virtual void onDrop(UIWidgetPtr draggedWidget, const Point& mousePos); virtual bool onKeyText(const std::string& keyText); virtual bool onKeyDown(uchar keyCode, int keyboardModifiers); - virtual bool onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter); + virtual bool onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks); virtual bool onKeyUp(uchar keyCode, int keyboardModifiers); virtual bool onMousePress(const Point& mousePos, Fw::MouseButton button); virtual bool onMouseRelease(const Point& mousePos, Fw::MouseButton button); @@ -188,7 +189,7 @@ protected: bool propagateOnKeyText(const std::string& keyText); bool propagateOnKeyDown(uchar keyCode, int keyboardModifiers); - bool propagateOnKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter); + bool propagateOnKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks); bool propagateOnKeyUp(uchar keyCode, int keyboardModifiers); bool propagateOnMousePress(const Point& mousePos, Fw::MouseButton button); bool propagateOnMouseRelease(const Point& mousePos, Fw::MouseButton button); @@ -240,6 +241,7 @@ public: OTMLNodePtr getStyle() { return m_style; } int getChildCount() { return m_children.size(); } Fw::FocusReason getLastFocusReason() { return m_lastFocusReason; } + int getAutoRepeatDelay() { return m_autoRepeatDelay; } std::string getStyleName() { return m_style->tag(); } @@ -264,6 +266,7 @@ protected: EdgeGroup m_margin; EdgeGroup m_padding; float m_opacity; + int m_autoRepeatDelay; public: void setX(int x) { move(x, getY()); } diff --git a/src/otclient/ui/uigame.cpp b/src/otclient/ui/uigame.cpp index c7e42d15..bf001a40 100644 --- a/src/otclient/ui/uigame.cpp +++ b/src/otclient/ui/uigame.cpp @@ -25,9 +25,9 @@ #include #include -bool UIGame::onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter) +bool UIGame::onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks) { - if(UIWidget::onKeyPress(keyCode, keyboardModifiers, wouldFilter)) + if(UIWidget::onKeyPress(keyCode, keyboardModifiers, autoRepeatTicks)) return true; UILineEditPtr chatLineEdit = std::dynamic_pointer_cast(getParent()->recursiveGetChildById("consoleLineEdit")); @@ -58,8 +58,6 @@ bool UIGame::onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter) } else if(keyCode == Fw::KeyNumpad7) { g_game.walk(Otc::NorthWest); return true; - } else if(wouldFilter) { - return false; } else if(keyCode == Fw::KeyDelete) { chatLineEdit->removeCharacter(true); return true; diff --git a/src/otclient/ui/uigame.h b/src/otclient/ui/uigame.h index df93d92a..5ae1e7ba 100644 --- a/src/otclient/ui/uigame.h +++ b/src/otclient/ui/uigame.h @@ -29,7 +29,7 @@ class UIGame : public UIWidget { protected: - bool onKeyPress(uchar keyCode, int keyboardModifiers, bool wouldFilter); + bool onKeyPress(uchar keyCode, int keyboardModifiers, int autoRepeatTicks); bool onKeyText(const std::string& keyText); };