diff options
29 files changed, 205 insertions, 95 deletions
diff --git a/indra/llui/llsearcheditor.cpp b/indra/llui/llsearcheditor.cpp index 8075575bab..ec2ad5e5fa 100644 --- a/indra/llui/llsearcheditor.cpp +++ b/indra/llui/llsearcheditor.cpp @@ -44,17 +44,28 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p) S32 srch_btn_top = p.search_button.top_pad + p.search_button.rect.height; S32 srch_btn_right = p.search_button.rect.width + p.search_button.left_pad; LLRect srch_btn_rect(p.search_button.left_pad, srch_btn_top, srch_btn_right, p.search_button.top_pad); + + S32 clr_btn_top = p.clear_button.rect.bottom + p.clear_button.rect.height; + S32 clr_btn_right = getRect().getWidth() - p.clear_button.pad_right; + S32 clr_btn_left = clr_btn_right - p.clear_button.rect.width; + LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom); + S32 text_pad_left = p.text_pad_left; + S32 text_pad_right = p.text_pad_right; if (p.search_button_visible) text_pad_left += srch_btn_rect.getWidth(); + if (p.clear_button_visible) + text_pad_right = getRect().getWidth() - clr_btn_left + p.clear_button.pad_left; + // Set up line editor. LLLineEditor::Params line_editor_params(p); line_editor_params.name("filter edit box"); line_editor_params.rect(getLocalRect()); line_editor_params.follows.flags(FOLLOWS_ALL); line_editor_params.text_pad_left(text_pad_left); + line_editor_params.text_pad_right(text_pad_right); line_editor_params.revert_on_esc(false); line_editor_params.commit_callback.function(boost::bind(&LLUICtrl::onCommit, this)); line_editor_params.keystroke_callback(boost::bind(&LLSearchEditor::handleKeystroke, this)); @@ -82,10 +93,6 @@ LLSearchEditor::LLSearchEditor(const LLSearchEditor::Params& p) // Set up clear button. LLButton::Params clr_btn_params(p.clear_button); clr_btn_params.name(std::string("clear button")); - S32 clr_btn_top = clr_btn_params.rect.bottom + clr_btn_params.rect.height; - S32 clr_btn_right = getRect().getWidth() - clr_btn_params.pad_right; - S32 clr_btn_left = clr_btn_right - clr_btn_params.rect.width; - LLRect clear_btn_rect(clr_btn_left, clr_btn_top, clr_btn_right, p.clear_button.rect.bottom); clr_btn_params.rect(clear_btn_rect) ; clr_btn_params.follows.flags(FOLLOWS_RIGHT|FOLLOWS_TOP); clr_btn_params.tab_stop(false); diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 76e058a1c3..c8552de66a 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -115,6 +115,9 @@ LLCallFloater::LLCallFloater(const LLSD& key) mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL); LLVoiceClient::getInstance()->addObserver(this); LLTransientFloaterMgr::getInstance()->addControlView(this); + + // force docked state since this floater doesn't save it between recreations + setDocked(true); } LLCallFloater::~LLCallFloater() diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index e164aa8fc4..81edb55f93 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -144,6 +144,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification) std::string messageText = notification["message"].asString(); // UTF-8 line of text std::string fromName = notification["from"].asString(); // agent or object name mFromID = notification["from_id"].asUUID(); // agent id or object id + mFromName = fromName; int sType = notification["source"].asInteger(); mSourceType = (EChatSourceType)sType; diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h index 4d730573d9..b28c9dbc4b 100644 --- a/indra/newview/llchatitemscontainerctrl.h +++ b/indra/newview/llchatitemscontainerctrl.h @@ -60,6 +60,7 @@ public: static LLNearbyChatToastPanel* createInstance(); const LLUUID& getFromID() const { return mFromID;} + const std::string& getFromName() const { return mFromName; } //void addText (const std::string& message , const LLStyle::Params& input_params = LLStyle::Params()); //void setMessage (const LLChat& msg); @@ -84,9 +85,11 @@ public: virtual void draw(); + //*TODO REMOVE, why a dup of getFromID? const LLUUID& messageID() const { return mFromID;} private: LLUUID mFromID; // agent id or object id + std::string mFromName; EChatSourceType mSourceType; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index abf60a29b4..d0188352c7 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -241,6 +241,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val) BOOL LLFloaterCamera::postBuild() { setIsChrome(TRUE); + setTitleVisible(TRUE); // restore title visibility after chrome applying mRotate = getChild<LLJoystickCameraRotate>(ORBIT); mZoom = getChild<LLPanelCameraZoom>(ZOOM); @@ -295,6 +296,31 @@ void LLFloaterCamera::setMode(ECameraControlMode mode) updateState(); } +void LLFloaterCamera::setModeTitle(const ECameraControlMode mode) +{ + std::string title; + switch(mode) + { + case CAMERA_CTRL_MODE_ORBIT: + title = getString("orbit_mode_title"); + break; + case CAMERA_CTRL_MODE_PAN: + title = getString("pan_mode_title"); + break; + case CAMERA_CTRL_MODE_AVATAR_VIEW: + title = getString("avatar_view_mode_title"); + break; + case CAMERA_CTRL_MODE_FREE_CAMERA: + title = getString("free_mode_title"); + break; + default: + // title should be provided for all modes + llassert(false); + break; + } + setTitle(title); +} + void LLFloaterCamera::switchMode(ECameraControlMode mode) { setMode(mode); @@ -355,6 +381,8 @@ void LLFloaterCamera::updateState() childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode); updateCameraPresetButtons(); + setModeTitle(mCurrMode); + //hiding or showing the panel with controls by reshaping the floater bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode; diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index f908ad08be..b268839165 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -100,6 +100,9 @@ private: /* sets a new mode preserving previous one and updates ui*/ void setMode(ECameraControlMode mode); + /** set title appropriate to passed mode */ + void setModeTitle(const ECameraControlMode mode); + /* updates the state (UI) according to the current mode */ void updateState(); diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7d527fa98a..e50753c1c5 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2163,6 +2163,15 @@ void LLFolderView::doIdle() LLSelectFirstFilteredItem filter; applyFunctorRecursively(filter); } + + // Open filtered folders for folder views with mAutoSelectOverride=TRUE. + // Used by LLPlacesFolderView. + if (mAutoSelectOverride && mFilter->getFilterSubString() != "") + { + LLOpenFilteredFolders filter; + applyFunctorRecursively(filter); + } + scrollToShowSelection(); } diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index db7998fe6e..d518318b0e 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -96,29 +96,8 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp, LLUUID session_id = floaterp->getKey(); - LLIconCtrl* icon = 0; - - if(gAgent.isInGroup(session_id, TRUE)) - { - LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); - icon_params.group_id = session_id; - icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); - - mSessions[session_id] = floaterp; - floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); - } - else - { - LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); - - LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); - icon_params.avatar_id = avatar_id; - icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); - - mSessions[session_id] = floaterp; - floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); - } - mTabContainer->setTabImage(floaterp, icon); + floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); + mSessions[session_id] = floaterp; } void LLIMFloaterContainer::onCloseFloater(LLUUID& id) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index faddffe0fc..e87399abab 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1473,6 +1473,8 @@ LLCallDialog::LLCallDialog(const LLSD& payload) mLifetime(DEFAULT_LIFETIME) { setAutoFocus(FALSE); + // force docked state since this floater doesn't save it between recreations + setDocked(true); } void LLCallDialog::getAllowedRect(LLRect& rect) diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp index df93930d33..7906d9b20f 100644 --- a/indra/newview/lllocationhistory.cpp +++ b/indra/newview/lllocationhistory.cpp @@ -63,6 +63,7 @@ void LLLocationHistory::addItem(const LLLocationHistoryItem& item) { mItems.erase(mItems.begin(), mItems.end()-max_items); } llassert((S32)mItems.size() <= max_items); + mChangedSignal(ADD); } /* @@ -87,9 +88,10 @@ bool LLLocationHistory::touchItem(const LLLocationHistoryItem& item) { void LLLocationHistory::removeItems() { mItems.clear(); + mChangedSignal(CLEAR); } -bool LLLocationHistory::getMatchingItems(std::string substring, location_list_t& result) const +bool LLLocationHistory::getMatchingItems(const std::string& substring, location_list_t& result) const { // *TODO: an STL algorithm would look nicer result.clear(); @@ -160,7 +162,7 @@ void LLLocationHistory::load() return; } - removeItems(); + mItems.clear();// need to use a direct call of clear() method to avoid signal invocation // add each line in the file to the list std::string line; @@ -179,5 +181,5 @@ void LLLocationHistory::load() file.close(); - mLoadedSignal(); + mChangedSignal(LOAD); } diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h index 65f0dd2e1b..fb71fbaa0f 100644 --- a/indra/newview/lllocationhistory.h +++ b/indra/newview/lllocationhistory.h @@ -111,9 +111,16 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory> LOG_CLASS(LLLocationHistory); public: + enum EChangeType + { + ADD + ,CLEAR + ,LOAD + }; + typedef std::vector<LLLocationHistoryItem> location_list_t; - typedef boost::function<void()> loaded_callback_t; - typedef boost::signals2::signal<void()> loaded_signal_t; + typedef boost::function<void(EChangeType event)> history_changed_callback_t; + typedef boost::signals2::signal<void(EChangeType event)> history_changed_signal_t; LLLocationHistory(); @@ -122,8 +129,8 @@ public: void removeItems(); size_t getItemCount() const { return mItems.size(); } const location_list_t& getItems() const { return mItems; } - bool getMatchingItems(std::string substring, location_list_t& result) const; - boost::signals2::connection setLoadedCallback(loaded_callback_t cb) { return mLoadedSignal.connect(cb); } + bool getMatchingItems(const std::string& substring, location_list_t& result) const; + boost::signals2::connection setChangedCallback(history_changed_callback_t cb) { return mChangedSignal.connect(cb); } void save() const; void load(); @@ -133,7 +140,7 @@ private: location_list_t mItems; std::string mFilename; /// File to store the history to. - loaded_signal_t mLoadedSignal; + history_changed_signal_t mChangedSignal; }; #endif diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 5f233bece0..0ea4b1f6da 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -52,7 +52,6 @@ #include "llinventoryobserver.h" #include "lllandmarkactions.h" #include "lllandmarklist.h" -#include "lllocationhistory.h" #include "llteleporthistory.h" #include "llsidetray.h" #include "llslurl.h" @@ -377,9 +376,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) // - Update the location string on parcel change. mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this)); - - mLocationHistoryConnection = LLLocationHistory::getInstance()->setLoadedCallback( - boost::bind(&LLLocationInputCtrl::onLocationHistoryLoaded, this)); + // LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually. + mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0); + mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback( + boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1)); mRemoveLandmarkObserver = new LLRemoveLandmarkObserver(this); mAddLandmarkObserver = new LLAddLandmarkObserver(this); @@ -620,9 +620,13 @@ void LLLocationInputCtrl::onLandmarkLoaded(LLLandmark* lm) updateAddLandmarkButton(); } -void LLLocationInputCtrl::onLocationHistoryLoaded() +void LLLocationInputCtrl::onLocationHistoryChanged(LLLocationHistory::EChangeType event) { - rebuildLocationHistory(); + if(event == LLLocationHistory::LOAD) + { + rebuildLocationHistory(); + } + mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0); } void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data) @@ -893,7 +897,7 @@ void LLLocationInputCtrl::positionMaturityIcon() mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad); } -void LLLocationInputCtrl::rebuildLocationHistory(std::string filter) +void LLLocationInputCtrl::rebuildLocationHistory(const std::string& filter) { LLLocationHistory::location_list_t filtered_items; const LLLocationHistory::location_list_t* itemsp = NULL; diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 4bb41f3bf4..dac6be2a24 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -36,6 +36,7 @@ #include "llcombobox.h" #include "lliconctrl.h" // Params #include "lltextbox.h" // Params +#include "lllocationhistory.h" class LLLandmark; @@ -137,7 +138,7 @@ private: void refreshHealth(); void positionMaturityIcon(); - void rebuildLocationHistory(std::string filter = ""); + void rebuildLocationHistory(const std::string& filter = LLStringUtil::null); bool findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter); void setText(const LLStringExplicit& text); void updateAddLandmarkButton(); @@ -147,7 +148,7 @@ private: void changeLocationPresentation(); void onInfoButtonClicked(); - void onLocationHistoryLoaded(); + void onLocationHistoryChanged(LLLocationHistory::EChangeType event); void onLocationPrearrange(const LLSD& data); void onTextEditorRightClicked(S32 x, S32 y, MASK mask); void onLandmarkLoaded(LLLandmark* lm); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 97e2b5b86e..1853b511be 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -77,7 +77,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key) mTurnRightButton(NULL), mMoveUpButton(NULL), mMoveDownButton(NULL), - mStopFlyingButton(NULL), mModeActionsPanel(NULL), mCurrentMode(MM_WALK) { @@ -87,6 +86,7 @@ LLFloaterMove::LLFloaterMove(const LLSD& key) BOOL LLFloaterMove::postBuild() { setIsChrome(TRUE); + setTitleVisible(TRUE); // restore title visibility after chrome applying LLDockableFloater::postBuild(); @@ -112,8 +112,6 @@ BOOL LLFloaterMove::postBuild() mMoveDownButton->setHeldDownCallback(boost::bind(&LLFloaterMove::moveDown, this)); - mStopFlyingButton = getChild<LLButton>("stop_fly_btn"); - mModeActionsPanel = getChild<LLPanel>("panel_modes"); LLButton* btn; @@ -126,11 +124,6 @@ BOOL LLFloaterMove::postBuild() btn = getChild<LLButton>("mode_fly_btn"); btn->setCommitCallback(boost::bind(&LLFloaterMove::onFlyButtonClick, this)); - btn = getChild<LLButton>("stop_fly_btn"); - btn->setCommitCallback(boost::bind(&LLFloaterMove::onStopFlyingButtonClick, this)); - - - showFlyControls(false); initModeTooltips(); @@ -304,10 +297,6 @@ void LLFloaterMove::onFlyButtonClick() { setMovementMode(MM_FLY); } -void LLFloaterMove::onStopFlyingButtonClick() -{ - setMovementMode(gAgent.getAlwaysRun() ? MM_RUN : MM_WALK); -} void LLFloaterMove::setMovementMode(const EMovementMode mode) { @@ -353,16 +342,13 @@ void LLFloaterMove::updateButtonsWithMovementMode(const EMovementMode newMode) showFlyControls(MM_FLY == newMode); setModeTooltip(newMode); setModeButtonToggleState(newMode); + setModeTitle(newMode); } void LLFloaterMove::showFlyControls(bool bShow) { mMoveUpButton->setVisible(bShow); mMoveDownButton->setVisible(bShow); - - // *TODO: mantipov: mStopFlyingButton from the FloaterMove is not used now. - // It was not completly removed until functionality is reviewed by LL - mStopFlyingButton->setVisible(FALSE); } void LLFloaterMove::initModeTooltips() @@ -420,11 +406,30 @@ void LLFloaterMove::setModeTooltip(const EMovementMode mode) } } +void LLFloaterMove::setModeTitle(const EMovementMode mode) +{ + std::string title; + switch(mode) + { + case MM_WALK: + title = getString("walk_title"); + break; + case MM_RUN: + title = getString("run_title"); + break; + case MM_FLY: + title = getString("fly_title"); + break; + default: + // title should be provided for all modes + llassert(false); + break; + } + setTitle(title); +} + /** * Updates position of the floater to be center aligned with Move button. - * - * Because Tip floater created as dependent floater this method - * must be called before "showQuickTips()" to get Tip floater be positioned at the right side of the floater */ void LLFloaterMove::updatePosition() { diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index 06463f02af..dcca8308d9 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -86,13 +86,12 @@ private: void onWalkButtonClick(); void onRunButtonClick(); void onFlyButtonClick(); - void onStopFlyingButtonClick(); void initMovementMode(); void setMovementMode(const EMovementMode mode); void showFlyControls(bool bShow); void initModeTooltips(); void setModeTooltip(const EMovementMode mode); - void showQuickTips(const EMovementMode mode); + void setModeTitle(const EMovementMode mode); void initModeButtonMap(); void setModeButtonToggleState(const EMovementMode mode); void updateButtonsWithMovementMode(const EMovementMode newMode); @@ -108,7 +107,6 @@ public: LLButton* mMoveUpButton; LLButton* mMoveDownButton; private: - LLButton* mStopFlyingButton; LLPanel* mModeActionsPanel; typedef std::map<LLView*, std::string> control_tooltip_map_t; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index d42e4bc250..e11df06d86 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -451,6 +451,12 @@ void LLNavigationBar::onLocationSelection() return; //get selected item from combobox item LLSD value = mCmbLocation->getSelectedValue(); + if(value.isUndefined() && !mCmbLocation->getTextEntry()->isDirty()) + { + // At this point we know that: there is no selected item in list and text field has NOT been changed + // So there is no sense to try to change the location + return; + } /* since navbar list support autocompletion it contains several types of item: landmark, teleport hystory item, * typed by user slurl or region name. Let's find out which type of item the user has selected * to make decision about adding this location into typed history. see mSaveToLocationHistory diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index a211adc79d..08ae93c3a6 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -176,10 +176,11 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) if(m_active_toasts.size()) { LLUUID fromID = notification["from_id"].asUUID(); // agent id or object id + std::string from = notification["from"].asString(); LLToast* toast = m_active_toasts[0]; LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel()); - if(panel && panel->messageID() == fromID && panel->canAddText()) + if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText()) { panel->addMessage(notification); toast->reshapeToPanel(); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 2d3401966b..50cfc7d177 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -420,10 +420,8 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) gInventory.startBackgroundFetch(); - std::string uppercase_search_string = search_string; - LLStringUtil::toUpper(uppercase_search_string); - mFilterSubString = uppercase_search_string; - if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty()) + mFilterSubString = search_string; + if (mActivePanel->getFilterSubString().empty() && mFilterSubString.empty()) { // current filter and new filter empty, do nothing return; @@ -437,7 +435,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string ) } // set new filter string - mActivePanel->setFilterSubString(mFilterSubString); + setFilterSubString(mFilterSubString); } diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 9ebc8ca2b9..f6133d4446 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -256,7 +256,7 @@ void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent) static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0); S32 scroll_height = mScrollContainer->getRect().getHeight(); - if (mScrollingPanelMinHeight >= scroll_height) + if (mScrollingPanelMinHeight > scroll_height) { mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight); } diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index 8de87eb602..320456e1e2 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -37,6 +37,7 @@ #include "llagent.h" // gAgent #include "lluicolortable.h" #include "llviewercontrol.h" // gSavedSettings +#include "llinstantmessage.h" //SYSTEM_FROM // LLViewerChat @@ -55,7 +56,7 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color) r_color = LLUIColorTable::instance().getColor("SystemChatColor"); break; case CHAT_SOURCE_AGENT: - if (chat.mFromID.isNull()) + if (chat.mFromID.isNull() || SYSTEM_FROM == chat.mFromName) { r_color = LLUIColorTable::instance().getColor("SystemChatColor"); } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 59606f17b2..5ba13efca2 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -102,6 +102,13 @@ const F32 UPDATE_THROTTLE_SECONDS = 0.1f; const F32 LOGIN_RETRY_SECONDS = 10.0f; const int MAX_LOGIN_RETRIES = 12; +// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine() +// which is treated as normal. If this number is exceeded we suspect there is a problem with connection +// to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen +// to make sure we don't make mistake when slight connection problems happen- situation when connection to server is +// blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability. +const int MAX_NORMAL_JOINING_SPATIAL_NUM = 50; + static void setUUIDFromStringHash(LLUUID &uuid, const std::string &str) { LLMD5 md5_uuid; @@ -1221,6 +1228,7 @@ LLVoiceClient::LLVoiceClient() : mRelogRequested(false), mConnected(false), mPump(NULL), + mSpatialJoiningNum(0), mTuningMode(false), mTuningEnergy(0.0f), @@ -2223,6 +2231,8 @@ void LLVoiceClient::stateMachine() //MARK: stateNoChannel case stateNoChannel: + + mSpatialJoiningNum = 0; // Do this here as well as inside sendPositionalUpdate(). // Otherwise, if you log in but don't join a proximal channel (such as when your login location has voice disabled), your friends list won't sync. sendFriendsListUpdates(); @@ -2279,6 +2289,23 @@ void LLVoiceClient::stateMachine() //MARK: stateJoiningSession case stateJoiningSession: // waiting for session handle + + // If this is true we have problem with connection to voice server (EXT-4313). + // See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM. + if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM) + { + // Notify observers to let them know there is problem with voice + notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED); + llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl; + } + + // Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for + // example for p2p many times while waiting for response, so it can't be used to detect errors + if(mAudioSession && mAudioSession->mIsSpatial) + { + mSpatialJoiningNum++; + } + // joinedAudioSession() will transition from here to stateSessionJoined. if(!mVoiceEnabled) { @@ -2302,6 +2329,8 @@ void LLVoiceClient::stateMachine() //MARK: stateSessionJoined case stateSessionJoined: // session handle received + + mSpatialJoiningNum = 0; // It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4 // before continuing from this state. They can happen in either order, and if I don't wait for both, things can get stuck. // For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined. @@ -5992,7 +6021,9 @@ bool LLVoiceClient::voiceEnabled() bool LLVoiceClient::voiceWorking() { //Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758) - return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated); + // Condition with joining spatial num was added to take into account possible problems with connection to voice + // server(EXT-4313). See bug descriptions and comments for MAX_NORMAL_JOINING_SPATIAL_NUM for more info. + return (mSpatialJoiningNum < MAX_NORMAL_JOINING_SPATIAL_NUM) && (stateLoggedIn <= mState) && (mState <= stateSessionTerminated); } void LLVoiceClient::setLipSyncEnabled(BOOL enabled) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index a96cf18e27..aaacab69e0 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -586,6 +586,10 @@ static void updatePosition(void); state mState; bool mSessionTerminateRequested; bool mRelogRequested; + // Number of times (in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine(). + // The larger it is the greater is possibility there is a problem with connection to voice server. + // Introduced while fixing EXT-4313. + int mSpatialJoiningNum; void setState(state inState); state getState(void) { return mState; }; diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index f69c763f78..b45e39a111 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -27,6 +27,22 @@ name="move_tooltip"> Move Camera Up and Down, Left and Right </floater.string> + <floater.string + name="orbit_mode_title"> + Orbit + </floater.string> + <floater.string + name="pan_mode_title"> + Pan + </floater.string> + <floater.string + name="avatar_view_mode_title"> + Presets + </floater.string> + <floater.string + name="free_mode_title"> + View Object + </floater.string> <panel border="false" height="110" @@ -232,7 +248,7 @@ image_selected="PushButton_Selected_Press" name="avatarview_btn" tab_stop="false" - tool_tip="See as avatar" + tool_tip="Presets" width="25"> </button> <button diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 65a05f3ec5..0f098bbb52 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -22,9 +22,7 @@ tab_width="64" tab_max_width = "134" tab_height="16" - use_custom_icon_ctrl="true" - tab_icon_ctrl_pad="2" - halign="left" + halign="center" use_ellipses="true" top="0" width="390" /> diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 0a5820ce73..8e2c57764b 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -38,6 +38,18 @@ name="fly_back_tooltip"> Fly Backwards (press Down Arrow or S) </string> + <string + name="walk_title"> + Walk + </string> + <string + name="run_title"> + Run + </string> + <string + name="fly_title"> + Fly + </string> <panel border="false" height="83" @@ -179,16 +191,5 @@ tool_tip="Flying mode" top="2" width="31" /> - <button - visible="false" - follows="left|bottom" - height="20" - label="Stop Flying" - layout="topleft" - left="0" - name="stop_fly_btn" - tool_tip="Stop flying" - top="2" - width="115" /> </panel> </floater> diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index 66070c028d..befeb182f9 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -89,13 +89,13 @@ <panel bg_alpha_color="DkGray2" follows="left|top|right" - height="700" + height="630" layout="topleft" left="0" min_height="300" name="scrolling_panel" top="0" - width="285"> + width="310"> <texture_picker enabled="false" follows="left|top|right" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index daab52f06a..f0186a46bb 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -222,7 +222,7 @@ top="10" width="293" wrap="true"> - To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend. + To add friends try [secondlife:///app/search/people global search] or use right click on a user to add them as a friend. If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map]. </text> </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index b22dad5841..7672bd0799 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -174,13 +174,13 @@ <panel bg_alpha_color="DkGray2" follows="left|top|right" - height="700" + height="532" layout="topleft" left="0" min_height="300" name="scrolling_panel" top="0" - width="285"> + width="310"> <texture_picker enabled="false" follows="left|top|right" diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml index a9a760b3a4..32e443a058 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml @@ -3,6 +3,7 @@ clear_button_visible="false" search_button_visible="true" text_pad_left="6" + text_pad_right="6" select_on_focus="true" text_tentative_color="TextFgTentativeColor" background_image="TextField_Search_Off" @@ -21,5 +22,6 @@ image_unselected="Icon_Close_Foreground" image_selected="Icon_Close_Press" pad_right="4" + pad_left="4" width="16" /> </search_editor> |