From 36594400a2ea20d7a404172c3ab6a01b0228a29d Mon Sep 17 00:00:00 2001
From: maxim_productengine <mnikolenko@productengine.com>
Date: Wed, 22 Aug 2018 18:02:31 +0300
Subject: MAINT-8985 FIXED User is able to send friendship request to a friend
 from the group menu

---
 indra/llui/llscrolllistctrl.cpp     | 21 +++++++++++++++++++++
 indra/llui/llscrolllistctrl.h       |  5 +++++
 indra/newview/llpanelgrouproles.cpp |  1 +
 3 files changed, 27 insertions(+)

(limited to 'indra')

diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index ed65b1e45f..410436e3f2 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -1836,6 +1836,19 @@ BOOL LLScrollListCtrl::handleRightMouseDown(S32 x, S32 y, MASK mask)
 				menu_name, LLMenuGL::sMenuContainer, LLMenuHolderGL::child_registry_t::instance());
 			if (mPopupMenu)
 			{
+				if (mIsFriendSignal)
+				{
+					bool isFriend = *(*mIsFriendSignal)(uuid);
+					LLView* addFriendButton = mPopupMenu->getChild<LLView>("add_friend");
+					LLView* removeFriendButton = mPopupMenu->getChild<LLView>("remove_friend");
+
+					if (addFriendButton && removeFriendButton)
+					{
+						addFriendButton->setEnabled(!isFriend);
+						removeFriendButton->setEnabled(isFriend);
+					}
+				}
+
 				mPopupMenu->show(x, y);
 				LLMenuGL::showPopup(this, mPopupMenu, x, y);
 				return TRUE;
@@ -3110,3 +3123,11 @@ void LLScrollListCtrl::onFocusLost()
 	LLUICtrl::onFocusLost();
 }
 
+boost::signals2::connection LLScrollListCtrl::setIsFriendCallback(const is_friend_signal_t::slot_type& cb)
+{
+	if (!mIsFriendSignal)
+	{
+		mIsFriendSignal = new is_friend_signal_t();
+	}
+	return mIsFriendSignal->connect(cb);
+}
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index 699a8744e1..b35a8608e7 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -90,6 +90,7 @@ public:
 
 	
 	typedef boost::signals2::signal<S32 (S32,const LLScrollListItem*,const LLScrollListItem*),maximum<S32> > sort_signal_t;
+	typedef boost::signals2::signal<bool(const LLUUID& user_id)> is_friend_signal_t;
 	
 	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
@@ -393,6 +394,8 @@ public:
 		return mSortCallback->connect(cb);
 	}
 
+	boost::signals2::connection setIsFriendCallback(const is_friend_signal_t::slot_type& cb);
+
 
 protected:
 	// "Full" interface: use this when you're creating a list that has one or more of the following:
@@ -515,6 +518,8 @@ private:
 	std::vector<sort_column_t>	mSortColumns;
 
 	sort_signal_t*	mSortCallback;
+
+	is_friend_signal_t*	mIsFriendSignal;
 }; // end class LLScrollListCtrl
 
 #endif  // LL_SCROLLLISTCTRL_H
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 087e0a0759..52a13304df 100644
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -834,6 +834,7 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)
 	// Show the member's profile on double click.
 	mMembersList->setDoubleClickCallback(onMemberDoubleClick, this);
 	mMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR);
+	mMembersList->setIsFriendCallback(LLAvatarActions::isFriend);
 	
 	LLSD row;
 	row["columns"][0]["column"] = "name";
-- 
cgit v1.2.3