From beef8cd1ed486d07fee69bb1329c440595cdba16 Mon Sep 17 00:00:00 2001 From: mfranz Date: Tue, 3 Jul 2007 15:35:55 +0000 Subject: [PATCH] - limit max number of messages displayed at the same time to 5 (Ideally, it should be just one, but we don't want to block everything and don't want to miss messages either.) - prevent message duplicates --- src/GUI/gui_funcs.cxx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/GUI/gui_funcs.cxx b/src/GUI/gui_funcs.cxx index fb068f585..413c65bd5 100644 --- a/src/GUI/gui_funcs.cxx +++ b/src/GUI/gui_funcs.cxx @@ -131,7 +131,10 @@ const __fg_gui_fn_t __fg_gui_fn[] = { /* ================ General Purpose Functions ================ */ -// General Purpose Message Box +// General Purpose Message Box. Makes sure no more than 5 different +// messages are displayed at the same time, and none of them are +// duplicates. (5 is a *lot*, but this will hardly ever be reached +// and we don't want to miss any, either.) void mkDialog (const char *txt) { NewGUI *gui = (NewGUI *)globals->get_subsystem("gui"); @@ -141,15 +144,25 @@ void mkDialog (const char *txt) if (!master) return; + const int maxdialogs = 5; string name; SGPropertyNode *msg = fgGetNode("/sim/gui/dialogs", true); - for (unsigned int i = 1;; i++) { + int i; + for (i = 0; i < maxdialogs; i++) { std::ostringstream s; s << "message-" << i; name = s.str(); + if (!msg->getNode(name.c_str(), false)) break; + + if (!strcmp(txt, msg->getNode(name.c_str())->getStringValue("message"))) { + SG_LOG(SG_GENERAL, SG_WARN, "mkDialog(): duplicate of message " << txt); + return; + } } + if (i == maxdialogs) + return; msg = msg->getNode(name.c_str(), true); msg->setStringValue("message", txt); msg = msg->getNode("dialog", true); -- 2.39.5