From efb512dc65c43ea73e7b4da3e2c45d276043842e Mon Sep 17 00:00:00 2001 From: Steve Bennetts Date: Wed, 18 Nov 2009 14:07:35 -0800 Subject: EXT-2644 - Add "Close Session" option to chicklet context menus --- indra/newview/llavataractions.cpp | 13 +++++++++++++ indra/newview/llavataractions.h | 5 +++++ indra/newview/llchiclet.cpp | 10 +++++++++- indra/newview/llfloatergroups.cpp | 2 +- indra/newview/llgroupactions.cpp | 15 ++++++++++++++- indra/newview/llgroupactions.h | 7 ++++++- indra/newview/llpanelpeople.cpp | 2 +- .../newview/skins/default/xui/en/menu_imchiclet_group.xml | 8 ++++++++ indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml | 8 ++++++++ 9 files changed, 65 insertions(+), 5 deletions(-) (limited to 'indra') diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index ee4a9df15f..0844cca766 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -189,6 +189,19 @@ void LLAvatarActions::startIM(const LLUUID& id) make_ui_sound("UISndStartIM"); } +// static +void LLAvatarActions::endIM(const LLUUID& id) +{ + if (id.isNull()) + return; + + LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id); + if (session_id != LLUUID::null) + { + gIMMgr->leaveSession(session_id); + } +} + // static void LLAvatarActions::startCall(const LLUUID& id) { diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 66ea6880db..d9dab95a77 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -73,6 +73,11 @@ public: */ static void startIM(const LLUUID& id); + /** + * End instant messaging session. + */ + static void endIM(const LLUUID& id); + /** * Start an avatar-to-avatar voice call with another user */ diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 4078fac4ec..5375c3ea49 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -482,6 +482,10 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data) { LLAvatarActions::requestFriendshipDialog(other_participant_id); } + else if("close" == level) + { + LLAvatarActions::endIM(other_participant_id); + } } ////////////////////////////////////////////////////////////////////////// @@ -776,12 +780,16 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data) if("group chat" == level) { - LLGroupActions::startChat(group_id); + LLGroupActions::startIM(group_id); } else if("info" == level) { LLGroupActions::show(group_id); } + else if("close" == level) + { + LLGroupActions::endIM(group_id); + } } diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index 45af515a86..7cb925bc0b 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -327,7 +327,7 @@ void LLPanelGroups::startIM() if (group_list && (group_id = group_list->getCurrentID()).notNull()) { - LLGroupActions::startChat(group_id); + LLGroupActions::startIM(group_id); } } diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index e60bde9fd8..f4e1951c7b 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -272,7 +272,7 @@ void LLGroupActions::closeGroup(const LLUUID& group_id) // static -void LLGroupActions::startChat(const LLUUID& group_id) +void LLGroupActions::startIM(const LLUUID& group_id) { if (group_id.isNull()) return; @@ -298,6 +298,19 @@ void LLGroupActions::startChat(const LLUUID& group_id) } } +// static +void LLGroupActions::endIM(const LLUUID& group_id) +{ + if (group_id.isNull()) + return; + + LLUUID session_id = gIMMgr->computeSessionID(IM_SESSION_GROUP_START, group_id); + if (session_id != LLUUID::null) + { + gIMMgr->leaveSession(session_id); + } +} + // static bool LLGroupActions::isInGroup(const LLUUID& group_id) { diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h index 74c84d1561..9750b3e3cb 100644 --- a/indra/newview/llgroupactions.h +++ b/indra/newview/llgroupactions.h @@ -88,7 +88,12 @@ public: /** * Start group instant messaging session. */ - static void startChat(const LLUUID& group_id); + static void startIM(const LLUUID& group_id); + + /** + * End group instant messaging session. + */ + static void endIM(const LLUUID& group_id); /// Returns if the current user is a member of the group static bool isInGroup(const LLUUID& group_id); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 709525d4e2..4dc8872557 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1017,7 +1017,7 @@ void LLPanelPeople::onChatButtonClicked() { LLUUID group_id = getCurrentItemID(); if (group_id.notNull()) - LLGroupActions::startChat(group_id); + LLGroupActions::startIM(group_id); } void LLPanelPeople::onImButtonClicked() diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml index 542e319792..dfe4605b7a 100644 --- a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml +++ b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml @@ -24,4 +24,12 @@ function="IMChicletMenu.Action" parameter="info" /> + + + diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml index c205868429..4cabcb9031 100644 --- a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml +++ b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml @@ -32,4 +32,12 @@ function="IMChicletMenu.Action" parameter="add" /> + + + -- cgit v1.2.3