summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/llavataractions.cpp7
-rw-r--r--indra/newview/llbottomtray.h10
-rw-r--r--indra/newview/llcallfloater.cpp2
-rw-r--r--indra/newview/llexpandabletextbox.cpp7
-rw-r--r--indra/newview/llexpandabletextbox.h1
-rw-r--r--indra/newview/llimfloater.cpp24
-rw-r--r--indra/newview/llimview.cpp7
-rw-r--r--indra/newview/llinventorybridge.cpp24
-rw-r--r--indra/newview/llsyswellwindow.cpp38
-rw-r--r--indra/newview/llsyswellwindow.h5
-rw-r--r--indra/newview/skins/default/xui/en/floater_im_session.xml5
-rw-r--r--indra/newview/skins/default/xui/en/floater_voice_controls.xml61
-rw-r--r--indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml9
-rw-r--r--indra/newview/skins/default/xui/en/panel_bottomtray.xml12
-rw-r--r--indra/newview/skins/default/xui/en/panel_group_control_panel.xml16
15 files changed, 151 insertions, 77 deletions
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index 636b1de4d4..c5a1ffdcb3 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -264,11 +264,8 @@ bool LLAvatarActions::isCalling(const LLUUID &id)
//static
bool LLAvatarActions::canCall(const LLUUID &id)
{
- if(isFriend(id))
- {
- return LLAvatarTracker::instance().isBuddyOnline(id) && LLVoiceClient::voiceEnabled();
- }
- else
+ // For now we do not need to check whether passed UUID is ID of agent's friend.
+ // Use common check of Voice Client state.
{
// don't need to check online/offline status because "usual resident" (resident that is not a friend)
// can be only ONLINE. There is no way to see "usual resident" in OFFLINE status. If we see "usual
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 1adea24ee4..209fa7cca1 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -92,6 +92,11 @@ public:
void showMoveButton(BOOL visible);
void showCameraButton(BOOL visible);
void showSnapshotButton(BOOL visible);
+
+ /**
+ * Creates IM Chiclet based on session type (IM chat or Group chat)
+ */
+ LLIMChiclet* createIMChiclet(const LLUUID& session_id);
private:
typedef enum e_resize_status_type
@@ -184,11 +189,6 @@ protected:
void onContextMenuItemClicked(const LLSD& userdata);
bool onContextMenuItemEnabled(const LLSD& userdata);
- /**
- * Creates IM Chiclet based on session type (IM chat or Group chat)
- */
- LLIMChiclet* createIMChiclet(const LLUUID& session_id);
-
LLChicletPanel* mChicletPanel;
LLPanel* mSpeakPanel;
LLSpeakButton* mSpeakBtn;
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 5f45abc922..1f23840109 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -241,7 +241,7 @@ void LLCallFloater::updateSession()
//hide "Leave Call" button for nearby chat
bool is_local_chat = mVoiceType == VC_LOCAL_CHAT;
- childSetVisible("leave_btn_panel", !is_local_chat);
+ childSetVisible("leave_call_btn", !is_local_chat);
refreshPartisipantList();
updateModeratorState();
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 9c37c953fe..9f6412c0ab 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -322,6 +322,13 @@ void LLExpandableTextBox::expandTextBox()
// hide "more" link, and show full text contents
mTextBox->hideExpandText();
+ // *HACK dz
+ // hideExpandText brakes text styles (replaces hyper-links with plain text), see ticket EXT-3290
+ // Set text again to make text box re-apply styles.
+ // *TODO Find proper solution to fix this issue.
+ // Maybe add removeSegment to LLTextBase
+ mTextBox->setTextBase(mText);
+
S32 text_delta = mTextBox->getVerticalTextDelta();
text_delta += mTextBox->getVPad() * 2;
text_delta += mScroll->getBorderWidth() * 2;
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index 7c989cfa50..2b4f9e527c 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -61,6 +61,7 @@ protected:
// adds or removes "More" link as needed
/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
/*virtual*/ void setText(const LLStringExplicit& text, const LLStyle::Params& input_params = LLStyle::Params());
+ void setTextBase(const std::string& text) { LLTextBase::setText(text); }
/**
* Returns difference between text box height and text height.
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index 7dc21e6e23..ca43833530 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -49,6 +49,7 @@
#include "lllogchat.h"
#include "llpanelimcontrolpanel.h"
#include "llscreenchannel.h"
+#include "llsyswellwindow.h"
#include "lltrans.h"
#include "llchathistory.h"
#include "llviewerwindow.h"
@@ -339,6 +340,29 @@ void LLIMFloater::onSlide()
//static
LLIMFloater* LLIMFloater::show(const LLUUID& session_id)
{
+ if (!gIMMgr->hasSession(session_id)) return NULL;
+
+ // we should make sure all related chiclets are in place when the session is a voice call
+ // chiclets come firts, then comes IM window
+ if (gIMMgr->isVoiceCall(session_id))
+ {
+ LLIMModel* im_model = LLIMModel::getInstance();
+ LLBottomTray* b_tray = LLBottomTray::getInstance();
+
+ //*TODO hide that into Bottom tray
+ if (!b_tray->getChicletPanel()->findChiclet<LLChiclet>(session_id))
+ {
+ LLIMChiclet* chiclet = b_tray->createIMChiclet(session_id);
+ if(chiclet)
+ {
+ chiclet->setIMSessionName(im_model->getName(session_id));
+ chiclet->setOtherParticipantId(im_model->getOtherParticipantID(session_id));
+ }
+ }
+
+ LLIMWellWindow::getInstance()->addIMRow(session_id);
+ }
+
bool not_existed = true;
if(isChatMultiTab())
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 28d9f2170d..9e878f8c75 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -1274,8 +1274,11 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)
}
sSession = session;
sSession->mVoiceChannel->setStateChangedCallback(LLCallDialogManager::onVoiceChannelStateChanged);
- sPreviousSessionlName = sCurrentSessionlName;
- sCurrentSessionlName = session->mName;
+ if(sCurrentSessionlName != session->mName)
+ {
+ sPreviousSessionlName = sCurrentSessionlName;
+ sCurrentSessionlName = session->mName;
+ }
}
void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction)
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index bacc685130..35ae4dee8e 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -2929,6 +2929,27 @@ LLInventoryModel::item_array_t::iterator findItemByUUID(LLInventoryModel::item_a
return result;
}
+// See also LLInventorySort where landmarks in the Favorites folder are sorted.
+class LLViewerInventoryItemSort
+{
+public:
+ bool operator()(const LLPointer<LLViewerInventoryItem>& a, const LLPointer<LLViewerInventoryItem>& b)
+ {
+ return a->getSortField() < b->getSortField();
+ }
+};
+
+/**
+ * Sorts passed items by LLViewerInventoryItem sort field.
+ *
+ * @param[in, out] items - array of items, not sorted.
+ */
+void rearrange_item_order_by_sort_field(LLInventoryModel::item_array_t& items)
+{
+ static LLViewerInventoryItemSort sort_functor;
+ std::sort(items.begin(), items.end(), sort_functor);
+}
+
void updateItemsOrder(LLInventoryModel::item_array_t& items, const LLUUID& srcItemId, const LLUUID& destItemId)
{
LLViewerInventoryItem* srcItem = gInventory.getItem(srcItemId);
@@ -3044,6 +3065,9 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
LLUUID srcItemId = inv_item->getUUID();
LLUUID destItemId = itemp->getListener()->getUUID();
+ // ensure items are sorted properly before changing order. EXT-3498
+ rearrange_item_order_by_sort_field(items);
+
// update order
updateItemsOrder(items, srcItemId, destItemId);
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index f49e7ef0da..3769ddb1cc 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -32,6 +32,8 @@
#include "llviewerprecompiledheaders.h" // must be first include
+#include "llagent.h"
+
#include "llflatlistview.h"
#include "llfloaterreg.h"
#include "llnotifications.h"
@@ -709,8 +711,8 @@ BOOL LLIMWellWindow::postBuild()
void LLIMWellWindow::sessionAdded(const LLUUID& session_id,
const std::string& name, const LLUUID& other_participant_id)
{
- if (!mMessageList->getItemByValue(session_id)) return;
-
+ if (mMessageList->getItemByValue(session_id)) return;
+
// For im sessions started as voice call chiclet gets created on the first incoming message
if (gIMMgr->isVoiceCall(session_id)) return;
@@ -857,4 +859,36 @@ void LLIMWellWindow::removeObjectRow(const LLUUID& object_id)
}
}
+
+void LLIMWellWindow::addIMRow(const LLUUID& session_id)
+{
+ if (hasIMRow(session_id)) return;
+
+ LLIMModel* im_model = LLIMModel::getInstance();
+ addIMRow(session_id, 0, im_model->getName(session_id), im_model->getOtherParticipantID(session_id));
+ reshapeWindow();
+}
+
+bool LLIMWellWindow::hasIMRow(const LLUUID& session_id)
+{
+ return mMessageList->getItemByValue(session_id);
+}
+
+void LLIMWellWindow::onNewIM(const LLSD& data)
+{
+ LLUUID from_id = data["from_id"];
+ if (from_id.isNull() || gAgentID == from_id) return;
+
+ LLUUID session_id = data["session_id"];
+ if (session_id.isNull()) return;
+
+ if (!gIMMgr->isVoiceCall(session_id)) return;
+
+ if (hasIMRow(session_id)) return;
+
+ //first real message, time to create chiclet
+ addIMRow(session_id);
+}
+
+
// EOF
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index fea145a17e..736b1b9fb4 100644
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -188,9 +188,14 @@ public:
/*virtual*/ void sessionRemoved(const LLUUID& session_id);
/*virtual*/ void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id);
+ void onNewIM(const LLSD& data);
+
void addObjectRow(const LLUUID& object_id, bool new_message = false);
void removeObjectRow(const LLUUID& object_id);
+ void addIMRow(const LLUUID& session_id);
+ bool hasIMRow(const LLUUID& session_id);
+
protected:
/*virtual*/ const std::string& getAnchorViewName() { return IM_WELL_ANCHOR_NAME; }
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index a4ade9d0df..156370a459 100644
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -30,14 +30,15 @@
layout="topleft"
follows="left"
label="IM Control Panel"
+ min_width="115"
auto_resize="false"
- user_resize="false" />
+ user_resize="true" />
<layout_panel
left="0"
top="0"
height="200"
width="245"
- user_resize="false">
+ user_resize="true">
<button
height="20"
follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
index c1a211967c..a86126227e 100644
--- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml
+++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml
@@ -31,12 +31,14 @@
No one near
</string>
<panel
- bevel_style="in"
+ bevel_style="out"
+ border="true"
follows="left|right|top"
height="62"
layout="topleft"
left="0"
name="control_panel"
+ top="0"
width="282">
<panel
height="18"
@@ -79,51 +81,14 @@
visible="true"
width="20" />
</panel>
- <layout_stack
- animate="false"
- bottom="10"
- clip="false"
+ <button
follows="left|right|top"
height="24"
- layout="bottomleft"
- orientation="horizontal"
- width="262">
- <layout_panel
- auto_resize="false"
- follows="left"
- layout="topleft"
- min_width="24"
- name="microphone_icon_panel"
- top="0"
- user_resize="false"
- width="24">
- <icon
- height="24"
- image_name="Microphone_On"
- layout="topleft"
- name="Microphone_On"
- top="0"
- width="24" />
- </layout_panel>
- <layout_panel
- auto_resize="false"
- layout="topleft"
- min_width="100"
- name="leave_btn_panel"
- top="0"
- user_resize="false"
- visible="false"
- width="100">
- <button
- follows="left|right|top"
- height="24"
- label="Leave Call"
- left="0"
- name="leave_call_btn"
- top="0"
- width="100" />
- </layout_panel>
- </layout_stack>
+ label="Leave Call"
+ left="91"
+ name="leave_call_btn"
+ top_pad="6"
+ width="100" />
</panel>
<avatar_list
follows="all"
@@ -143,4 +108,12 @@
name="non_avatar_caller"
top="70"
width="282" />
+ <view_border
+ bevel_style="out"
+ follows="left|top|right|bottom"
+ height="206"
+ layout="topleft"
+ left="0"
+ top="63"
+ width="282" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
index f5fce65c73..f3a2297151 100644
--- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml
@@ -36,9 +36,9 @@
follows="all"
height="20"
label="Call"
- left_delta="40"
+ left_delta="10"
name="call_btn"
- width="100" />
+ width="160" />
<button
bottom="40"
follows="all"
@@ -46,14 +46,15 @@
label="Leave Call"
name="end_call_btn"
visible="false"
- width="100" />
+ />
<button
follows="all"
bottom="10"
height="20"
label="Voice Controls"
name="voice_ctrls_btn"
+ use_ellipses="true"
visible="false"
- width="100" />
+ />
</panel>
</panel>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index 034f685ee9..3e2910458f 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -351,9 +351,9 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
height="23"
image_overlay="Unread_IM"
image_overlay_alignment="center"
- image_pressed="WellButton_Lit_Selected"
- image_pressed_selected="WellButton_Lit"
- image_selected="WellButton_Lit"
+ image_pressed="WellButton_Lit"
+ image_pressed_selected="WellButton_Lit_Selected"
+ image_selected="PushButton_Selected_Press"
label_color="Black"
left="0"
max_displayed_count="99"
@@ -391,9 +391,9 @@ image_pressed_selected "Lit" + "Selected" - there are new messages and the Well
width="35">
<button
bottom_pad="3"
- image_selected="WellButton_Lit"
- image_pressed="WellButton_Lit_Selected"
- image_pressed_selected="WellButton_Lit "
+ image_pressed="WellButton_Lit"
+ image_pressed_selected="WellButton_Lit_Selected"
+ image_selected="PushButton_Selected_Press"
auto_resize="true"
halign="center"
height="23"
diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
index a5445a5783..86b30ebfce 100644
--- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
+++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml
@@ -24,9 +24,10 @@
follows="left|right|bottom"
height="23"
label="Group Profile"
- left_delta="28"
+ left_delta="10"
name="group_info_btn"
- width="125" />
+ use_ellipses="true"
+ width="160" />
<panel
background_visible="true"
bg_alpha_color="DkGray2"
@@ -43,24 +44,27 @@
follows="all"
height="23"
label="Call Group"
- left_delta="28"
+ left_delta="10"
name="call_btn"
- width="125" />
+ use_ellipses="true"
+ width="160" />
<button
bottom="40"
follows="all"
height="23"
label="Leave Call"
name="end_call_btn"
+ use_ellipses="true"
visible="false"
- width="125" />
+ />
<button
bottom="10"
follows="all"
height="23"
label="Open Voice Controls"
name="voice_ctrls_btn"
+ use_ellipses="true"
visible="false"
- width="125" />
+ />
</panel>
</panel>