diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index b1c658167f..689d387826 100755 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2888,7 +2888,7 @@ BOOL LLWindowWin32::getClientRectInScreenSpace( RECT* rectp ) void LLWindowWin32::flashIcon(F32 seconds) { - if (getMinimized()) // Moved this here from llviewermessage.cpp + if (mWindowHandle && GetFocus() != mWindowHandle) // Moved this here from llviewermessage.cpp { FLASHWINFO flash_info; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index ab1dbc4311..9a3b7b2662 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -23903,6 +23903,17 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 + FSStaticEyesUUID + + Comment + Animation UUID to used to stop idle eye moment (Default uses priority 2) + Persist + 1 + Type + String + Value + eff31dd2-1b65-5a03-5e37-15aca8e53ab7 + diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 05b6c413da..b96713013e 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -1059,5 +1059,16 @@ Backup 0 + FSStaticEyes + + Comment + Disables built in random eye moment on own avatar via animation defined at FSStaticEyesUUID. + Persist + 1 + Type + Boolean + Value + 0 + diff --git a/indra/newview/fsfloaterimport.cpp b/indra/newview/fsfloaterimport.cpp index a792fec115..1753d31de6 100644 --- a/indra/newview/fsfloaterimport.cpp +++ b/indra/newview/fsfloaterimport.cpp @@ -1211,6 +1211,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) LLInventoryType::EType inventory_type = LLInventoryType::defaultForAssetType(asset_type); bool new_file_agent_inventory = false; LLWearableType::EType wearable_type = NOT_WEARABLE; + std::string perms_prefix = ""; if (name.empty()) { @@ -1221,6 +1222,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) { case LLAssetType::AT_TEXTURE: { + perms_prefix = "Uploads"; temporary = getChild("temp_asset")->get(); if (temporary) { @@ -1236,6 +1238,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) break; case LLAssetType::AT_SOUND: { + perms_prefix = "Uploads"; temporary = getChild("temp_asset")->get(); if (temporary) { @@ -1255,6 +1258,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) case LLAssetType::AT_CLOTHING: case LLAssetType::AT_BODYPART: { + perms_prefix = "Wearables"; std::string asset(asset_data.begin(), asset_data.end()); S32 position = asset.rfind("type"); @@ -1298,6 +1302,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) break; case LLAssetType::AT_NOTECARD: { + perms_prefix = "Notecards"; if (inventory_item.isNull()) { // create inventory item first @@ -1321,6 +1326,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) break; case LLAssetType::AT_LSL_TEXT: { + perms_prefix = "Scripts"; if (inventory_item.isNull()) { // create inventory item first @@ -1352,6 +1358,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) break; case LLAssetType::AT_ANIMATION: { + perms_prefix = "Uploads"; temporary = getChild("temp_asset")->get(); if (temporary) { @@ -1369,6 +1376,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) break; case LLAssetType::AT_GESTURE: { + perms_prefix = "Gestures"; if (inventory_item.isNull()) { // create inventory item first @@ -1472,7 +1480,7 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) data->mAssetInfo.mType = asset_type; data->mAssetInfo.mCreatorID = gAgentID; data->mInventoryType = inventory_type; - data->mNextOwnerPerm = LLFloaterPerms::getNextOwnerPerms(); + data->mNextOwnerPerm = LLFloaterPerms::getNextOwnerPerms(perms_prefix); data->mExpectedUploadCost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); FSResourceData* fs_data = new FSResourceData; fs_data->uuid = asset_id; @@ -1495,9 +1503,9 @@ void FSFloaterImport::uploadAsset(LLUUID asset_id, LLUUID inventory_item) body["inventory_type"] = LLInventoryType::lookup(inventory_type); body["name"] = name; body["description"] = description; - body["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms()); - body["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms()); - body["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms()); + body["next_owner_mask"] = LLSD::Integer(LLFloaterPerms::getNextOwnerPerms(perms_prefix)); + body["group_mask"] = LLSD::Integer(LLFloaterPerms::getGroupPerms(perms_prefix)); + body["everyone_mask"] = LLSD::Integer(LLFloaterPerms::getEveryonePerms(perms_prefix)); } diff --git a/indra/newview/fsfloaterplacedetails.cpp b/indra/newview/fsfloaterplacedetails.cpp index 315efbfc09..0cd83e9bec 100644 --- a/indra/newview/fsfloaterplacedetails.cpp +++ b/indra/newview/fsfloaterplacedetails.cpp @@ -846,6 +846,11 @@ void FSFloaterPlaceDetails::onSLURLBuilt(std::string& slurl) void FSFloaterPlaceDetails::onLandmarkLoaded(LLLandmark* landmark) { + if (!mPanelLandmarkInfo) + { + return; + } + LLUUID region_id; landmark->getRegionID(region_id); landmark->getGlobalPos(mGlobalPos); diff --git a/indra/newview/fslslbridge.cpp b/indra/newview/fslslbridge.cpp index 9e18923cde..68fe73c818 100644 --- a/indra/newview/fslslbridge.cpp +++ b/indra/newview/fslslbridge.cpp @@ -775,7 +775,7 @@ void FSLSLBridge::processAttach(LLViewerObject* object, const LLViewerJointAttac LL_WARNS("FSLSLBridge") << "Bridge container isn't in the correct inventory location. Detaching it and aborting." << LL_ENDL; if (mBridgeCreating) { - report_to_nearby_chat(LLTrans::getString("fs_bridge_failure_attach_wrong_location")); + report_to_nearby_chat(LLTrans::getString("fsbridge_failure_attach_wrong_location")); setBridgeCreating(false); //in case we interrupted the creation } return; diff --git a/indra/newview/growlmanager.cpp b/indra/newview/growlmanager.cpp index 1c2c76229e..2d9b278771 100644 --- a/indra/newview/growlmanager.cpp +++ b/indra/newview/growlmanager.cpp @@ -238,7 +238,7 @@ void GrowlManager::performNotification(const std::string& title, const std::stri { if (mTitleTimers[title] > now - GROWL_THROTTLE_TIME) { - LL_WARNS("GrowlNotify") << "Discarded notification with title '" << title << "' - spam ._." << LL_ENDL; + LL_WARNS("GrowlNotify") << "Discarded notification with title '" << title << "' due to throttle" << LL_ENDL; mTitleTimers[title] = now; return; } @@ -317,7 +317,9 @@ bool GrowlManager::filterOldNotifications(LLNotificationPtr pNotification) void GrowlManager::onInstantMessage(const LLSD& im) { LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(im["session_id"].asUUID()); - if (session->isP2PSessionType() && (!im["keyword_alert_performed"].asBoolean() || !gSavedSettings.getBOOL("FSFilterGrowlKeywordDuplicateIMs"))) + if (session->isP2PSessionType() && // Must be P2P + !im["is_announcement"].asBoolean() && // Not an announcement (incoming IM, autoresponse sent info...) + (!im["keyword_alert_performed"].asBoolean() || !gSavedSettings.getBOOL("FSFilterGrowlKeywordDuplicateIMs"))) // Not keyword or show duplicate IMs due to keywords { // Don't show messages from ourselves or the system. const LLUUID from_id = im["from_id"].asUUID(); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 231b54eef0..680c38a1e1 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -56,6 +56,7 @@ // (See *NOTE: in renderAvatars why this forward declatation is commented out) // void drawBoxOutline(const LLVector3& pos,const LLVector3& size); // llspatialpartition.cpp // +#include "llnetmap.h" static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; static U32 sBufferUsage = GL_STREAM_DRAW_ARB; @@ -1267,7 +1268,8 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass) gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); - gGL.diffuseColor4f(0.7f,1.0f,0.0f,0.3f); + LLColor4 avatar_color = LLNetMap::getAvatarColor(avatarp->getID()); + gGL.diffuseColor4f(avatar_color.mV[VRED], avatar_color.mV[VGREEN], avatar_color.mV[VBLUE], avatar_color.mV[VALPHA]); glLineWidth(2.0); LLQuaternion rot=avatarp->getRotationRegion(); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index d3f5fbedfa..312b03bf7f 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -552,6 +552,9 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) // FIRE-2912: Reset voice button mCommitCallbackRegistrar.add("Pref.ResetVoice", boost::bind(&LLFloaterPreference::onClickResetVoice, this)); + + // FIRE-18250: Option to disable default eye movement + mCommitCallbackRegistrar.add("Pref.StaticEyes", boost::bind(&LLFloaterPreference::onClickStaticEyes, this)); // mCommitCallbackRegistrar.add("UpdateFilter", boost::bind(&LLFloaterPreference::onUpdateFilterTerm, this, false)); // Hook up for filtering @@ -2502,6 +2505,9 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im // Clear inventory cache button getChildView("ClearInventoryCache")->setEnabled(TRUE); + + // FIRE-18250: Option to disable default eye movement + getChildView("FSStaticEyes")->setEnabled(TRUE); } @@ -4418,6 +4424,23 @@ void LLFloaterPreference::populateFontSelectionCombo() } // +// FIRE-18250: Option to disable default eye movement +void LLFloaterPreference::onClickStaticEyes() +{ + LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID")); + if (gSavedPerAccountSettings.getBOOL("FSStaticEyes")) + { + gAgentAvatarp->startMotion(anim_id); + gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START); + } + else + { + gAgentAvatarp->stopMotion(anim_id); + gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_STOP); + } +} +// + // #ifdef OPENSIM static LLPanelInjector t_pref_opensim("panel_preference_opensim"); diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 913044f08e..e88f78f4b2 100755 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -177,6 +177,9 @@ public: // FIRE-2912: Reset voice button void onClickResetVoice(); + // FIRE-18250: Option to disable default eye movement + void onClickStaticEyes(); + void onClickSetCache(); void onClickBrowseCache(); void onClickBrowseCrashLogs(); diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index f0ce3d3585..dfabf9a9b3 100755 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -667,25 +667,7 @@ void LLNetMap::draw() } // - LLColor4 color = map_avatar_color; // - - // Color "special" avatars with special colors (Friends, muted, Lindens, etc) - color = LGGContactSets::getInstance()->colorize(uuid, color, LGG_CS_MINIMAP); - // - - //color based on contact sets prefs - if(LGGContactSets::getInstance()->hasFriendColorThatShouldShow(uuid, LGG_CS_MINIMAP)) - { - color = LGGContactSets::getInstance()->getFriendColor(uuid); - } - - // Mark Avatars with special colors - avatar_marks_map_t::iterator found = sAvatarMarksMap.find(uuid); - if (found != sAvatarMarksMap.end()) - { - color = found->second; - } - // Mark Avatars with special colors + LLColor4 color = getAvatarColor(uuid); // // [RLVa:KB] - Checked: 2010-04-19 (RLVa-1.2.0f) | Modified: RLVa-1.2.0f | FS-Specific LLWorldMapView::drawAvatar( @@ -1835,6 +1817,31 @@ void LLNetMap::clearAvatarMarkColors() { sAvatarMarksMap.clear(); } + +// static +LLColor4 LLNetMap::getAvatarColor(const LLUUID& avatar_id) +{ + static LLUIColor map_avatar_color = LLUIColorTable::instance().getColor("MapAvatarColor", LLColor4::white); + LLColor4 color = map_avatar_color; + + // Color "special" avatars with special colors (Friends, muted, Lindens, etc) + color = LGGContactSets::getInstance()->colorize(avatar_id, color, LGG_CS_MINIMAP); + + // Color based on contact sets prefs + if(LGGContactSets::getInstance()->hasFriendColorThatShouldShow(avatar_id, LGG_CS_MINIMAP)) + { + color = LGGContactSets::getInstance()->getFriendColor(avatar_id); + } + + // Mark Avatars with special colors + avatar_marks_map_t::iterator found = sAvatarMarksMap.find(avatar_id); + if (found != sAvatarMarksMap.end()) + { + color = found->second; + } + + return color; +} // void LLNetMap::handleCam() diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h index 977f5407a0..a06a10b8e5 100755 --- a/indra/newview/llnetmap.h +++ b/indra/newview/llnetmap.h @@ -108,6 +108,7 @@ public: static void clearAvatarMarkColor(const LLUUID& avatar_id); static void clearAvatarMarkColors(const uuid_vec_t& avatar_ids); static void clearAvatarMarkColors(); + static LLColor4 getAvatarColor(const LLUUID& avatar_id); // private: diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 7ac876306d..8a20b48acb 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -1292,6 +1292,13 @@ bool idle_startup() { gDirUtilp->setChatLogsDir(gSavedPerAccountSettings.getString("InstantMessageLogPath")); } + // FIRE-18247: Handle non-existent chat log location + if (!gDirUtilp->fileExists(gSavedPerAccountSettings.getString("InstantMessageLogPath"))) + { + gDirUtilp->setChatLogsDir(gDirUtilp->getOSUserAppDir()); + gSavedPerAccountSettings.setString("InstantMessageLogPath", gDirUtilp->getChatLogsDir()); + } + // // Seperate user directories per grid on OS build #ifdef OPENSIM gDirUtilp->setPerAccountChatLogsDir(userid, gridlabel); @@ -2883,6 +2890,15 @@ bool idle_startup() } // + + // FIRE-18250: Option to disable default eye movement + if (gSavedPerAccountSettings.getBOOL("FSStaticEyes")) + { + LLUUID anim_id(gSavedSettings.getString("FSStaticEyesUUID")); + gAgentAvatarp->startMotion(anim_id); + gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_START); + } + // return TRUE; } diff --git a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml index 74ff1171f4..8a1f18fb5e 100644 --- a/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml +++ b/indra/newview/skins/default/xui/de/panel_preferences_firestorm.xml @@ -95,6 +95,7 @@ (Einstellungen für Avatar-Kamerafokus befinden sich auf dem Reiter "Privatsphäre".) + diff --git a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml index 5434bd450f..6633b48e1d 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_firestorm.xml @@ -547,6 +547,20 @@ (Avatar look at target settings are on the Privacy tab.) + + + + ルートジョイント名が不正です。「hip」を使用してください。 + + [F] フレーム [S] 秒 [FPS] FPS + 名前: @@ -117,8 +120,13 @@ + + 300 フレーム 30 秒 10 FPS + + + 手のポーズ diff --git a/indra/newview/skins/default/xui/ja/floater_animation_explorer.xml b/indra/newview/skins/default/xui/ja/floater_animation_explorer.xml index ca6b6ec074..8728d196ea 100644 --- a/indra/newview/skins/default/xui/ja/floater_animation_explorer.xml +++ b/indra/newview/skins/default/xui/ja/floater_animation_explorer.xml @@ -3,6 +3,7 @@ + diff --git a/indra/newview/skins/default/xui/ja/floater_fs_area_search.xml b/indra/newview/skins/default/xui/ja/floater_fs_area_search.xml index cee6e9fa30..8be0bc8f95 100644 --- a/indra/newview/skins/default/xui/ja/floater_fs_area_search.xml +++ b/indra/newview/skins/default/xui/ja/floater_fs_area_search.xml @@ -65,6 +65,9 @@ + + + @@ -92,6 +95,7 @@ 〜 + 次の条件のオブジェクトを除外: diff --git a/indra/newview/skins/default/xui/ja/floater_fs_im_session.xml b/indra/newview/skins/default/xui/ja/floater_fs_im_session.xml index c5707fa684..8838230d11 100644 --- a/indra/newview/skins/default/xui/ja/floater_fs_im_session.xml +++ b/indra/newview/skins/default/xui/ja/floater_fs_im_session.xml @@ -55,6 +55,10 @@