From: ShadowNinja <shadowninja@minetest.net>
Date: Sat, 12 Mar 2016 16:58:02 +0000 (-0500)
Subject: Fix chat console not opening after formspec opened over it
X-Git-Tag: 0.4.14~177
X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=8c951cae5bcfa715e227d47d122cc2de45d70a63;p=oweals%2Fminetest.git

Fix chat console not opening after formspec opened over it

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.
---

diff --git a/src/guiChatConsole.cpp b/src/guiChatConsole.cpp
index d59937c31..ec9d3ffdc 100644
--- a/src/guiChatConsole.cpp
+++ b/src/guiChatConsole.cpp
@@ -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();
+	}
+}
+
diff --git a/src/guiChatConsole.h b/src/guiChatConsole.h
index fe595f284..3013a1d31 100644
--- a/src/guiChatConsole.h
+++ b/src/guiChatConsole.h
@@ -77,6 +77,8 @@ public:
 
 	virtual bool OnEvent(const SEvent& event);
 
+	virtual void setVisible(bool visible);
+
 private:
 	void reformatConsole();
 	void recalculateConsolePosition();