diff options
author | Loren Shih <seraph@lindenlab.com> | 2009-12-16 15:07:50 -0500 |
---|---|---|
committer | Loren Shih <seraph@lindenlab.com> | 2009-12-16 15:07:50 -0500 |
commit | 10de7713165bb69d9bbc082c6072e3ef8f7d7b8b (patch) | |
tree | 2fabb1669ce19f597956c651d37c48b4af011324 /indra | |
parent | 0c0cb6fd79d12016b32bb74ce0e9d2c656143902 (diff) | |
parent | fdf9f9d779c019c68528b4de2bb5776806b0dec4 (diff) |
product engine -> viewer2.0 merge
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llavataractions.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llbottomtray.cpp | 58 | ||||
-rw-r--r-- | indra/newview/llbottomtray.h | 2 | ||||
-rw-r--r-- | indra/newview/llimview.cpp | 115 | ||||
-rw-r--r-- | indra/newview/llimview.h | 22 | ||||
-rw-r--r-- | indra/newview/llnavigationbar.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llpanelpicks.cpp | 21 | ||||
-rw-r--r-- | indra/newview/llpanelpicks.h | 5 | ||||
-rw-r--r-- | indra/newview/llsyswellwindow.cpp | 18 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_session.xml | 12 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/panel_picks.xml | 7 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 8 |
12 files changed, 177 insertions, 109 deletions
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 33dc7ee2c8..636b1de4d4 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -211,11 +211,9 @@ void LLAvatarActions::startCall(const LLUUID& id) std::string name; gCacheName->getFullName(id, name); - LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id); + LLUUID session_id = gIMMgr->addSession(name, IM_NOTHING_SPECIAL, id, true); if (session_id != LLUUID::null) { - // always open IM window when connecting to voice - LLIMFloater::show(session_id); gIMMgr->startCall(session_id); } make_ui_sound("UISndStartIM"); @@ -239,15 +237,12 @@ void LLAvatarActions::startAdhocCall(const std::vector<LLUUID>& ids) // create the new ad hoc voice session const std::string title = LLTrans::getString("conference-title"); LLUUID session_id = gIMMgr->addSession(title, IM_SESSION_CONFERENCE_START, - ids[0], id_array); + ids[0], id_array, true); if (session_id == LLUUID::null) { return; } - // always open IM window when connecting to voice - LLIMFloater::show(session_id); - // start the call once the session has fully initialized gIMMgr->autoStartCallOnStartup(session_id); diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 8c793873f4..8389895479 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -78,6 +78,9 @@ LLBottomTray::LLBottomTray(const LLSD&) LLUICtrl::CommitCallbackRegistry::defaultRegistrar().add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraPresets, _2)); LLIMMgr::getInstance()->addSessionObserver(this); + //managing chiclets for voice calls + LLIMModel::getInstance()->addNewMsgCallback(boost::bind(&LLBottomTray::onNewIM, this, _1)); + //this is to fix a crash that occurs because LLBottomTray is a singleton //and thus is deleted at the end of the viewers lifetime, but to be cleanly //destroyed LLBottomTray requires some subsystems that are long gone @@ -143,25 +146,22 @@ LLIMChiclet* LLBottomTray::createIMChiclet(const LLUUID& session_id) //virtual void LLBottomTray::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) { - if(getChicletPanel()) - { - if(getChicletPanel()->findChiclet<LLChiclet>(session_id)) - { + if (!getChicletPanel()) return; - } - else - { - LLIMChiclet* chiclet = createIMChiclet(session_id); - if(chiclet) - { - chiclet->setIMSessionName(name); - chiclet->setOtherParticipantId(other_participant_id); - } - else - { - llerrs << "Could not create chiclet" << llendl; - } - } + if (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return; + + // For im sessions started as voice call chiclet gets created on the first incoming message + if (gIMMgr->isVoiceCall(session_id)) return; + + LLIMChiclet* chiclet = createIMChiclet(session_id); + if(chiclet) + { + chiclet->setIMSessionName(name); + chiclet->setOtherParticipantId(other_participant_id); + } + else + { + llerrs << "Could not create chiclet" << llendl; } } @@ -194,6 +194,28 @@ void LLBottomTray::sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& } } +void LLBottomTray::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 (getChicletPanel()->findChiclet<LLChiclet>(session_id)) return; + + //first real message, time to create chiclet + LLIMChiclet* chiclet = createIMChiclet(session_id); + if(chiclet) + { + chiclet->setIMSessionName(LLIMModel::getInstance()->getName(session_id)); + chiclet->setOtherParticipantId(LLIMModel::getInstance()->getOtherParticipantID(session_id)); + } +} + + // virtual void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, bool proximal) { diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index fa204ee9ea..1adea24ee4 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -75,6 +75,8 @@ public: virtual void sessionRemoved(const LLUUID& session_id); void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id); + void onNewIM(const LLSD& data); + virtual void reshape(S32 width, S32 height, BOOL called_from_parent); virtual void onFocusLost(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index b50d4674f7..1d56fc0cab 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -153,7 +153,7 @@ LLIMModel::LLIMModel() addNewMsgCallback(toast_callback); } -LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids) +LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice) : mSessionID(session_id), mName(name), mType(type), @@ -167,7 +167,8 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& mCallBackEnabled(true), mTextIMPossible(true), mOtherParticipantIsAvatar(true), - mStartCallOnInitialize(false) + mStartCallOnInitialize(false), + mStartedAsIMCall(voice) { // set P2P type by default mSessionType = P2P_SESSION; @@ -236,24 +237,25 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string& void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction) { - // *TODO: remove hardcoded string!!!!!!!!!!! - bool is_p2p_session = dynamic_cast<LLVoiceChannelP2P*>(mVoiceChannel); std::string other_avatar_name; if(is_p2p_session) { gCacheName->getFullName(mOtherParticipantID, other_avatar_name); + std::string you = LLTrans::getString("You"); + std::string started_call = LLTrans::getString("started_call"); + std::string joined_call = LLTrans::getString("joined_call"); if(direction == LLVoiceChannel::INCOMING_CALL) { switch(new_state) { case LLVoiceChannel::STATE_CALL_STARTED : - LLIMModel::getInstance()->addMessage(mSessionID, other_avatar_name, mOtherParticipantID, "Started a voice call"); + LLIMModel::getInstance()->addMessageSilently(mSessionID, other_avatar_name, mOtherParticipantID, started_call); break; case LLVoiceChannel::STATE_CONNECTED : - LLIMModel::getInstance()->addMessage(mSessionID, "You", gAgent.getID(), "Joined the voice call"); + LLIMModel::getInstance()->addMessageSilently(mSessionID, you, gAgent.getID(), joined_call); default: break; } @@ -263,10 +265,10 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES switch(new_state) { case LLVoiceChannel::STATE_CALL_STARTED : - LLIMModel::getInstance()->addMessage(mSessionID, "You", gAgent.getID(), "Started a voice call"); + LLIMModel::getInstance()->addMessageSilently(mSessionID, you, gAgent.getID(), started_call); break; case LLVoiceChannel::STATE_CONNECTED : - LLIMModel::getInstance()->addMessage(mSessionID, other_avatar_name, mOtherParticipantID, "Joined the voice call"); + LLIMModel::getInstance()->addMessageSilently(mSessionID, other_avatar_name, mOtherParticipantID, joined_call); default: break; } @@ -452,7 +454,7 @@ void LLIMModel::testMessages() //session name should not be empty bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, - const LLUUID& other_participant_id, const std::vector<LLUUID>& ids) + const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice) { if (name.empty()) { @@ -466,7 +468,7 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co return false; } - LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids); + LLIMSession* session = new LLIMSession(session_id, name, type, other_participant_id, ids, voice); mId2SessionMap[session_id] = session; LLIMMgr::getInstance()->notifyObserverSessionAdded(session_id, name, other_participant_id); @@ -475,6 +477,12 @@ bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, co } +bool LLIMModel::newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, bool voice) +{ + std::vector<LLUUID> no_ids; + return newSession(session_id, name, type, other_participant_id, no_ids, voice); +} + bool LLIMModel::clearSession(const LLUUID& session_id) { if (mId2SessionMap.find(session_id) == mId2SessionMap.end()) return false; @@ -574,12 +582,33 @@ bool LLIMModel::proccessOnlineOfflineNotification( bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text, bool log2file /* = true */) { + + LLIMSession* session = addMessageSilently(session_id, from, from_id, utf8_text, log2file); + if (!session) return false; + + // notify listeners + LLSD arg; + arg["session_id"] = session_id; + arg["num_unread"] = session->mNumUnread; + arg["participant_unread"] = session->mParticipantUnreadMessageCount; + arg["message"] = utf8_text; + arg["from"] = from; + arg["from_id"] = from_id; + arg["time"] = LLLogChat::timestamp(false); + mNewMsgSignal(arg); + + return true; +} + +LLIMModel::LLIMSession* LLIMModel::addMessageSilently(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, + const std::string& utf8_text, bool log2file /* = true */) +{ LLIMSession* session = findIMSession(session_id); if (!session) { llwarns << "session " << session_id << "does not exist " << llendl; - return false; + return NULL; } addToHistory(session_id, from, from_id, utf8_text); @@ -593,19 +622,7 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co ++(session->mParticipantUnreadMessageCount); } - - // notify listeners - LLSD arg; - arg["session_id"] = session_id; - arg["num_unread"] = session->mNumUnread; - arg["participant_unread"] = session->mParticipantUnreadMessageCount; - arg["message"] = utf8_text; - arg["from"] = from; - arg["from_id"] = from_id; - arg["time"] = LLLogChat::timestamp(false); - mNewMsgSignal(arg); - - return true; + return session; } @@ -1056,8 +1073,8 @@ public: || mInvitiationType == LLIMMgr::INVITATION_TYPE_IMMEDIATE) && LLIMModel::getInstance()->findIMSession(mSessionID)) { - // always open IM window when connecting to voice - LLIMFloater::show(mSessionID); + // TODO remove in 2010, for voice calls we do not open an IM window + //LLIMFloater::show(mSessionID); } gIMMgr->clearPendingAgentListUpdates(mSessionID); @@ -1582,11 +1599,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response) if (voice) { - if (gIMMgr->startCall(session_id, LLVoiceChannel::INCOMING_CALL)) - { - // always open IM window when connecting to voice - LLIMFloater::show(session_id); - } + gIMMgr->startCall(session_id, LLVoiceChannel::INCOMING_CALL); } gIMMgr->clearPendingAgentListUpdates(session_id); @@ -1625,11 +1638,7 @@ void LLIncomingCallDialog::processCallResponse(S32 response) } } - LLUUID new_session_id = gIMMgr->addSession(correct_session_name, type, session_id); - if (new_session_id != LLUUID::null) - { - LLIMFloater::show(new_session_id); - } + LLUUID new_session_id = gIMMgr->addSession(correct_session_name, type, session_id, true); std::string url = gAgent.getRegion()->getCapability( "ChatSessionRequest"); @@ -1705,11 +1714,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response) payload["session_handle"].asString(), payload["session_uri"].asString()); - if (gIMMgr->startCall(session_id)) - { - // always open IM window when connecting to voice - LLIMFloater::show(session_id); - } + gIMMgr->startCall(session_id); gIMMgr->clearPendingAgentListUpdates(session_id); gIMMgr->clearPendingInvitation(session_id); @@ -1719,11 +1724,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response) LLUUID new_session_id = gIMMgr->addSession( payload["session_name"].asString(), type, - session_id); - if (new_session_id != LLUUID::null) - { - LLIMFloater::show(new_session_id); - } + session_id, true); std::string url = gAgent.getRegion()->getCapability( "ChatSessionRequest"); @@ -2018,11 +2019,7 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name, const std::string& voice_session_handle, const std::string& caller_uri) { - LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id); - if (session_id != LLUUID::null) - { - LLIMFloater::show(session_id); - } + LLUUID session_id = addSession(name, IM_NOTHING_SPECIAL, other_participant_id, true); LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(session_id); if (speaker_mgr) @@ -2043,11 +2040,11 @@ LLUUID LLIMMgr::addP2PSession(const std::string& name, LLUUID LLIMMgr::addSession( const std::string& name, EInstantMessage dialog, - const LLUUID& other_participant_id) + const LLUUID& other_participant_id, bool voice) { LLDynamicArray<LLUUID> ids; ids.put(other_participant_id); - return addSession(name, dialog, other_participant_id, ids); + return addSession(name, dialog, other_participant_id, ids, voice); } // Adds a session using the given session_id. If the session already exists @@ -2056,7 +2053,7 @@ LLUUID LLIMMgr::addSession( const std::string& name, EInstantMessage dialog, const LLUUID& other_participant_id, - const LLDynamicArray<LLUUID>& ids) + const LLDynamicArray<LLUUID>& ids, bool voice) { if (0 == ids.getLength()) { @@ -2075,7 +2072,7 @@ LLUUID LLIMMgr::addSession( if (new_session) { - LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids); + LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids, voice); } @@ -2454,6 +2451,14 @@ bool LLIMMgr::endCall(const LLUUID& session_id) return true; } +bool LLIMMgr::isVoiceCall(const LLUUID& session_id) +{ + LLIMModel::LLIMSession* im_session = LLIMModel::getInstance()->findIMSession(session_id); + if (!im_session) return false; + + return im_session->mStartedAsIMCall; +} + // create a floater and update internal representation for // consistency. Returns the pointer, caller (the class instance since // it is a private method) is not responsible for deleting the diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index e2fcd63e28..6eb3f3d07f 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -65,7 +65,7 @@ public: } SType; LLIMSession(const LLUUID& session_id, const std::string& name, - const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids); + const EInstantMessage& type, const LLUUID& other_participant_id, const std::vector<LLUUID>& ids, bool voice); virtual ~LLIMSession(); void sessionInitReplyReceived(const LLUUID& new_session_id); @@ -104,6 +104,9 @@ public: bool mTextIMPossible; bool mOtherParticipantIsAvatar; bool mStartCallOnInitialize; + + //if IM session is created for a voice call + bool mStartedAsIMCall; }; @@ -143,7 +146,10 @@ public: * @param name session name should not be empty, will return false if empty */ bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, const LLUUID& other_participant_id, - const std::vector<LLUUID>& ids = std::vector<LLUUID>()); + const std::vector<LLUUID>& ids, bool voice = false); + + bool newSession(const LLUUID& session_id, const std::string& name, const EInstantMessage& type, + const LLUUID& other_participant_id, bool voice = false); /** * Remove all session data associated with a session specified by session_id @@ -163,6 +169,12 @@ public: bool addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true); /** + * Similar to addMessage(...) above but won't send a signal about a new message added + */ + LLIMModel::LLIMSession* addMessageSilently(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, + const std::string& utf8_text, bool log2file = true); + + /** * Add a system message to an IM Model */ bool proccessOnlineOfflineNotification(const LLUUID& session_id, const std::string& utf8_text); @@ -284,14 +296,14 @@ public: // session. LLUUID addSession(const std::string& name, EInstantMessage dialog, - const LLUUID& other_participant_id); + const LLUUID& other_participant_id, bool voice = false); // Adds a session using a specific group of starting agents // the dialog type is assumed correct. Returns the uuid of the session. LLUUID addSession(const std::string& name, EInstantMessage dialog, const LLUUID& other_participant_id, - const LLDynamicArray<LLUUID>& ids); + const LLDynamicArray<LLUUID>& ids, bool voice = false); /** * Creates a P2P session with the requisite handle for responding to voice calls. @@ -391,6 +403,8 @@ public: **/ bool endCall(const LLUUID& session_id); + bool isVoiceCall(const LLUUID& session_id); + private: /** diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index cdab3b2310..6210151d1b 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -261,9 +261,14 @@ BOOL LLNavigationBar::postBuild() void LLNavigationBar::setVisible(BOOL visible) { // change visibility of grandparent layout_panel to animate in and out - if (getParent() && getParent()->getParent()) + if (getParent()) { - getParent()->getParent()->setVisible(visible); + //to avoid some mysterious bugs like EXT-3352, at least try to log an incorrect parent to ping about a problem. + if(getParent()->getName() != "nav_bar_container") + { + LL_WARNS("LLNavigationBar")<<"NavigationBar has an unknown name of the parent: "<<getParent()->getName()<< LL_ENDL; + } + getParent()->setVisible(visible); } } diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 0a13180c73..4d22d96072 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -45,6 +45,7 @@ #include "llnotificationsutil.h" #include "lltexturectrl.h" #include "lltoggleablemenu.h" +#include "lltrans.h" #include "llviewergenericmessage.h" // send_generic_message #include "llmenugl.h" #include "llviewermenu.h" @@ -216,7 +217,9 @@ LLPanelPicks::LLPanelPicks() mClassifiedsAccTab(NULL), mPanelClassifiedInfo(NULL), mPanelClassifiedEdit(NULL), - mClickThroughDisp(NULL) + mClickThroughDisp(NULL), + mNoClassifieds(false), + mNoPicks(false) { mClickThroughDisp = new LLClassifiedClickThrough(); gGenericDispatcher.addHandler("classifiedclickthrough", mClickThroughDisp); @@ -242,6 +245,11 @@ void LLPanelPicks::updateData() // Send Picks request only when we need to, not on every onOpen(during tab switch). if(isDirty()) { + mNoPicks = false; + mNoClassifieds = false; + + childSetValue("picks_panel_text", LLTrans::getString("PicksClassifiedsLoadingText")); + mPicksList->clear(); LLAvatarPropertiesProcessor::getInstance()->sendAvatarPicksRequest(getAvatarId()); @@ -302,6 +310,8 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) resetDirty(); updateButtons(); } + + mNoPicks = !mPicksList->size(); } else if(APT_CLASSIFIEDS == type) { @@ -335,9 +345,14 @@ void LLPanelPicks::processProperties(void* data, EAvatarProcessorType type) resetDirty(); updateButtons(); } + + mNoClassifieds = !mClassifiedsList->size(); + } + + if (mNoPicks && mNoClassifieds) + { + childSetValue("picks_panel_text", LLTrans::getString("NoPicksClassifiedsText")); } - if(!mPicksList->size() && !mClassifiedsList->size()) - childSetVisible("empty_picks_panel_text", true); } LLPickItem* LLPanelPicks::getSelectedPickItem() diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 0ebf9e26dd..fd8a9e6938 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -157,6 +157,11 @@ private: LLAccordionCtrlTab* mClassifiedsAccTab; LLClassifiedClickThrough* mClickThroughDisp; + + //true if picks list is empty after processing picks + bool mNoPicks; + //true if classifieds list is empty after processing classifieds + bool mNoClassifieds; }; class LLPickItem : public LLPanel, public LLAvatarPropertiesObserver diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index ea49f9c32e..f49e7ef0da 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -709,15 +709,15 @@ BOOL LLIMWellWindow::postBuild() void LLIMWellWindow::sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) { - if (mMessageList->getItemByValue(session_id) == NULL) - { - S32 chicletCounter = LLIMModel::getInstance()->getNumUnread(session_id); - if (chicletCounter > -1) - { - addIMRow(session_id, chicletCounter, name, other_participant_id); - reshapeWindow(); - } - } + 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; + + if (!gIMMgr->hasSession(session_id)) return; + + addIMRow(session_id, 0, name, other_participant_id); + reshapeWindow(); } //virtual 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 645c2973d8..a4ade9d0df 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -12,14 +12,14 @@ can_dock="false" can_minimize="false" visible="true" - width="300" + width="360" can_resize="true" - min_width="300" + min_width="360" min_height="350"> <layout_stack follows="all" height="320" - width="300" + width="360" layout="topleft" orientation="horizontal" name="im_panels" @@ -36,7 +36,7 @@ left="0" top="0" height="200" - width="185" + width="245" user_resize="false"> <button height="20" @@ -63,7 +63,7 @@ parse_highlights="true" allow_html="true" left="1" - width="180"> + width="240"> </chat_history> <line_editor bottom="0" @@ -73,7 +73,7 @@ label="To" layout="bottomleft" name="chat_editor" - width="180"> + width="240"> </line_editor> </layout_panel> </layout_stack> diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml index 4facedc7ea..2230229b14 100644 --- a/indra/newview/skins/default/xui/en/panel_picks.xml +++ b/indra/newview/skins/default/xui/en/panel_picks.xml @@ -20,12 +20,9 @@ height="535" layout="topleft" left="6" - name="empty_picks_panel_text" + name="picks_panel_text" top="10" - visible="false" - width="313"> - There are no picks/classifieds here - </text> + width="313"/> <accordion fit_parent="true" follows="all" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 2f50c5ee6c..ec4723bd55 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2074,6 +2074,10 @@ this texture in your inventory <!-- panel classified --> <string name="ClassifiedClicksTxt">Clicks: [TELEPORT] teleport, [MAP] map, [PROFILE] profile</string> <string name="ClassifiedUpdateAfterPublish">(will update after publish)</string> + + <!-- panel picks --> + <string name="NoPicksClassifiedsText">There are no picks/classifieds here</string> + <string name="PicksClassifiedsLoadingText">Loading...</string> <!-- Multi Preview Floater --> <string name="MultiPreviewTitle">Preview</string> @@ -2842,6 +2846,10 @@ If you continue to receive this message, contact the [SUPPORT_SITE]. <string name="IM_to_label">To</string> <string name="IM_moderator_label">(Moderator)</string> + <!-- voice calls --> + <string name="started_call">Started a voice call</string> + <string name="joined_call">Joined the voice call</string> + <string name="ringing-im"> Joining Voice Chat... </string> |