summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llnotificationalerthandler.cpp13
-rw-r--r--indra/newview/llnotificationhandler.h16
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp22
-rw-r--r--indra/newview/llnotificationofferhandler.cpp4
-rw-r--r--indra/newview/llparticipantlist.cpp9
-rw-r--r--indra/newview/llspeakers.cpp5
-rw-r--r--indra/newview/lltoastalertpanel.cpp6
-rw-r--r--indra/newview/llviewermessage.cpp8
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml8
-rw-r--r--indra/newview/skins/default/xui/en/panel_chat_header.xml4
10 files changed, 73 insertions, 22 deletions
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
index c3df4cbaf4..52de8355e9 100644
--- a/indra/newview/llnotificationalerthandler.cpp
+++ b/indra/newview/llnotificationalerthandler.cpp
@@ -93,6 +93,19 @@ bool LLAlertHandler::processNotification(const LLSD& notify)
if (notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "load")
{
+ if (LLHandlerUtil::canSpawnSessionAndLogToIM(notification))
+ {
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
+
+ LLUUID from_id = notification->getPayload()["from_id"];
+
+ // firstly create session...
+ LLHandlerUtil::spawnIMSession(name, from_id);
+
+ // ...then log message to have IM Well notified about new message
+ LLHandlerUtil::logToIMP2P(notification);
+ }
+
LLToastAlertPanel* alert_dialog = new LLToastAlertPanel(notification, mIsModal);
LLToast::Params p;
p.notif_id = notification->getID();
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
index 33ef4c81cd..0fb438bfe9 100644
--- a/indra/newview/llnotificationhandler.h
+++ b/indra/newview/llnotificationhandler.h
@@ -277,6 +277,13 @@ public:
static bool canSpawnIMSession(const LLNotificationPtr& notification);
/**
+ * Checks if passed notification can create IM session and be written into it.
+ *
+ * This method uses canLogToIM() & canSpawnIMSession().
+ */
+ static bool canSpawnSessionAndLogToIM(const LLNotificationPtr& notification);
+
+ /**
* Writes notification message to IM session.
*/
static void logToIM(const EInstantMessage& session_type,
@@ -303,6 +310,15 @@ public:
* Spawns IM session.
*/
static void spawnIMSession(const std::string& name, const LLUUID& from_id);
+
+ /**
+ * Returns name from the notification's substitution.
+ *
+ * Methods gets "NAME" or "[NAME]" from the substitution map.
+ *
+ * @param notification - Notification which substitution's name will be returned.
+ */
+ static std::string getSubstitutionName(const LLNotificationPtr& notification);
};
}
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index 34807485a6..fba5773602 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -63,6 +63,7 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
return GRANTED_MODIFY_RIGHTS == notification->getName()
|| REVOKED_MODIFY_RIGHTS == notification->getName()
|| PAYMENT_RECIVED == notification->getName()
+ || OFFER_FRIENDSHIP == notification->getName()
|| FRIENDSHIP_OFFERED == notification->getName()
|| SERVER_OBJECT_MESSAGE == notification->getName()
|| INVENTORY_ACCEPTED == notification->getName()
@@ -82,8 +83,7 @@ bool LLHandlerUtil::canLogToNearbyChat(const LLNotificationPtr& notification)
// static
bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification)
{
- return ADD_FRIEND_WITH_MESSAGE == notification->getName()
- || OFFER_FRIENDSHIP == notification->getName()
+ return OFFER_FRIENDSHIP == notification->getName()
|| FRIENDSHIP_ACCEPTED == notification->getName()
|| USER_GIVE_ITEM == notification->getName()
|| INVENTORY_ACCEPTED == notification->getName()
@@ -91,6 +91,12 @@ bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification)
}
// static
+bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notification)
+{
+ return canLogToIM(notification) && canSpawnIMSession(notification);
+}
+
+// static
void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
const std::string& session_name, const std::string& from_name,
const std::string& message, const LLUUID& session_owner_id,
@@ -124,10 +130,7 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
// static
void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
{
- const std::string
- name =
- notification->getSubstitutions().has("NAME") ? notification->getSubstitutions()["NAME"]
- : notification->getSubstitutions()["[NAME]"];
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
const std::string session_name = notification->getPayload().has(
"SESSION_NAME") ? notification->getPayload()["SESSION_NAME"].asString() : name;
@@ -193,3 +196,10 @@ void LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_i
}
}
+// static
+std::string LLHandlerUtil::getSubstitutionName(const LLNotificationPtr& notification)
+{
+ return notification->getSubstitutions().has("NAME")
+ ? notification->getSubstitutions()["NAME"]
+ : notification->getSubstitutions()["[NAME]"];
+}
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
index 5861a802e9..dd66a6c507 100644
--- a/indra/newview/llnotificationofferhandler.cpp
+++ b/indra/newview/llnotificationofferhandler.cpp
@@ -105,9 +105,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
{
if (LLHandlerUtil::canSpawnIMSession(notification))
{
- const std::string name = notification->getSubstitutions().has(
- "NAME") ? notification->getSubstitutions()["NAME"]
- : notification->getSubstitutions()["[NAME]"];
+ const std::string name = LLHandlerUtil::getSubstitutionName(notification);
LLUUID from_id = notification->getPayload()["from_id"];
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
index 479c29f656..330e220af3 100644
--- a/indra/newview/llparticipantlist.cpp
+++ b/indra/newview/llparticipantlist.cpp
@@ -98,6 +98,10 @@ LLParticipantList::LLParticipantList(LLSpeakerMgr* data_source, LLAvatarList* av
{
mModeratorList.insert(speakerp->mID);
}
+ else
+ {
+ mModeratorToRemoveList.insert(speakerp->mID);
+ }
}
// we need to exclude agent id for non group chat
sort();
@@ -159,7 +163,7 @@ void LLParticipantList::onAvatarListRefreshed(LLUICtrl* ctrl, const LLSD& param)
{
std::string name = item->getAvatarName();
size_t found = name.find(moderator_indicator);
- if (found == std::string::npos)
+ if (found != std::string::npos)
{
name.erase(found, moderator_indicator_len);
item->setName(name);
@@ -589,7 +593,8 @@ bool LLParticipantList::LLParticipantListMenu::enableContextMenuItem(const LLSD&
if (speakerp.notNull())
{
// not in voice participants can not be moderated
- return speakerp->mStatus != LLSpeaker::STATUS_TEXT_ONLY;
+ return speakerp->mStatus == LLSpeaker::STATUS_VOICE_ACTIVE
+ || speakerp->mStatus == LLSpeaker::STATUS_MUTED;
}
}
return false;
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 91b417c61f..010dfd1b33 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -615,6 +615,9 @@ private:
void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id)
{
+ LLPointer<LLSpeaker> speakerp = findSpeaker(speaker_id);
+ if (!speakerp) return;
+
std::string url = gAgent.getRegion()->getCapability("ChatSessionRequest");
LLSD data;
data["method"] = "mute update";
@@ -623,7 +626,7 @@ void LLIMSpeakerMgr::toggleAllowTextChat(const LLUUID& speaker_id)
data["params"]["agent_id"] = speaker_id;
data["params"]["mute_info"] = LLSD::emptyMap();
//current value represents ability to type, so invert
- data["params"]["mute_info"]["text"] = !findSpeaker(speaker_id)->mModeratorMutedText;
+ data["params"]["mute_info"]["text"] = !speakerp->mModeratorMutedText;
LLHTTPClient::post(url, data, new ModerationResponder(getSessionID()));
}
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index c48301fa1e..8f296b3794 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -385,6 +385,12 @@ BOOL LLToastAlertPanel::handleKeyHere(KEY key, MASK mask )
{
if( KEY_RETURN == key && mask == MASK_NONE )
{
+ LLButton* defaultBtn = getDefaultButton();
+ if(defaultBtn && defaultBtn->getVisible() && defaultBtn->getEnabled())
+ {
+ // If we have a default button, click it when return is pressed
+ defaultBtn->onCommit();
+ }
return TRUE;
}
else if (KEY_RIGHT == key)
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 72e3c27bc9..87045d2abf 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -1158,9 +1158,9 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
default:
LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
break;
- } // end switch (mIM)
-
- // Show falls through to accept.
+ }
+ break;
+ // end switch (mIM)
case IOR_ACCEPT:
msg->addU8Fast(_PREHASH_Dialog, (U8)(mIM + 1));
@@ -1849,7 +1849,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
// This is a block, modeless dialog.
//*TODO: Translate
args["MESSAGE"] = message;
- LLNotificationsUtil::add("SystemMessage", args);
+ LLNotificationsUtil::add("SystemMessageTip", args);
}
break;
case IM_GROUP_NOTICE:
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index e4ec98c35c..9d3c31c4e6 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5022,9 +5022,9 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O
[ITEM_SLURL]
<form name="form">
<button
- index="0"
- name="Keep"
- text="Keep"/>
+ index="4"
+ name="Show"
+ text="Show"/>
<button
index="1"
name="Discard"
@@ -5106,7 +5106,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O
<notification
icon="notify.tga"
name="OfferFriendship"
- type="offer">
+ type="alertmodal">
[NAME] is offering friendship.
[MESSAGE]
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
index 859822dd81..39c4923f12 100644
--- a/indra/newview/skins/default/xui/en/panel_chat_header.xml
+++ b/indra/newview/skins/default/xui/en/panel_chat_header.xml
@@ -28,7 +28,7 @@
height="12"
layout="topleft"
left_pad="5"
- right="-60"
+ right="-120"
name="user_name"
text_color="white"
bg_readonly_color="black"
@@ -46,5 +46,5 @@
right="-5"
top="8"
value="23:30"
- width="50" />
+ width="110" />
</panel>