From 154f501cb19ee99ab9fdb41b918478f18b220f40 Mon Sep 17 00:00:00 2001
From: Dmitry Oleshko <doleshko@productengine.com>
Date: Mon, 16 Nov 2009 14:34:38 +0200
Subject: fixed normal bug (EXT-2503) Clicking on (x) button in Message Well
 Window doesn't dismiss a group notice

Added to the handler of group notices functionality on rejecting of notifications.
This behavior was broken earlier in the handler for script notifications.

--HG--
branch : product-engine
---
 indra/newview/llnotificationgrouphandler.cpp | 14 ++++++++++++++
 indra/newview/llnotificationhandler.h        |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
index fc6fb25644..26730e1f10 100644
--- a/indra/newview/llnotificationgrouphandler.cpp
+++ b/indra/newview/llnotificationgrouphandler.cpp
@@ -37,6 +37,7 @@
 #include "llgroupactions.h"
 #include "llviewercontrol.h"
 #include "llviewerwindow.h"
+#include "llnotificationmanager.h"
 
 using namespace LLNotificationsUI;
 
@@ -47,6 +48,9 @@ LLGroupHandler::LLGroupHandler(e_notification_type type, const LLSD& id)
 
 	// Getting a Channel for our notifications
 	mChannel = LLChannelManager::getInstance()->createNotificationChannel();
+	LLScreenChannel* channel = dynamic_cast<LLScreenChannel*>(mChannel);
+	if(channel)
+		channel->setOnRejectToastCallback(boost::bind(&LLGroupHandler::onRejectToast, this, _1));
 }
 
 //--------------------------------------------------------------------------
@@ -118,5 +122,15 @@ void LLGroupHandler::onDeleteToast(LLToast* toast)
 }
 
 //--------------------------------------------------------------------------
+void LLGroupHandler::onRejectToast(LLUUID& id)
+{
+	LLNotificationPtr notification = LLNotifications::instance().find(id);
+
+	if (notification && LLNotificationManager::getInstance()->getHandlerForNotification(notification->getType()) == this)
+	{
+		LLNotifications::instance().cancel(notification);
+	}
+}
 
+//--------------------------------------------------------------------------
 
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 23998a0e5d..42cc7cacc2 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -209,6 +209,9 @@ public:
 protected:
 	virtual void onDeleteToast(LLToast* toast);
 	virtual void initChannel();
+
+	// own handlers
+	void onRejectToast(LLUUID& id);
 };
 
 /**
-- 
cgit v1.2.3