diff options
32 files changed, 189 insertions, 94 deletions
@@ -541,3 +541,4 @@ ad0e15543836d64d6399d28b32852510435e344a 5.1.0-release ac3b1332ad4f55b7182a8cbcc1254535a0069f75 5.1.7-release 23ea0fe36fadf009a60c080392ce80e4bf8af8d9 5.1.8-release 52422540bfe54b71155aa455360bee6e3ef1fd96 5.1.9-release +821edfcd14919c0e95c590866171c61fb57e8623 6.0.0-release diff --git a/autobuild.xml b/autobuild.xml index 3107d77548..513728623b 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -2526,9 +2526,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>bb8bed08fd5973a040c509ef8b545ec8</string> + <string>2c17cfd900c88914e06947fe0f1fdae4</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/490/1046/ogg_vorbis-1.2.2-1.3.2.500397-darwin64-500397.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25395/199641/ogg_vorbis-1.3.3-1.3.6.520171-darwin64-520171.tar.bz2</string> </map> <key>name</key> <string>darwin64</string> @@ -2562,9 +2562,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>f7edf86dcf2d9be7bee98c91256fa569</string> + <string>1818627d4d1f05b49709717e240bdcf4</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/512/1108/ogg_vorbis-1.2.2-1.3.2.500397-windows-500397.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25396/199634/ogg_vorbis-1.3.3-1.3.6.520171-windows-520171.tar.bz2</string> </map> <key>name</key> <string>windows</string> @@ -2574,16 +2574,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>archive</key> <map> <key>hash</key> - <string>497ec6ac26c2e136ee65acbed86cb2ef</string> + <string>d124788c798684c890c1803fca541a10</string> <key>url</key> - <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/511/1105/ogg_vorbis-1.2.2-1.3.2.500397-windows64-500397.tar.bz2</string> + <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/25397/199631/ogg_vorbis-1.3.3-1.3.6.520171-windows64-520171.tar.bz2</string> </map> <key>name</key> <string>windows64</string> </map> </map> <key>version</key> - <string>1.2.2-1.3.2.500397</string> + <string>1.3.3-1.3.6.520171</string> </map> <key>open-libndofdev</key> <map> diff --git a/doc/contributions.txt b/doc/contributions.txt index 90bbb1c2c6..a09b6aff43 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -342,6 +342,8 @@ Celierra Darling Chantal Harvey Charles Courtois Charlie Sazaland +Chaser Zaks + BUG-225599 Cherry Cheevers ChickyBabes Zuzu Christopher Organiser @@ -366,6 +368,7 @@ Cinder Roxley STORM-2037 STORM-2053 STORM-2113 + STORM-2116 STORM-2127 STORM-2144 Clara Young diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 49ed8b495d..40eb7d9bac 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -1028,7 +1028,7 @@ namespace } } - void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message, bool show_location = true, bool show_time = true, bool show_tags = true, bool show_level = true, bool show_function = true) + void writeToRecorders(const LLError::CallSite& site, const std::string& escaped_message) { LLError::ELevel level = site.mLevel; LLError::SettingsConfigPtr s = LLError::Settings::getInstance()->getSettingsConfig(); @@ -1052,7 +1052,7 @@ namespace } message_stream << " "; - if (show_level && r->wantsLevel()) + if (r->wantsLevel()) { message_stream << site.mLevelString; } @@ -1070,7 +1070,7 @@ namespace } message_stream << " "; - if (show_function && r->wantsFunctionName()) + if (r->wantsFunctionName()) { message_stream << site.mFunctionString; } diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp index d175204e6d..01fe82e45d 100644 --- a/indra/llui/lltextbox.cpp +++ b/indra/llui/lltextbox.cpp @@ -43,7 +43,8 @@ template class LLTextBox* LLView::getChild<class LLTextBox>( LLTextBox::LLTextBox(const LLTextBox::Params& p) : LLTextBase(p), - mClickedCallback(NULL) + mClickedCallback(NULL), + mShowCursorHand(true) {} LLTextBox::~LLTextBox() @@ -103,7 +104,7 @@ BOOL LLTextBox::handleMouseUp(S32 x, S32 y, MASK mask) BOOL LLTextBox::handleHover(S32 x, S32 y, MASK mask) { BOOL handled = LLTextBase::handleHover(x, y, mask); - if (!handled && mClickedCallback) + if (!handled && mClickedCallback && mShowCursorHand) { // Clickable text boxes change the cursor to a hand LLUI::getWindow()->setCursor(UI_CURSOR_HAND); diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h index 071e18c638..061d2dd23d 100644 --- a/indra/llui/lltextbox.h +++ b/indra/llui/lltextbox.h @@ -68,11 +68,14 @@ public: /*virtual*/ LLSD getValue() const; /*virtual*/ BOOL setTextArg( const std::string& key, const LLStringExplicit& text ); + void setShowCursorHand(bool show_cursor) { mShowCursorHand = show_cursor; } + protected: void onUrlLabelUpdated(const std::string &url, const std::string &label); LLUIString mText; callback_t mClickedCallback; + bool mShowCursorHand; }; // Build time optimization, generate once in .cpp file diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 09b254e90c..5fe6072304 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -6.0.0 +6.0.1 diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 7aff9fb586..d63ee1b367 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -530,13 +530,6 @@ void LLFloaterPreference::onDoNotDisturbResponseChanged() LLFloaterPreference::~LLFloaterPreference() { - // clean up user data - LLComboBox* ctrl_window_size = getChild<LLComboBox>("windowsize combo"); - for (S32 i = 0; i < ctrl_window_size->getItemCount(); i++) - { - ctrl_window_size->setCurrentByIndex(i); - } - LLConversationLog::instance().removeObserver(this); } @@ -2323,12 +2316,21 @@ BOOL LLPanelPreference::postBuild() { getChild<LLCheckBoxCtrl>("voice_call_friends_only_check")->setCommitCallback(boost::bind(&showFriendsOnlyWarning, _1, _2)); } + if (hasChild("allow_multiple_viewer_check", TRUE)) + { + getChild<LLCheckBoxCtrl>("allow_multiple_viewer_check")->setCommitCallback(boost::bind(&showMultipleViewersWarning, _1, _2)); + } if (hasChild("favorites_on_login_check", TRUE)) { getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setCommitCallback(boost::bind(&handleFavoritesOnLoginChanged, _1, _2)); bool show_favorites_at_login = LLPanelLogin::getShowFavorites(); getChild<LLCheckBoxCtrl>("favorites_on_login_check")->setValue(show_favorites_at_login); } + if (hasChild("mute_chb_label", TRUE)) + { + getChild<LLTextBox>("mute_chb_label")->setShowCursorHand(false); + getChild<LLTextBox>("mute_chb_label")->setClickedCallback(boost::bind(&toggleMuteWhenMinimized)); + } //////////////////////PanelAdvanced /////////////////// if (hasChild("modifier_combo", TRUE)) @@ -2418,6 +2420,14 @@ void LLPanelPreference::saveSettings() } } +void LLPanelPreference::showMultipleViewersWarning(LLUICtrl* checkbox, const LLSD& value) +{ + if (checkbox && checkbox->getValue()) + { + LLNotificationsUtil::add("AllowMultipleViewers"); + } +} + void LLPanelPreference::showFriendsOnlyWarning(LLUICtrl* checkbox, const LLSD& value) { if (checkbox && checkbox->getValue()) @@ -2438,6 +2448,12 @@ void LLPanelPreference::handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const } } +void LLPanelPreference::toggleMuteWhenMinimized() +{ + std::string mute("MuteWhenMinimized"); + gSavedSettings.setBOOL(mute, !gSavedSettings.getBOOL(mute)); +} + void LLPanelPreference::cancel() { for (control_values_map_t::iterator iter = mSavedValues.begin(); diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 8339a18296..4e51137df5 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -241,9 +241,12 @@ protected: private: //for "Only friends and groups can call or IM me" static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&); + //for "Allow Multiple Viewers" + static void showMultipleViewersWarning(LLUICtrl*, const LLSD&); //for "Show my Favorite Landmarks at Login" static void handleFavoritesOnLoginChanged(LLUICtrl* checkbox, const LLSD& value); + static void toggleMuteWhenMinimized(); typedef std::map<std::string, LLColor4> string_color_map_t; string_color_map_t mSavedColors; diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp index 468537e659..1ea3a07536 100644 --- a/indra/newview/llfloaterscriptdebug.cpp +++ b/indra/newview/llfloaterscriptdebug.cpp @@ -138,7 +138,10 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std: { if(objectp->isHUDAttachment()) { - ((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI)); + if (isAgentAvatarValid()) + { + ((LLViewerObject*)gAgentAvatarp)->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI)); + } } else { diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 3c3b004d2c..1e9c9ce5e0 100644 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -300,8 +300,8 @@ BOOL LLFloaterWorldMap::postBuild() landmark_combo->setTextChangedCallback( boost::bind(&LLFloaterWorldMap::onComboTextEntry, this) ); mListLandmarkCombo = dynamic_cast<LLCtrlListInterface *>(landmark_combo); - mCurZoomVal = log(LLWorldMapView::sMapScale)/log(2.f); - getChild<LLUICtrl>("zoom slider")->setValue(LLWorldMapView::sMapScale); + mCurZoomVal = log(LLWorldMapView::sMapScale/256.f)/log(2.f); + getChild<LLUICtrl>("zoom slider")->setValue(mCurZoomVal); setDefaultBtn(NULL); diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index b93dfaf061..d40a7234e2 100644 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -181,24 +181,26 @@ bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* ite S32 filter_generation = filter.getCurrentGeneration(); bool continue_filtering = true; - if (item->getLastFilterGeneration() < filter_generation) + if (item) { - // Recursive application of the filter for child items (CHUI-849) - continue_filtering = item->filter( filter ); - } + if (item->getLastFilterGeneration() < filter_generation) + { + // Recursive application of the filter for child items (CHUI-849) + continue_filtering = item->filter(filter); + } - // Update latest generation to pass filter in parent and propagate up to root - if (item->passedFilter()) - { - LLFolderViewModelItemInventory* view_model = this; - - while(view_model && view_model->mMostFilteredDescendantGeneration < filter_generation) + // Update latest generation to pass filter in parent and propagate up to root + if (item->passedFilter()) { - view_model->mMostFilteredDescendantGeneration = filter_generation; - view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent); + LLFolderViewModelItemInventory* view_model = this; + + while (view_model && view_model->mMostFilteredDescendantGeneration < filter_generation) + { + view_model->mMostFilteredDescendantGeneration = filter_generation; + view_model = static_cast<LLFolderViewModelItemInventory*>(view_model->mParent); + } } } - return continue_filtering; } diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index e4b6c3b554..1987e15850 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -2474,12 +2474,14 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); + const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false); const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_current_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_CURRENT_OUTFIT); const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); + const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id); //-------------------------------------------------------------------------------- // Determine if folder can be moved. @@ -2529,6 +2531,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, { is_movable = FALSE; } + if (is_movable && move_is_into_lost_and_found) + { + is_movable = FALSE; + } if (is_movable && (mUUID == model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE))) { is_movable = FALSE; @@ -3642,12 +3648,14 @@ void LLFolderBridge::perform_pasteFromClipboard() const LLUUID &marketplacelistings_id = model->findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false); const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false); + const LLUUID &lost_and_found_id = model->findCategoryUUIDForType(LLFolderType::FT_LOST_AND_FOUND, false); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id); const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_marketplacelistings = model->isObjectDescendentOf(mUUID, marketplacelistings_id); const BOOL move_is_into_favorites = (mUUID == favorites_id); + const BOOL move_is_into_lost_and_found = model->isObjectDescendentOf(mUUID, lost_and_found_id); std::vector<LLUUID> objects; LLClipboard::instance().pasteFromClipboard(objects); @@ -3714,6 +3722,13 @@ void LLFolderBridge::perform_pasteFromClipboard() LLInventoryObject *obj = model->getObject(item_id); if (obj) { + if (move_is_into_lost_and_found) + { + if (LLAssetType::AT_CATEGORY == obj->getType()) + { + return; + } + } if (move_is_into_current_outfit || move_is_into_outfit) { if (item && can_move_to_outfit(item, move_is_into_current_outfit)) diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 2b9607f7a2..a520e0171e 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -2368,7 +2368,11 @@ void LLInventoryModel::buildParentChildMap() } // FIXME note that updateServer() fails with protected // types, so this will not work as intended in that case. - cat->updateServer(TRUE); + // UpdateServer uses AIS, AIS cat move is not implemented yet + // cat->updateServer(TRUE); + + // MoveInventoryFolder message, intentionally per item + cat->updateParentOnServer(FALSE); catsp = getUnlockedCatArray(cat->getParentUUID()); if(catsp) { diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 1481992f43..3992b506e9 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1128,12 +1128,16 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it mCompletionObserver->reset(); for (std::deque<LLFolderViewItem*>::const_iterator it = items.begin(); it != items.end(); ++it) { - LLUUID id = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem())->getUUID(); - LLViewerInventoryItem* inv_item = mInventory->getItem(id); - - if (inv_item && !inv_item->isFinished()) + LLFolderViewModelItemInventory* view_model = static_cast<LLFolderViewModelItemInventory*>((*it)->getViewModelItem()); + if (view_model) { - mCompletionObserver->watchItem(id); + LLUUID id = view_model->getUUID(); + LLViewerInventoryItem* inv_item = mInventory->getItem(id); + + if (inv_item && !inv_item->isFinished()) + { + mCompletionObserver->watchItem(id); + } } } @@ -1159,6 +1163,11 @@ void LLInventoryPanel::onSelectionChange(const std::deque<LLFolderViewItem*>& it LLFolderViewModelItemInventory* fve_listener = static_cast<LLFolderViewModelItemInventory*>(folder_item->getViewModelItem()); if (fve_listener && (fve_listener->getInventoryType() == LLInventoryType::IT_CATEGORY)) { + if (fve_listener->getInventoryObject() && fve_listener->getInventoryObject()->getIsLinkType()) + { + return; + } + if(prev_folder_item) { LLFolderBridge* prev_bridge = (LLFolderBridge*)prev_folder_item->getViewModelItem(); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 13ee7bb003..8d7865c8ba 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -718,11 +718,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) bool identical_color = false; if(mColorSwatch) - { + { LLSelectedTE::getColor(color, identical_color); + LLColor4 prev_color = mColorSwatch->get(); mColorSwatch->setOriginal(color); - mColorSwatch->set(color, TRUE); + mColorSwatch->set(color, force_set_values || (prev_color != color) || !editable); mColorSwatch->setValid(editable); mColorSwatch->setEnabled( editable ); @@ -1318,8 +1319,12 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/) // if (!material->getSpecularID().isNull()) { - getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor()); - getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE); + LLColorSwatchCtrl* shiny_swatch = getChild<LLColorSwatchCtrl>("shinycolorswatch"); + LLColor4 new_color = material->getSpecularLightColor(); + LLColor4 old_color = shiny_swatch->get(); + + shiny_swatch->setOriginal(new_color); + shiny_swatch->set(new_color, force_set_values || old_color != new_color || !editable); } // Bumpy (normal) diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp index 776ae2ece9..518c6c0ee4 100644 --- a/indra/newview/lltoastscripttextbox.cpp +++ b/indra/newview/lltoastscripttextbox.cpp @@ -28,6 +28,7 @@ #include "lltoastscripttextbox.h" +#include "lldbstrings.h" #include "lllslconstants.h" #include "llnotifications.h" #include "llstyle.h" @@ -35,13 +36,16 @@ #include "llviewertexteditor.h" const S32 LLToastScriptTextbox::DEFAULT_MESSAGE_MAX_LINE_COUNT= 14; +// *TODO: magic numbers - copied from lltoastnotifypanel.cpp(50) which was copied from llnotify.cpp(250) +const S32 MAX_LENGTH = 512 + 20 + DB_FIRST_NAME_BUF_SIZE + DB_LAST_NAME_BUF_SIZE + DB_INV_ITEM_NAME_BUF_SIZE; LLToastScriptTextbox::LLToastScriptTextbox(const LLNotificationPtr& notification) : LLToastPanel(notification) { buildFromFile( "panel_notify_textbox.xml"); - mInfoText = getChild<LLTextBox>("text_editor_box"); + mInfoText = getChild<LLTextEditor>("text_editor_box"); + mInfoText->setMaxTextLength(MAX_LENGTH); mInfoText->setValue(notification->getMessage()); getChild<LLButton>("ignore_btn")->setClickedCallback(boost::bind(&LLToastScriptTextbox::onClickIgnore, this)); diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h index 7aee02dd00..a539124ef1 100644 --- a/indra/newview/lltoastscripttextbox.h +++ b/indra/newview/lltoastscripttextbox.h @@ -48,7 +48,7 @@ public: private: - LLTextBox* mInfoText; + LLTextEditor* mInfoText; void onClickSubmit(); void onClickIgnore(); diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index dcd09f66c7..1e46a1cf9e 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -139,6 +139,7 @@ std::map<std::string, U32> LLViewerObject::sObjectDataMap; const F32 PHYSICS_TIMESTEP = 1.f / 45.f; const U32 MAX_INV_FILE_READ_FAILS = 25; +const S32 MAX_OBJECT_BINARY_DATA_SIZE = 60 + 16; static LLTrace::BlockTimerStatHandle FTM_CREATE_OBJECT("Create Object"); @@ -1182,7 +1183,9 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, // Use getPosition, not getPositionRegion, since this is what we're comparing directly against. LLVector3 test_pos_parent = getPosition(); - U8 data[60+16]; // This needs to match the largest size below. + // This needs to match the largest size below. See switch(length) + U8 data[MAX_OBJECT_BINARY_DATA_SIZE]; + #ifdef LL_BIG_ENDIAN U16 valswizzle[4]; #endif @@ -1249,7 +1252,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, mesgsys->getU8Fast( _PREHASH_ObjectData, _PREHASH_ClickAction, click_action, block_num); mesgsys->getVector3Fast(_PREHASH_ObjectData, _PREHASH_Scale, new_scale, block_num ); length = mesgsys->getSizeFast(_PREHASH_ObjectData, block_num, _PREHASH_ObjectData); - mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num); + mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num, MAX_OBJECT_BINARY_DATA_SIZE); mTotalCRC = crc; @@ -1557,7 +1560,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys, LL_INFOS() << "TI:" << getID() << LL_ENDL; #endif length = mesgsys->getSizeFast(_PREHASH_ObjectData, block_num, _PREHASH_ObjectData); - mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num); + mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_ObjectData, data, length, block_num, MAX_OBJECT_BINARY_DATA_SIZE); count = 0; LLVector4 collision_plane; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index fc06455c68..2aff71367e 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -479,8 +479,8 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, compressed_dp.reset(); uncompressed_length = mesgsys->getSizeFast(_PREHASH_ObjectData, i, _PREHASH_Data); - LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; - mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i); + LL_DEBUGS("ObjectUpdate") << "got binary data from message to compressed_dpbuffer" << LL_ENDL; + mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_Data, compressed_dpbuffer, 0, i, 2048); compressed_dp.assignBuffer(compressed_dpbuffer, uncompressed_length); if (update_type != OUT_TERSE_IMPROVED) // OUT_FULL_COMPRESSED only? diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 2e366835d9..41da58f94f 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -111,9 +111,9 @@ const F32 desired_discard_bias_max = (F32)MAX_DISCARD_LEVEL; // max number of le const F64 log_2 = log(2.0); #if ADDRESS_SIZE == 32 -const U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; +const U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT / 2; #else -const U32 DESIRED_NORMAL_FETCHED_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; +const U32 DESIRED_NORMAL_TEXTURE_SIZE = (U32)LLViewerFetchedTexture::MAX_IMAGE_SIZE_DEFAULT; #endif //---------------------------------------------------------------------------------------------- @@ -1586,10 +1586,6 @@ void LLViewerFetchedTexture::processTextureStats() else { U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 - if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED) - { - desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE; - } if(!mKnownDrawWidth || !mKnownDrawHeight || mFullWidth <= mKnownDrawWidth || mFullHeight <= mKnownDrawHeight) { if (mFullWidth > desired_size || mFullHeight > desired_size) @@ -3171,6 +3167,7 @@ void LLViewerLODTexture::processTextureStats() if (mKnownDrawWidth && mKnownDrawHeight) { S32 draw_texels = mKnownDrawWidth * mKnownDrawHeight; + draw_texels = llclamp(draw_texels, MIN_IMAGE_AREA, MAX_IMAGE_AREA); // Use log_4 because we're in square-pixel space, so an image // with twice the width and twice the height will have mTexelsPerImage @@ -3211,7 +3208,7 @@ void LLViewerLODTexture::processTextureStats() U32 desired_size = MAX_IMAGE_SIZE_DEFAULT; // MAX_IMAGE_SIZE_DEFAULT = 1024 and max size ever is 2048 if (mBoostLevel <= LLGLTexture::BOOST_SCULPTED) { - desired_size = DESIRED_NORMAL_FETCHED_TEXTURE_SIZE; + desired_size = DESIRED_NORMAL_TEXTURE_SIZE; } if (mFullWidth > desired_size || mFullHeight > desired_size) min_discard = 1.f; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index e1dca4ae43..5c107cc10b 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -839,7 +839,7 @@ void LLVoiceClient::addObserver(LLVoiceClientStatusObserver* observer) void LLVoiceClient::removeObserver(LLVoiceClientStatusObserver* observer) { - if (mVoiceModule) mVoiceModule->removeObserver(observer); + if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer); } void LLVoiceClient::addObserver(LLFriendObserver* observer) @@ -849,7 +849,7 @@ void LLVoiceClient::addObserver(LLFriendObserver* observer) void LLVoiceClient::removeObserver(LLFriendObserver* observer) { - if (mVoiceModule) mVoiceModule->removeObserver(observer); + if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer); } void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer) @@ -859,7 +859,7 @@ void LLVoiceClient::addObserver(LLVoiceClientParticipantObserver* observer) void LLVoiceClient::removeObserver(LLVoiceClientParticipantObserver* observer) { - if (mVoiceModule) mVoiceModule->removeObserver(observer); + if (mVoiceModule && mVoiceModule->singletoneInstanceExists()) mVoiceModule->removeObserver(observer); } std::string LLVoiceClient::sipURIFromID(const LLUUID &id) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 337f01f3e5..758e9cecd7 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -121,6 +121,8 @@ public: virtual const LLVoiceVersionInfo& getVersion()=0; + virtual bool singletoneInstanceExists()=0; + ///////////////////// /// @name Tuning //@{ diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index b039afa734..ee333bcee2 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -4726,6 +4726,11 @@ void LLVivoxVoiceClient::declineInvite(std::string &sessionHandle) } } +bool LLVivoxVoiceClient::singletoneInstanceExists() +{ + return LLVivoxVoiceClient::instanceExists(); +} + void LLVivoxVoiceClient::leaveNonSpatialChannel() { LL_DEBUGS("Voice") << "Request to leave spacial channel." << LL_ENDL; diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index 50862cea1e..210c726452 100644 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -73,6 +73,8 @@ public: // Returns true if vivox has successfully logged in and is not in error state virtual bool isVoiceWorking() const; + + virtual bool singletoneInstanceExists(); ///////////////////// /// @name Tuning diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 192307dc8b..24726e61e8 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -488,7 +488,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, { U8 tdpbuffer[1024]; LLDataPackerBinaryBuffer tdp(tdpbuffer, 1024); - mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num); + mesgsys->getBinaryDataFast(_PREHASH_ObjectData, _PREHASH_TextureEntry, tdpbuffer, 0, block_num, 1024); S32 result = unpackTEMessage(tdp); if (result & teDirtyBits) { diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index e7f50f6b59..40d6d325ba 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -8678,7 +8678,8 @@ void LLPipeline::renderDeferredLighting() } const LLViewerObject *vobj = drawablep->getVObj(); - if(vobj && vobj->getAvatar() && vobj->getAvatar()->isInMuteList()) + if(vobj && vobj->getAvatar() + && (vobj->getAvatar()->isTooComplex() || vobj->getAvatar()->isInMuteList())) { continue; } diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml index 8976d2a78f..a8db0aca4e 100644 --- a/indra/newview/skins/default/xui/en/floater_tos.xml +++ b/indra/newview/skins/default/xui/en/floater_tos.xml @@ -86,7 +86,7 @@ layout="topleft" left="484" name="Continue" - top_delta="35" + top_delta="55" width="100" /> <button height="20" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 7dc3d6b08f..cc57e1375a 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -616,6 +616,16 @@ Save all changes to clothing/body parts? <notification icon="alertmodal.tga" + name="AllowMultipleViewers" + type="alertmodal"> + Running multiple Second Life viewers is not supported. It can lead to texture cache collisions, corruption and degraded visuals and performance. + <usetemplate + name="okbutton" + yestext="OK"/> + </notification> + + <notification + icon="alertmodal.tga" name="GrantModifyRights" type="alertmodal"> Granting modify rights to another Resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission. diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml index a679ca7f8c..6dc1bf9e9e 100644 --- a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml +++ b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml @@ -11,33 +11,39 @@ <string name="message_max_lines_count" value="14" /> + <!-- THIS PANEL CONTROLS TOAST HEIGHT? --> <panel - bevel_style="none" - follows="all" - height="120" - label="info_panel" - layout="topleft" - left="0" - name="info_panel" - top="0" - width="305"> - <text - follows="all" - font="SansSerif" - height="110" - layout="topleft" - left="10" - mouse_opaque="false" - name="text_editor_box" - read_only="true" - text_color="white" - text_readonly_color="white" - top="0" - width="285" - wrap="true" - parse_highlights="true" - parse_urls="true"/> - </panel> + bevel_style="none" + follows="all" + height="120" + label="info_panel" + layout="topleft" + left="0" + name="info_panel" + top="0" + width="305"> + <text_editor + bg_readonly_color="Transparent" + border_visible="false" + embedded_items="false" + enabled="true" + follows="all" + font="SansSerif" + height="120" + layout="topleft" + left="10" + mouse_opaque="false" + name="text_editor_box" + read_only="true" + text_color="White" + text_readonly_color="White" + top="0" + visible="true" + width="285" + wrap="true" + parse_highlights="true" + parse_urls="true"/> + </panel> <panel bevel_style="none" follows="left|right|bottom" diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml index 2845a29e1d..513400954b 100644 --- a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml +++ b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml @@ -59,7 +59,7 @@ </text> <button label="Comprar já!" name="buy_btn"/> <button label="Fechar" name="cancel_btn"/> - <text name="info_cannot_buy"> + <text name="info_cannot_buy" font="SansSerifBig"> Transação incompleta </text> <button label="Prosseguir para a web" name="error_web"/> diff --git a/indra/newview/skins/default/xui/ru/floater_tos.xml b/indra/newview/skins/default/xui/ru/floater_tos.xml index 7196a04de1..3f2b5747d5 100644 --- a/indra/newview/skins/default/xui/ru/floater_tos.xml +++ b/indra/newview/skins/default/xui/ru/floater_tos.xml @@ -16,6 +16,6 @@ <text name="agree_list"> Я прочитал и согласен с Условиями и положениями по конфиденциальности Пользовательского соглашения, включая требования по разрешению разногласий Second Life. </text> - <button label="Продолжить" label_selected="Продолжить" name="Continue" top_delta="45"/> + <button label="Продолжить" label_selected="Продолжить" name="Continue"/> <button label="Отмена" label_selected="Отмена" name="Cancel"/> </floater> |