1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-03 14:52:11 +02:00

Fix broken popping of top interfaces when town was opened during multiplayer game

This commit is contained in:
Dydzio 2024-09-11 23:00:06 +02:00
parent 6fbfcef99e
commit e843af24bf
3 changed files with 4 additions and 12 deletions

View File

@ -172,10 +172,11 @@ void CPlayerInterface::initGameInterface(std::shared_ptr<Environment> ENV, std::
void CPlayerInterface::closeAllDialogs() void CPlayerInterface::closeAllDialogs()
{ {
// remove all active dialogs that do not expect query answer // remove all active dialogs that do not expect query answer
for (;;) while(true)
{ {
auto adventureWindow = GH.windows().topWindow<AdventureMapInterface>(); auto adventureWindow = GH.windows().topWindow<AdventureMapInterface>();
auto infoWindow = GH.windows().topWindow<CInfoWindow>(); auto infoWindow = GH.windows().topWindow<CInfoWindow>();
auto topWindow = GH.windows().topWindow<WindowBase>();
if(adventureWindow != nullptr) if(adventureWindow != nullptr)
break; break;
@ -183,16 +184,8 @@ void CPlayerInterface::closeAllDialogs()
if(infoWindow && infoWindow->ID != QueryID::NONE) if(infoWindow && infoWindow->ID != QueryID::NONE)
break; break;
if (infoWindow) topWindow->close();
infoWindow->close();
else
GH.windows().popWindows(1);
} }
if(castleInt)
castleInt->close();
castleInt = nullptr;
} }
void CPlayerInterface::playerEndsTurn(PlayerColor player) void CPlayerInterface::playerEndsTurn(PlayerColor player)

View File

@ -341,6 +341,6 @@ WindowBase::WindowBase(int used_, Point pos_)
void WindowBase::close() void WindowBase::close()
{ {
if(!GH.windows().isTopWindow(this)) if(!GH.windows().isTopWindow(this))
logGlobal->error("Only top interface must be closed"); throw std::runtime_error("Only top interface can be closed");
GH.windows().popWindows(1); GH.windows().popWindows(1);
} }

View File

@ -146,7 +146,6 @@ class WindowBase : public CIntObject
{ {
public: public:
WindowBase(int used_ = 0, Point pos_ = Point()); WindowBase(int used_ = 0, Point pos_ = Point());
protected:
virtual void close(); virtual void close();
}; };