From 6bb9ec41950d8f83c8659e36850aa47e8ea601b8 Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Tue, 17 Apr 2018 13:11:53 +0000
Subject: MAINT-8498 Fixed item offers not appearing after friednship offer

---
 indra/newview/llchathistory.cpp | 73 +++++++++++++++++++++++------------------
 1 file changed, 41 insertions(+), 32 deletions(-)

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index a9e8e77a0b..97a71a8802 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -53,6 +53,7 @@
 #include "llstylemap.h"
 #include "llslurl.h"
 #include "lllayoutstack.h"
+#include "llnotifications.h"
 #include "llnotificationsutil.h"
 #include "lltoastnotifypanel.h"
 #include "lltooltip.h"
@@ -1315,44 +1316,52 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 	// notify processing
 	if (chat.mNotifId.notNull())
 	{
-		bool create_toast = true;
-		for (LLToastNotifyPanel::instance_iter ti(LLToastNotifyPanel::beginInstances())
-			, tend(LLToastNotifyPanel::endInstances()); ti != tend; ++ti)
-		{
-			LLToastNotifyPanel& panel = *ti;
-			LLIMToastNotifyPanel * imtoastp = dynamic_cast<LLIMToastNotifyPanel *>(&panel);
-			const std::string& notification_name = panel.getNotificationName();
-			if (notification_name == "OfferFriendship" && panel.isControlPanelEnabled() && imtoastp)
-			{
-				create_toast = false;
-				break;
-			}
-		}
-
-		if (create_toast)
-		{
 		LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId);
 		if (notification != NULL)
 		{
-			LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel(
-					notification, chat.mSessionID, LLRect::null, !use_plain_text_chat_history, mEditor);
-
-			//Prepare the rect for the view
-			LLRect target_rect = mEditor->getDocumentView()->getRect();
-			// squeeze down the widget by subtracting padding off left and right
-			target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad();
-			target_rect.mRight -= mRightWidgetPad;
-			notify_box->reshape(target_rect.getWidth(),	notify_box->getRect().getHeight());
-			notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
+			bool create_toast = true;
+			if (notification->getName() == "OfferFriendship")
+			{
+				// We don't want multiple friendship offers to appear, this code checks if there are previous offers
+				// by iterating though all panels.
+				// Note: it might be better to simply add a "pending offer" flag somewhere
+				for (LLToastNotifyPanel::instance_iter ti(LLToastNotifyPanel::beginInstances())
+					, tend(LLToastNotifyPanel::endInstances()); ti != tend; ++ti)
+				{
+					LLToastNotifyPanel& panel = *ti;
+					LLIMToastNotifyPanel * imtoastp = dynamic_cast<LLIMToastNotifyPanel *>(&panel);
+					const std::string& notification_name = panel.getNotificationName();
+					if (notification_name == "OfferFriendship"
+						&& panel.isControlPanelEnabled()
+						&& imtoastp)
+					{
+						create_toast = false;
+						break;
+					}
+				}
+			}
 
-			LLInlineViewSegment::Params params;
-			params.view = notify_box;
-			params.left_pad = mLeftWidgetPad;
-			params.right_pad = mRightWidgetPad;
-			mEditor->appendWidget(params, "\n", false);
+			if (create_toast)
+			{
+				LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel(
+						notification, chat.mSessionID, LLRect::null, !use_plain_text_chat_history, mEditor);
+
+				//Prepare the rect for the view
+				LLRect target_rect = mEditor->getDocumentView()->getRect();
+				// squeeze down the widget by subtracting padding off left and right
+				target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad();
+				target_rect.mRight -= mRightWidgetPad;
+				notify_box->reshape(target_rect.getWidth(),	notify_box->getRect().getHeight());
+				notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom);
+
+				LLInlineViewSegment::Params params;
+				params.view = notify_box;
+				params.left_pad = mLeftWidgetPad;
+				params.right_pad = mRightWidgetPad;
+				mEditor->appendWidget(params, "\n", false);
+			}
 		}
 	}
-	}
 
 	// usual messages showing
 	else
-- 
cgit v1.2.3