diff --git a/modules/game/ui/gameinterface.otui b/modules/game/ui/gameinterface.otui index df13a520..be300d0e 100644 --- a/modules/game/ui/gameinterface.otui +++ b/modules/game/ui/gameinterface.otui @@ -1,4 +1,5 @@ UIWidget + id: gameRootInterface anchors.fill: parent UIMap diff --git a/modules/mainmenu/characterlist.lua b/modules/mainmenu/characterlist.lua index 27c0ea05..0e9c5e98 100644 --- a/modules/mainmenu/characterlist.lua +++ b/modules/mainmenu/characterlist.lua @@ -41,6 +41,7 @@ local function tryLogin(charInfo, tries) loadBox = displayCancelBox('Please wait', 'Connecting to game server...') function loadBox.onCancel() + loadBox = nil Game.cancelLogin() CharacterList.show() end diff --git a/modules/mainmenu/ui/charlist.otui b/modules/mainmenu/ui/charlist.otui index 9fbf5e49..789c3673 100644 --- a/modules/mainmenu/ui/charlist.otui +++ b/modules/mainmenu/ui/charlist.otui @@ -17,7 +17,7 @@ MainWindow title: Charlist size: 250 250 onEnter: CharacterList.doLogin() - onEscape: function(self) self:destroy() end + onEscape: CharacterList.hide() TextList id: characterList diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index 70e3f026..fe176294 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -109,6 +109,15 @@ void UIWidget::render() } } +void UIWidget::setVisible(bool visible) +{ + m_visible = visible; + if(!visible && isFocused()) { + if(UIWidgetPtr parent = getParent()) + parent->focusNextChild(Fw::ActiveFocusReason); + } +} + void UIWidget::setStyle(const std::string& styleName) { OTMLNodePtr styleNode = g_ui.getStyle(styleName); @@ -418,7 +427,7 @@ void UIWidget::focusNextChild(Fw::FocusReason reason) // finds next child to focus for(const UIWidgetPtr& child : rotatedChildren) { - if(child->isFocusable()) { + if(child->isFocusable() && child->isExplicitlyEnabled() && child->isVisible()) { toFocus = child; break; } @@ -444,7 +453,7 @@ void UIWidget::focusPreviousChild(Fw::FocusReason reason) // finds next child to focus for(const UIWidgetPtr& child : rotatedChildren) { - if(child->isFocusable()) { + if(child->isFocusable() && child->isExplicitlyEnabled() && child->isVisible()) { toFocus = child; break; } diff --git a/src/framework/ui/uiwidget.h b/src/framework/ui/uiwidget.h index 7b58d0cf..5a2522a3 100644 --- a/src/framework/ui/uiwidget.h +++ b/src/framework/ui/uiwidget.h @@ -41,8 +41,8 @@ public: virtual void setup(); virtual void render(); + void setVisible(bool visible); void setEnabled(bool enabled) { m_enabled = enabled; updateState(Fw::DisabledState); } - void setVisible(bool visible) { m_visible = visible; } void setPressed(bool pressed) { m_pressed = pressed; updateState(Fw::PressedState); } void setId(const std::string& id) { m_id = id; } void setFocusable(bool focusable) { m_focusable = focusable; } diff --git a/src/otclient/otclient.cpp b/src/otclient/otclient.cpp index 7767686c..29d8061f 100644 --- a/src/otclient/otclient.cpp +++ b/src/otclient/otclient.cpp @@ -293,11 +293,11 @@ void OTClient::onPlatformEvent(const PlatformEvent& event) // TODO: move this events to lua UIWidgetPtr console = g_ui.getRootWidget()->getChildById("consolePanel"); if(!console->isExplicitlyVisible()) { - g_ui.getRootWidget()->lockChild(console); - console->setVisible(true); + console->lock(); + console->show(); } else { - g_ui.getRootWidget()->unlockChild(console); - console->setVisible(false); + console->unlock(); + console->hide(); } fireUi = false; }