MAINT-6018 Open URL dialog spam

Added the ability to close all notifications from one owner at once
master
AndreyL ProductEngine 2016-01-11 03:24:36 +02:00
parent 3892685922
commit 30446d6afc
6 changed files with 54 additions and 0 deletions

View File

@ -1715,6 +1715,30 @@ void LLNotifications::cancelByName(const std::string& name)
}
}
void LLNotifications::cancelByOwner(const LLUUID ownerId)
{
std::vector<LLNotificationPtr> notifs_to_cancel;
for (LLNotificationSet::iterator it = mItems.begin(), end_it = mItems.end();
it != end_it;
++it)
{
LLNotificationPtr pNotif = *it;
if (pNotif && pNotif->getPayload().get("owner_id").asUUID() == ownerId)
{
notifs_to_cancel.push_back(pNotif);
}
}
for (std::vector<LLNotificationPtr>::iterator it = notifs_to_cancel.begin(), end_it = notifs_to_cancel.end();
it != end_it;
++it)
{
LLNotificationPtr pNotif = *it;
pNotif->cancel();
updateItem(LLSD().with("sigtype", "delete").with("id", pNotif->id()), pNotif);
}
}
void LLNotifications::update(const LLNotificationPtr pNotif)
{
LLNotificationSet::iterator it=mItems.find(pNotif);

View File

@ -924,6 +924,7 @@ public:
void add(const LLNotificationPtr pNotif);
void cancel(LLNotificationPtr pNotif);
void cancelByName(const std::string& name);
void cancelByOwner(const LLUUID ownerId);
void update(const LLNotificationPtr pNotif);
LLNotificationPtr find(LLUUID uuid);

View File

@ -1092,6 +1092,10 @@ void LLScriptChiclet::onMenuItemClicked(const LLSD& user_data)
{
LLScriptFloaterManager::instance().removeNotification(getSessionId());
}
else if ("end_owner" == action)
{
LLScriptFloaterManager::instance().removeAllNotificationsByOwner(getSessionId());
}
}
void LLScriptChiclet::createPopupMenu()

View File

@ -420,6 +420,18 @@ void LLScriptFloaterManager::onAddNotification(const LLUUID& notification_id)
toggleScriptFloater(notification_id, set_new_message);
}
void LLScriptFloaterManager::removeAllNotificationsByOwner(const LLUUID& notification_id)
{
LLNotificationPtr notification = LLNotifications::instance().find(notification_id);
if (notification != NULL && !notification->isCancelled())
{
LLSD payload = notification->getPayload();
LLUUID owner = payload.get("owner_id").asUUID();
LLNotifications::instance().cancelByOwner(owner);
}
}
void LLScriptFloaterManager::removeNotification(const LLUUID& notification_id)
{
LLNotificationPtr notification = LLNotifications::instance().find(notification_id);

View File

@ -59,6 +59,11 @@ public:
*/
void onAddNotification(const LLUUID& notification_id);
/**
* Removes all notifications by owner id.
*/
void removeAllNotificationsByOwner(const LLUUID& notification_id);
/**
* Removes notification.
*/

View File

@ -16,4 +16,12 @@
function="ScriptChiclet.Action"
parameter="end" />
</menu_item_call>
<menu_item_call
label="Close by owner"
layout="topleft"
name="CloseByOwner">
<menu_item_call.on_click
function="ScriptChiclet.Action"
parameter="end_owner" />
</menu_item_call>
</menu>