Fix chat console not opening after formspec opened over it
authorShadowNinja <shadowninja@minetest.net>
Sat, 12 Mar 2016 16:58:02 +0000 (11:58 -0500)
committerShadowNinja <shadowninja@minetest.net>
Sat, 12 Mar 2016 17:01:40 +0000 (12:01 -0500)
The MainMenuManager set the console invisible when a
formspec opened over it, but didn't properly close it,
and the chat console never set itself visible again.

src/guiChatConsole.cpp
src/guiChatConsole.h

index d59937c31df3f9367218e88c2600c3ddfb30a833..ec9d3ffdc45957dc978c3f8375f4de06816eca42 100644 (file)
@@ -122,6 +122,8 @@ void GUIChatConsole::openConsole(f32 height)
        m_desired_height_fraction = height;
        m_desired_height = height * m_screensize.Y;
        reformatConsole();
+       m_animate_time_old = getTimeMs();
+       IGUIElement::setVisible(true);
        Environment->setFocus(this);
        m_menumgr->createdMenu(this);
 }
@@ -243,6 +245,11 @@ void GUIChatConsole::animate(u32 msec)
 {
        // animate the console height
        s32 goal = m_open ? m_desired_height : 0;
+
+       // Set invisible if close animation finished (reset by openConsole)
+       if (!m_open && m_height == 0)
+               IGUIElement::setVisible(false);
+
        if (m_height != goal)
        {
                s32 max_change = msec * m_screensize.Y * (m_height_speed / 1000.0);
@@ -628,3 +635,13 @@ bool GUIChatConsole::OnEvent(const SEvent& event)
        return Parent ? Parent->OnEvent(event) : false;
 }
 
+void GUIChatConsole::setVisible(bool visible)
+{
+       m_open = visible;
+       IGUIElement::setVisible(visible);
+       if (!visible) {
+               m_height = 0;
+               recalculateConsolePosition();
+       }
+}
+
index fe595f2849b6adc5d6acaf154788e9a4a3ee5f74..3013a1d3134d905d4c0c4424cda38b2d6e30bb72 100644 (file)
@@ -77,6 +77,8 @@ public:
 
        virtual bool OnEvent(const SEvent& event);
 
+       virtual void setVisible(bool visible);
+
 private:
        void reformatConsole();
        void recalculateConsolePosition();