diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/llstring.cpp | 27 | ||||
| -rw-r--r-- | indra/llcommon/llstring.h | 11 | ||||
| -rw-r--r-- | indra/llui/llfloater.cpp | 14 | ||||
| -rw-r--r-- | indra/llui/llfloater.h | 4 | ||||
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 7 | ||||
| -rw-r--r-- | indra/llui/llview.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | indra/newview/featuretable.txt | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable_linux.txt | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable_mac.txt | 2 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.cpp | 59 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.h | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterdeleteprefpreset.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llinspectremoteobject.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llpresetsmanager.cpp | 57 | ||||
| -rw-r--r-- | indra/newview/llpresetsmanager.h | 2 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_login.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_login_first.xml | 2 | ||||
| -rwxr-xr-x | indra/newview/viewer_manifest.py | 12 | 
21 files changed, 178 insertions, 49 deletions
| diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f3b8999883..c45db3b185 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -576,6 +576,33 @@ std::string utf8str_truncate(const std::string& utf8str, const S32 max_len)  	}  } +std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol_len) +{ +    if (0 == symbol_len) +    { +        return std::string(); +    } +    if ((S32)utf8str.length() <= symbol_len) +    { +        return utf8str; +    } +    else +    { +        int len = 0, byteIndex = 0; +        const char* aStr = utf8str.c_str(); +        size_t origSize = utf8str.size(); + +        for (byteIndex = 0; len < symbol_len && byteIndex < origSize; byteIndex++) +        { +            if ((aStr[byteIndex] & 0xc0) != 0x80) +            { +                len += 1; +            } +        } +        return utf8str.substr(0, byteIndex); +    } +} +  std::string utf8str_substChar(  	const std::string& utf8str,  	const llwchar target_char, diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 393f6d7a8c..a40db0f8cc 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -564,6 +564,17 @@ LL_COMMON_API S32 utf8str_compare_insensitive(  	const std::string& rhs);  /** +* @brief Properly truncate a utf8 string to a maximum character count. +* +* If symbol_len is longer than the string passed in, the return +* value == utf8str. +* @param utf8str A valid utf8 string to truncate. +* @param symbol_len The maximum number of symbols in the return value. +* @return Returns a valid utf8 string with symbol count <= max_len. +*/ +LL_COMMON_API std::string utf8str_symbol_truncate(const std::string& utf8str, const S32 symbol_len); + +/**   * @brief Replace all occurences of target_char with replace_char   *   * @param utf8str A utf8 string to process. diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 8a2e6a0bc0..5ea9f5b6cc 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1575,6 +1575,7 @@ BOOL LLFloater::handleMouseDown(S32 x, S32 y, MASK mask)  		if(offerClickToButton(x, y, mask, BUTTON_TEAR_OFF)) return TRUE;  		if(offerClickToButton(x, y, mask, BUTTON_DOCK)) return TRUE; +		setFrontmost(TRUE, FALSE);  		// Otherwise pass to drag handle for movement  		return mDragHandle->handleMouseDown(x, y, mask);  	} @@ -1649,7 +1650,7 @@ void LLFloater::setVisibleAndFrontmost(BOOL take_focus,const LLSD& key)  	}  } -void LLFloater::setFrontmost(BOOL take_focus) +void LLFloater::setFrontmost(BOOL take_focus, BOOL restore)  {  	LLMultiFloater* hostp = getHost();  	if (hostp) @@ -1665,7 +1666,7 @@ void LLFloater::setFrontmost(BOOL take_focus)  		LLFloaterView * parent = dynamic_cast<LLFloaterView*>( getParent() );  		if (parent)  		{ -			parent->bringToFront(this, take_focus); +			parent->bringToFront(this, take_focus, restore);  		}  		// Make sure to set the appropriate transparency type (STORM-732). @@ -2394,7 +2395,7 @@ LLRect LLFloaterView::findNeighboringPosition( LLFloater* reference_floater, LLF  } -void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus) +void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus, BOOL restore)  {  	if (!child)  		return; @@ -2478,7 +2479,12 @@ void LLFloaterView::bringToFront(LLFloater* child, BOOL give_focus)  	{  		sendChildToFront(child);  	} -	child->setMinimized(FALSE); + +	if(restore) +	{ +		child->setMinimized(FALSE); +	} +  	if (give_focus && !gFocusMgr.childHasKeyboardFocus(child))  	{  		child->setFocus(TRUE); diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index ef7c6180d2..165f67499b 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -310,7 +310,7 @@ public:  	/*virtual*/ void setVisible(BOOL visible); // do not override  	/*virtual*/ void onVisibilityChange ( BOOL new_visibility ); // do not override -	void			setFrontmost(BOOL take_focus = TRUE); +	void			setFrontmost(BOOL take_focus = TRUE, BOOL restore = TRUE);       virtual void	setVisibleAndFrontmost(BOOL take_focus=TRUE, const LLSD& key = LLSD());  	// Defaults to false. @@ -547,7 +547,7 @@ public:  	void			setCycleMode(BOOL mode) { mFocusCycleMode = mode; }  	BOOL			getCycleMode() const { return mFocusCycleMode; } -	void			bringToFront( LLFloater* child, BOOL give_focus = TRUE ); +	void			bringToFront( LLFloater* child, BOOL give_focus = TRUE, BOOL restore = TRUE );  	void			highlightFocusedFloater();  	void			unhighlightFocusedFloater();  	void			focusFrontFloater(); diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index a08cf91a69..492c9315d1 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -400,12 +400,7 @@ void LLLineEditor::setText(const LLStringExplicit &new_text)  	if (mMaxLengthChars)  	{ -		LLWString truncated_wstring = utf8str_to_wstring(truncated_utf8); -		if (truncated_wstring.size() > (U32)mMaxLengthChars) -		{ -			truncated_wstring = truncated_wstring.substr(0, mMaxLengthChars); -		} -		mText.assign(wstring_to_utf8str(truncated_wstring)); +		mText.assign(utf8str_symbol_truncate(truncated_utf8, mMaxLengthChars));  	}  	if (all_selected) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 8f7cac1f61..62c3f401bf 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -588,6 +588,11 @@ void LLView::onVisibilityChange ( BOOL new_visibility )  	BOOL log_visibility_change = LLViewerEventRecorder::instance().getLoggingStatus();  	BOOST_FOREACH(LLView* viewp, mChildList)  	{ +		if (!viewp) +		{ +			continue; +		} +  		// only views that are themselves visible will have their overall visibility affected by their ancestors  		old_visibility=viewp->getVisible(); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 8d863631cf..dce0ea73cd 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1315,13 +1315,10 @@ set(viewer_HEADER_FILES  source_group("CMake Rules" FILES ViewerInstall.cmake) +#summary.json creation moved to viewer_manifest.py MAINT-6413  # the viewer_version.txt file created here is for passing to viewer_manifest and autobuild -# the summary.json file is created for the benefit of the TeamCity builds, where -#   it is used to provide descriptive information to the build results page  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt"             "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\n") -file(WRITE "${CMAKE_BINARY_DIR}/summary.json" -           "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}\"}\n")  set_source_files_properties(     llversioninfo.cpp tests/llversioninfo_test.cpp  diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index be8ea2bab9..e99b94f150 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -32,7 +32,7 @@ RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors 1   16 -RenderAvatarMaxComplexity          1	80000 +RenderAvatarMaxComplexity          1	350000  RenderAvatarVP				1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index ca6c00951d..801a622e93 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -32,7 +32,7 @@ RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors 1   16 -RenderAvatarMaxComplexity          1	80000 +RenderAvatarMaxComplexity          1	350000  RenderAvatarVP				1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index ea69b088f9..1f891ee4d7 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -32,7 +32,7 @@ RenderAvatarCloth				1	1  RenderAvatarLODFactor			1	1.0  RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarMaxNonImpostors     1   16 -RenderAvatarMaxComplexity              1	80000 +RenderAvatarMaxComplexity              1	350000  RenderAvatarVP					1	1  RenderAutoMuteSurfaceAreaLimit     1	1000.0  RenderCubeMap				1	1 diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 7f1c981a3c..d4ba230feb 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -809,3 +809,62 @@ void LLFeatureManager::applyBaseMasks()  		maskFeatures("safe");  	}  } + +LLSD LLFeatureManager::getRecommendedSettingsMap() +{ +	// Create the map and fill it with the hardware recommended settings. +	// It's needed to create an initial Default graphics preset (MAINT-6435). +	// The process is similar to the one LLFeatureManager::applyRecommendedSettings() does. + +	LLSD map(LLSD::emptyMap()); + +	loadGPUClass(); +	U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5)); +	LL_INFOS("RenderInit") << "Getting the map of recommended settings for level " << level << LL_ENDL; + +	applyBaseMasks(); +	std::string features(isValidGraphicsLevel(level) ? getNameForGraphicsLevel(level) : "Low"); + +	maskFeatures(features); + +	LLControlVariable* ctrl = gSavedSettings.getControl("RenderQualityPerformance"); // include the quality value for correct preset loading    +	map["RenderQualityPerformance"]["Value"] = (LLSD::Integer)level; +	map["RenderQualityPerformance"]["Comment"] = ctrl->getComment();; +	map["RenderQualityPerformance"]["Persist"] = 1; +	map["RenderQualityPerformance"]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); + + + +	for (feature_map_t::iterator mIt = mFeatures.begin(); mIt != mFeatures.end(); ++mIt) +	{ +		LLControlVariable* ctrl = gSavedSettings.getControl(mIt->first); +		if (ctrl == NULL) +		{ +			LL_WARNS() << "AHHH! Control setting " << mIt->first << " does not exist!" << LL_ENDL; +			continue; +		} + +		if (ctrl->isType(TYPE_BOOLEAN)) +		{ +			map[mIt->first]["Value"] = (LLSD::Boolean)getRecommendedValue(mIt->first); +		} +		else if (ctrl->isType(TYPE_S32) || ctrl->isType(TYPE_U32)) +		{ +			map[mIt->first]["Value"] = (LLSD::Integer)getRecommendedValue(mIt->first); +		} +		else if (ctrl->isType(TYPE_F32)) +		{ +			map[mIt->first]["Value"] = (LLSD::Real)getRecommendedValue(mIt->first); +		} +		else +		{ +			LL_WARNS() << "AHHH! Control variable is not a numeric type!" << LL_ENDL; +			continue; +		} +		map[mIt->first]["Comment"] = ctrl->getComment();; +		map[mIt->first]["Persist"] = 1; +		map[mIt->first]["Type"] = LLControlGroup::typeEnumToString(ctrl->type()); +	} +	 +	return map; +} diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h index 12ea691b49..c3d87cea0b 100644 --- a/indra/newview/llfeaturemanager.h +++ b/indra/newview/llfeaturemanager.h @@ -157,7 +157,9 @@ public:  	// load the dynamic GPU/feature table from a website  	void fetchHTTPTables(); -	 + +	LLSD getRecommendedSettingsMap(); +  protected:  	bool loadGPUClass(); diff --git a/indra/newview/llfloaterdeleteprefpreset.cpp b/indra/newview/llfloaterdeleteprefpreset.cpp index c0888db3bc..7dedbbf984 100644 --- a/indra/newview/llfloaterdeleteprefpreset.cpp +++ b/indra/newview/llfloaterdeleteprefpreset.cpp @@ -53,8 +53,6 @@ BOOL LLFloaterDeletePrefPreset::postBuild()  	getChild<LLButton>("cancel")->setCommitCallback(boost::bind(&LLFloaterDeletePrefPreset::onBtnCancel, this));  	LLPresetsManager::instance().setPresetListChangeCallback(boost::bind(&LLFloaterDeletePrefPreset::onPresetsListChange, this)); -	onPresetsListChange(); // ensure that delete button is disabled when the list is empty -  	return TRUE;  } diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp index a12ec390af..b64df2bd47 100644 --- a/indra/newview/llinspectremoteobject.cpp +++ b/indra/newview/llinspectremoteobject.cpp @@ -181,7 +181,7 @@ void LLInspectRemoteObject::update()  	getChild<LLUICtrl>("map_btn")->setEnabled(! mSLurl.empty());  	// disable the Block button if we don't have the object ID (will this ever happen?) -	getChild<LLUICtrl>("block_btn")->setEnabled(! mObjectID.isNull()); +	getChild<LLUICtrl>("block_btn")->setEnabled(!mObjectID.isNull() && !LLMuteList::getInstance()->isMuted(mObjectID));  }  ////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 0aaed3e286..117507ef39 100644 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -4034,6 +4034,11 @@ void LLMeshRepository::uploadError(LLSD& args)  //static  F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value)  { +	if (header.size() == 0) +	{ +		return 0.f; +	} +  	F32 max_distance = 512.f;  	F32 dlowest = llmin(radius/0.03f, max_distance); diff --git a/indra/newview/llpresetsmanager.cpp b/indra/newview/llpresetsmanager.cpp index d95546f11d..9957039f72 100644 --- a/indra/newview/llpresetsmanager.cpp +++ b/indra/newview/llpresetsmanager.cpp @@ -38,6 +38,7 @@  #include "llviewercontrol.h"  #include "llfloaterpreference.h"  #include "llfloaterreg.h" +#include "llfeaturemanager.h"  LLPresetsManager::LLPresetsManager()  { @@ -60,7 +61,7 @@ void LLPresetsManager::createMissingDefault()  		LL_INFOS() << "No default preset found -- creating one at " << default_file << LL_ENDL;  		// Write current graphic settings as the default -		savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT); +        savePreset(PRESETS_GRAPHIC, PRESETS_DEFAULT, true);  	}      else      { @@ -134,7 +135,7 @@ void LLPresetsManager::loadPresetNamesFromDir(const std::string& dir, preset_nam  	presets = mPresetNames;  } -bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name) +bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string name, bool createDefault)  {  	if (LLTrans::getString(PRESETS_DEFAULT) == name)  	{ @@ -146,11 +147,10 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n  	if(PRESETS_GRAPHIC == subdirectory)  	{ -		gSavedSettings.setString("PresetGraphicActive", name); -  		LLFloaterPreference* instance = LLFloaterReg::findTypedInstance<LLFloaterPreference>("preferences"); -		if (instance) +		if (instance && !createDefault)  		{ +            gSavedSettings.setString("PresetGraphicActive", name);  			instance->getControlNames(name_list);              LL_DEBUGS() << "saving preset '" << name << "'; " << name_list.size() << " names" << LL_ENDL;  			name_list.push_back("PresetGraphicActive"); @@ -170,23 +170,36 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n          LL_ERRS() << "Invalid presets directory '" << subdirectory << "'" << LL_ENDL;      } -    if (name_list.size() > 1) // if the active preset name is the only thing in the list, don't save the list +    if (name_list.size() > 1 // if the active preset name is the only thing in the list, don't save the list +        || (createDefault && name == PRESETS_DEFAULT && subdirectory == PRESETS_GRAPHIC)) // or create a default graphics preset from hw recommended settings       {          // make an empty llsd          LLSD paramsData(LLSD::emptyMap()); -        for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it) +        if (createDefault) +        { +            paramsData = LLFeatureManager::getInstance()->getRecommendedSettingsMap(); +            if (gSavedSettings.getU32("RenderAvatarMaxComplexity") == 0) +            { +                // use the recommended setting as an initial one (MAINT-6435) +                gSavedSettings.setU32("RenderAvatarMaxComplexity", paramsData["RenderAvatarMaxComplexity"]["Value"].asInteger()); +            } +        } +        else          { -            std::string ctrl_name = *it; -            LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); -            std::string comment = ctrl->getComment(); -            std::string type = LLControlGroup::typeEnumToString(ctrl->type()); -            LLSD value = ctrl->getValue(); - -            paramsData[ctrl_name]["Comment"] =  comment; -            paramsData[ctrl_name]["Persist"] = 1; -            paramsData[ctrl_name]["Type"] = type; -            paramsData[ctrl_name]["Value"] = value; +            for (std::vector<std::string>::iterator it = name_list.begin(); it != name_list.end(); ++it) +            { +                std::string ctrl_name = *it; +                LLControlVariable* ctrl = gSavedSettings.getControl(ctrl_name).get(); +                std::string comment = ctrl->getComment(); +                std::string type = LLControlGroup::typeEnumToString(ctrl->type()); +                LLSD value = ctrl->getValue(); + +                paramsData[ctrl_name]["Comment"] = comment; +                paramsData[ctrl_name]["Persist"] = 1; +                paramsData[ctrl_name]["Type"] = type; +                paramsData[ctrl_name]["Value"] = value; +            }          }          std::string pathName(getPresetsDir(subdirectory) + gDirUtilp->getDirDelimiter() + LLURI::escape(name) + ".xml"); @@ -203,10 +216,12 @@ bool LLPresetsManager::savePreset(const std::string& subdirectory, std::string n              LL_DEBUGS() << "saved preset '" << name << "'; " << paramsData.size() << " parameters" << LL_ENDL; -            gSavedSettings.setString("PresetGraphicActive", name); - -            // signal interested parties -            triggerChangeSignal(); +            if (!createDefault) +            { +                gSavedSettings.setString("PresetGraphicActive", name); +                // signal interested parties +                triggerChangeSignal(); +            }          }          else          { diff --git a/indra/newview/llpresetsmanager.h b/indra/newview/llpresetsmanager.h index ac4f0c010c..21f9885f27 100644 --- a/indra/newview/llpresetsmanager.h +++ b/indra/newview/llpresetsmanager.h @@ -56,7 +56,7 @@ public:  	static std::string getPresetsDir(const std::string& subdirectory);  	void setPresetNamesInComboBox(const std::string& subdirectory, LLComboBox* combo, EDefaultOptions default_option);  	void loadPresetNamesFromDir(const std::string& dir, preset_name_list_t& presets, EDefaultOptions default_option); -	bool savePreset(const std::string& subdirectory, std::string name); +	bool savePreset(const std::string& subdirectory, std::string name, bool createDefault = false);  	void loadPreset(const std::string& subdirectory, std::string name);  	bool deletePreset(const std::string& subdirectory, std::string name); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 672d153e51..cdc7e20c2c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -8145,6 +8145,7 @@ U32 LLVOAvatar::getPartitionType() const  //static  void LLVOAvatar::updateImpostors()  { +	LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;  	LLCharacter::sAllowInstancesChange = FALSE;  	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin(); diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index ae8e78a9d6..ded814bbeb 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -67,7 +67,7 @@      follows="left|top"      height="32"      left_pad="-11" -    max_length_bytes="64" +    max_length_chars="16"      text_pad_left="8"      name="password_edit"      label="Password" diff --git a/indra/newview/skins/default/xui/en/panel_login_first.xml b/indra/newview/skins/default/xui/en/panel_login_first.xml index dc6e27a1ee..35b80c56ab 100644 --- a/indra/newview/skins/default/xui/en/panel_login_first.xml +++ b/indra/newview/skins/default/xui/en/panel_login_first.xml @@ -124,7 +124,7 @@              width="200"              height="32"              left="220" -            max_length_bytes="64" +            max_length_chars="16"              name="password_edit"              label="Password"              text_pad_left="8" diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 1c77cf805e..f3d89bb866 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -30,6 +30,7 @@ import sys  import os.path  import shutil  import errno +import json  import re  import tarfile  import time @@ -181,9 +182,16 @@ class ViewerManifest(LLManifest):                  self.path("*.tga")                  self.end_prefix("local_assets") -            # Files in the newview/ directory +            # File in the newview/ directory              self.path("gpu_table.txt") -            # The summary.json file gets left in the build directory by newview/CMakeLists.txt. + +            #summary.json.  Standard with exception handling is fine.  If we can't open a new file for writing, we have worse problems +            summary_dict = {"Type":"viewer","Version":'.'.join(self.args['version']),"Channel":self.channel_with_pkg_suffix()} +            with open(os.path.join(os.pardir,'summary.json'), 'w') as summary_handle: +                json.dump(summary_dict,summary_handle) + +            #we likely no longer need the test, since we will throw an exception above, but belt and suspenders and we get the +            #return code for free.              if not self.path2basename(os.pardir, "summary.json"):                  print "No summary.json file" | 
