diff options
Diffstat (limited to 'indra')
28 files changed, 305 insertions, 325 deletions
| diff --git a/indra/llappearance/llwearable.cpp b/indra/llappearance/llwearable.cpp index 63069adcc8..edcfd49bb4 100644 --- a/indra/llappearance/llwearable.cpp +++ b/indra/llappearance/llwearable.cpp @@ -437,7 +437,13 @@ LLWearable::EImportResult LLWearable::importStream( std::istream& input_stream,  				LL_WARNS() << "Bad Wearable asset: bad texture, #" << i << LL_ENDL;  				return LLWearable::FAILURE;  		} -	 + +		if (te >= ETextureIndex::TEX_NUM_INDICES) //createLayers() converts to ETextureIndex +		{ +			LL_WARNS() << "Bad Wearable asset: bad texture index: " << te << LL_ENDL; +			return LLWearable::FAILURE; +		} +  		if( !LLUUID::validate( uuid_buffer ) )  		{  				LL_WARNS() << "Bad Wearable asset: bad texture uuid: "  diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 6e3aba51cf..f98c2423e5 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2708,6 +2708,14 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  				}  			}  			break; +		default: +			{ +				if (gDebugWindowProc) +				{ +					LL_INFOS("Window") << "Unhandled windows message code: " << U32(u_msg) << LL_ENDL; +				} +			} +			break;  		}  	window_imp->mCallbacks->handlePauseWatchdog(window_imp);	 diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h index 7914067976..2fc496a144 100644 --- a/indra/newview/llfilepicker.h +++ b/indra/newview/llfilepicker.h @@ -198,6 +198,4 @@ public:  	~LLFilePicker();  }; -const std::string upload_pick(void* data); -  #endif diff --git a/indra/newview/llfloaterautoreplacesettings.cpp b/indra/newview/llfloaterautoreplacesettings.cpp index 5830f2f711..ec05ba924c 100644 --- a/indra/newview/llfloaterautoreplacesettings.cpp +++ b/indra/newview/llfloaterautoreplacesettings.cpp @@ -54,6 +54,7 @@  #include "llhost.h"  #include "llassetstorage.h"  #include "roles_constants.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include "llviewertexteditor.h"  #include <boost/tokenizer.hpp> @@ -349,62 +350,58 @@ void LLFloaterAutoReplaceSettings::onDeleteEntry()  // called when the Import List button is pressed  void LLFloaterAutoReplaceSettings::onImportList()  { -	LLFilePicker& picker = LLFilePicker::instance(); -	if( picker.getOpenFile( LLFilePicker::FFLOAD_XML) ) +	(new LLFilePickerReplyThread(boost::bind(&LLFloaterAutoReplaceSettings::loadListFromFile, this, _1), LLFilePicker::FFLOAD_XML, false))->getFile(); +} + +void LLFloaterAutoReplaceSettings::loadListFromFile(const std::vector<std::string>& filenames) +{ +	llifstream file; +	file.open(filenames[0].c_str()); +	LLSD newList; +	if (file.is_open())  	{ -		llifstream file; -		file.open(picker.getFirstFile().c_str()); -		LLSD newList; -		if (file.is_open()) -		{ -			LLSDSerialize::fromXMLDocument(newList, file); -		} -		file.close(); +		LLSDSerialize::fromXMLDocument(newList, file); +	} +	file.close(); -		switch ( mSettings.addList(newList) ) -		{ -		case LLAutoReplaceSettings::AddListOk: -			mSelectedListName = LLAutoReplaceSettings::getListName(newList); +	switch ( mSettings.addList(newList) ) +	{ +	case LLAutoReplaceSettings::AddListOk: +		mSelectedListName = LLAutoReplaceSettings::getListName(newList); -			updateListNames(); -			updateListNamesControls(); -			updateReplacementsList(); -			break; +		updateListNames(); +		updateListNamesControls(); +		updateReplacementsList(); +		break; -		case LLAutoReplaceSettings::AddListDuplicateName: -			{ -				std::string newName = LLAutoReplaceSettings::getListName(newList); -				LL_WARNS("AutoReplace")<<"name '"<<newName<<"' is in use; prompting for new name"<<LL_ENDL; -				LLSD newPayload; -				newPayload["list"] = newList; -				LLSD args; -				args["DUPNAME"] = newName; +	case LLAutoReplaceSettings::AddListDuplicateName: +		{ +			std::string newName = LLAutoReplaceSettings::getListName(newList); +			LL_WARNS("AutoReplace")<<"name '"<<newName<<"' is in use; prompting for new name"<<LL_ENDL; +			LLSD newPayload; +			newPayload["list"] = newList; +			LLSD args; +			args["DUPNAME"] = newName; -				LLNotificationsUtil::add("RenameAutoReplaceList", args, newPayload, +			LLNotificationsUtil::add("RenameAutoReplaceList", args, newPayload,  										 boost::bind(&LLFloaterAutoReplaceSettings::callbackListNameConflict, this, _1, _2)); -			} -			break; +		} +		break; -		case LLAutoReplaceSettings::AddListInvalidList: -			LLNotificationsUtil::add("InvalidAutoReplaceList"); -			LL_WARNS("AutoReplace") << "imported list was invalid" << LL_ENDL; +	case LLAutoReplaceSettings::AddListInvalidList: +		LLNotificationsUtil::add("InvalidAutoReplaceList"); +		LL_WARNS("AutoReplace") << "imported list was invalid" << LL_ENDL; -			mSelectedListName.clear(); -			updateListNames(); -			updateListNamesControls(); -			updateReplacementsList(); -			break; +		mSelectedListName.clear(); +		updateListNames(); +		updateListNamesControls(); +		updateReplacementsList(); +		break; -		default: -			LL_ERRS("AutoReplace") << "invalid AddListResult" << LL_ENDL; +	default: +		LL_ERRS("AutoReplace") << "invalid AddListResult" << LL_ENDL; -		} -		 -	} -	else -	{ -		LL_DEBUGS("AutoReplace") << "file selection failed for import list" << LL_ENDL; -	}		 +	}	  }  void LLFloaterAutoReplaceSettings::onNewList() @@ -539,16 +536,17 @@ void LLFloaterAutoReplaceSettings::onDeleteList()  void LLFloaterAutoReplaceSettings::onExportList()  {  	std::string listName=mListNames->getFirstSelected()->getColumn(0)->getValue().asString(); -	const LLSD* list = mSettings.exportList(listName);  	std::string listFileName = listName + ".xml"; -	LLFilePicker& picker = LLFilePicker::instance(); -	if( picker.getSaveFile( LLFilePicker::FFSAVE_XML, listFileName) ) -	{ -		llofstream file; -		file.open(picker.getFirstFile().c_str()); -		LLSDSerialize::toPrettyXML(*list, file); -		file.close(); -	} +	(new LLFilePickerReplyThread(boost::bind(&LLFloaterAutoReplaceSettings::saveListToFile, this, _1, listName), LLFilePicker::FFSAVE_XML, listFileName))->getFile(); +} + +void LLFloaterAutoReplaceSettings::saveListToFile(const std::vector<std::string>& filenames, std::string listName) +{ +	llofstream file; +	const LLSD* list = mSettings.exportList(listName); +	file.open(filenames[0].c_str()); +	LLSDSerialize::toPrettyXML(*list, file); +	file.close();  }  void LLFloaterAutoReplaceSettings::onAddEntry() diff --git a/indra/newview/llfloaterautoreplacesettings.h b/indra/newview/llfloaterautoreplacesettings.h index 629aea3e3c..2109aa7026 100644 --- a/indra/newview/llfloaterautoreplacesettings.h +++ b/indra/newview/llfloaterautoreplacesettings.h @@ -112,6 +112,9 @@ private:  	bool selectedListIsLast();  	void cleanUp(); + +	void loadListFromFile(const std::vector<std::string>& filenames); +	void saveListToFile(const std::vector<std::string>& filenames, std::string listName);  };  #endif  // LLFLOATERAUTOREPLACESETTINGS_H diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp index 1310a60638..fbb7432f71 100644 --- a/indra/newview/llfloaterproperties.cpp +++ b/indra/newview/llfloaterproperties.cpp @@ -490,7 +490,6 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)  	if (is_obj_modify && can_agent_sell   		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))  	{ -		getChildView("SaleLabel")->setEnabled(is_complete);  		getChildView("CheckPurchase")->setEnabled(is_complete);  		getChildView("NextOwnerLabel")->setEnabled(TRUE); @@ -498,13 +497,11 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)  		getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions);  		getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); -		getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);  		combo_sale_type->setEnabled(is_complete && is_for_sale);  		edit_cost->setEnabled(is_complete && is_for_sale);  	}  	else  	{ -		getChildView("SaleLabel")->setEnabled(FALSE);  		getChildView("CheckPurchase")->setEnabled(FALSE);  		getChildView("NextOwnerLabel")->setEnabled(FALSE); @@ -512,7 +509,6 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)  		getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);  		getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE); -		getChildView("TextPrice")->setEnabled(FALSE);  		combo_sale_type->setEnabled(FALSE);  		edit_cost->setEnabled(FALSE);  	} diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp index 5124dae147..b87044ef5a 100644 --- a/indra/newview/llfloaterspellchecksettings.cpp +++ b/indra/newview/llfloaterspellchecksettings.cpp @@ -30,12 +30,13 @@  #include "llfilepicker.h"  #include "llfloaterreg.h"  #include "llfloaterspellchecksettings.h" +#include "llnotificationsutil.h"  #include "llscrolllistctrl.h"  #include "llsdserialize.h"  #include "llspellcheck.h"  #include "lltrans.h"  #include "llviewercontrol.h" -#include "llnotificationsutil.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include <boost/algorithm/string.hpp> @@ -258,13 +259,12 @@ BOOL LLFloaterSpellCheckerImport::postBuild(void)  void LLFloaterSpellCheckerImport::onBtnBrowse()  { -	LLFilePicker& file_picker = LLFilePicker::instance(); -	if (!file_picker.getOpenFile(LLFilePicker::FFLOAD_DICTIONARY)) -	{ -		return; -	} +	(new LLFilePickerReplyThread(boost::bind(&LLFloaterSpellCheckerImport::importSelectedDictionary, this, _1), LLFilePicker::FFLOAD_DICTIONARY, false))->getFile(); +} -	std::string filepath = file_picker.getFirstFile(); +void LLFloaterSpellCheckerImport::importSelectedDictionary(const std::vector<std::string>& filenames) +{ +	std::string filepath = filenames[0];  	const std::string extension = gDirUtilp->getExtension(filepath);  	if ("xcu" == extension) @@ -277,7 +277,7 @@ void LLFloaterSpellCheckerImport::onBtnBrowse()  	}  	getChild<LLUICtrl>("dictionary_path")->setValue(filepath); -	 +  	mDictionaryDir = gDirUtilp->getDirName(filepath);  	mDictionaryBasename = gDirUtilp->getBaseFileName(filepath, true);  	getChild<LLUICtrl>("dictionary_name")->setValue(mDictionaryBasename); diff --git a/indra/newview/llfloaterspellchecksettings.h b/indra/newview/llfloaterspellchecksettings.h index de59d83f24..f9bbefafb7 100644 --- a/indra/newview/llfloaterspellchecksettings.h +++ b/indra/newview/llfloaterspellchecksettings.h @@ -58,6 +58,7 @@ protected:  	void onBtnBrowse();  	void onBtnCancel();  	void onBtnOK(); +	void importSelectedDictionary(const std::vector<std::string>& filenames);  	std::string parseXcuFile(const std::string& file_path) const;  	std::string mDictionaryDir; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index cf7096da9c..7fc60ddaac 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -1213,7 +1213,7 @@ void LLFloaterTools::getMediaState()  		  &&first_object->permModify()   	      ))  	{ -		getChildView("Add_Media")->setEnabled(FALSE); +		getChildView("add_media")->setEnabled(FALSE);  		media_info->clear();  		clearMediaSettings();  		return; @@ -1224,7 +1224,7 @@ void LLFloaterTools::getMediaState()  	if(!has_media_capability)  	{ -		getChildView("Add_Media")->setEnabled(FALSE); +		getChildView("add_media")->setEnabled(FALSE);  		LL_WARNS("LLFloaterTools: media") << "Media not enabled (no capability) in this region!" << LL_ENDL;  		clearMediaSettings();  		return; @@ -1319,7 +1319,7 @@ void LLFloaterTools::getMediaState()  	// update UI depending on whether "object" (prim or face) has media  	// and whether or not you are allowed to edit it. -	getChildView("Add_Media")->setEnabled(editable); +	getChildView("add_media")->setEnabled(editable);  	// IF all the faces have media (or all dont have media)  	if ( LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo )  	{ @@ -1341,10 +1341,7 @@ void LLFloaterTools::getMediaState()  			media_title = multi_media_info_str;  		} -		getChildView("media_tex")->setEnabled(bool_has_media && editable); -		getChildView("edit_media")->setEnabled(bool_has_media && LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo && editable );  		getChildView("delete_media")->setEnabled(bool_has_media && editable ); -		getChildView("add_media")->setEnabled(editable);  			// TODO: display a list of all media on the face - use 'identical' flag  	}  	else // not all face has media but at least one does. @@ -1366,10 +1363,7 @@ void LLFloaterTools::getMediaState()  			}  		} -		getChildView("media_tex")->setEnabled(TRUE); -		getChildView("edit_media")->setEnabled(LLFloaterMediaSettings::getInstance()->mIdenticalHasMediaInfo);  		getChildView("delete_media")->setEnabled(TRUE); -		getChildView("add_media")->setEnabled(editable);  	}  	navigateToTitleMedia(media_title); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 7e3fa1d334..702675ad49 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -1449,14 +1449,16 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)  //static  void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const LLUUID& obj_id, BOOL main_panel, BOOL take_keyboard_focus, BOOL reset_filter)  { -	LLInventoryPanel *active_panel; +	LLSidepanelInventory* sidepanel_inventory = LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory"); +	sidepanel_inventory->showInventoryPanel(); +  	bool in_inbox = (gInventory.isObjectDescendentOf(obj_id, gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX)));  	if (main_panel && !in_inbox)  	{ -		LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory")->selectAllItemsPanel(); +		sidepanel_inventory->selectAllItemsPanel();  	} -	active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open); +	LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);  	if (active_panel)  	{ @@ -1469,7 +1471,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(BOOL auto_open, const L  		if (in_inbox)  		{ -			LLSidepanelInventory * sidepanel_inventory =	LLFloaterSidePanelContainer::getPanel<LLSidepanelInventory>("inventory"); +			  			LLInventoryPanel * inventory_panel = NULL;  			sidepanel_inventory->openInbox();  			inventory_panel = sidepanel_inventory->getInboxPanel(); diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 7e75dca908..01ce4470f0 100644 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1165,16 +1165,6 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)  			getChild<LLUICtrl>("combobox texgen")->setTentative(!identical);  			getChildView("tex gen")->setEnabled(editable); -			if (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR) -			{ -				// EXP-1507 (change label based on the mapping mode) -				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per meter")); -			} -			else -			if (selected_texgen == LLTextureEntry::TEX_GEN_DEFAULT) -			{ -				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per face")); -			}  			}  		{ @@ -1390,8 +1380,7 @@ void LLPanelFace::updateUI(bool force_set_values /*false*/)  			mColorSwatch->setValid(FALSE);  		}  		getChildView("color trans")->setEnabled(FALSE); -		getChildView("rpt")->setEnabled(FALSE); -		getChildView("tex offset")->setEnabled(FALSE); +		getChildView("rptctrl")->setEnabled(FALSE);  		getChildView("tex gen")->setEnabled(FALSE);  		getChildView("label shininess")->setEnabled(FALSE);  		getChildView("label bumpiness")->setEnabled(FALSE); diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index 95a535da50..1c4384ff08 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -524,7 +524,6 @@ void LLPanelVolume::refresh()  	BOOL visible = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_DEFERRED) > 0 ? TRUE : FALSE; -	getChildView("label texture")->setVisible( visible);  	getChildView("Light FOV")->setVisible( visible);  	getChildView("Light Focus")->setVisible( visible);  	getChildView("Light Ambiance")->setVisible( visible); diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 945f3c370c..d4eecaffce 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -61,6 +61,7 @@  #include "llselectmgr.h"  #include "llviewerinventory.h"  #include "llviewermenu.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include "llviewerobject.h"  #include "llviewerobjectlist.h"  #include "llviewerregion.h" @@ -1202,17 +1203,12 @@ BOOL LLScriptEdCore::handleKeyHere(KEY key, MASK mask)  void LLScriptEdCore::onBtnLoadFromFile( void* data )  { -	LLScriptEdCore* self = (LLScriptEdCore*) data; - -	// TODO Maybe add a dialogue warning here if the current file has unsaved changes. -	LLFilePicker& file_picker = LLFilePicker::instance(); -	if( !file_picker.getOpenFile( LLFilePicker::FFLOAD_SCRIPT ) ) -	{ -		//File picking cancelled by user, so nothing to do. -		return; -	} +	(new LLFilePickerReplyThread(boost::bind(&LLScriptEdCore::loadScriptFromFile, _1, data), LLFilePicker::FFLOAD_SCRIPT, false))->getFile(); +} -	std::string filename = file_picker.getFirstFile(); +void LLScriptEdCore::loadScriptFromFile(const std::vector<std::string>& filenames, void* data) +{ +	std::string filename = filenames[0];  	llifstream fin(filename.c_str()); @@ -1220,8 +1216,8 @@ void LLScriptEdCore::onBtnLoadFromFile( void* data )  	std::string text;  	std::string linetotal;  	while (!fin.eof()) -	{  -		getline(fin,line); +	{ +		getline(fin, line);  		text += line;  		if (!fin.eof())  		{ @@ -1231,7 +1227,8 @@ void LLScriptEdCore::onBtnLoadFromFile( void* data )  	fin.close();  	// Only replace the script if there is something to replace with. -	if (text.length() > 0) +	LLScriptEdCore* self = (LLScriptEdCore*)data; +	if (self && (text.length() > 0))  	{  		self->mEditor->selectAll();  		LLWString script(utf8str_to_wstring(text)); @@ -1247,16 +1244,21 @@ void LLScriptEdCore::onBtnSaveToFile( void* userdata )  	if( self->mSaveCallback )  	{ -		LLFilePicker& file_picker = LLFilePicker::instance(); -		if( file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT, self->mScriptName ) ) -		{ -			std::string filename = file_picker.getFirstFile(); -			std::string scriptText=self->mEditor->getText(); -			llofstream fout(filename.c_str()); -			fout<<(scriptText); -			fout.close(); -			self->mSaveCallback( self->mUserdata, FALSE ); -		} +		(new LLFilePickerReplyThread(boost::bind(&LLScriptEdCore::saveScriptToFile, _1, userdata), LLFilePicker::FFSAVE_SCRIPT, self->mScriptName))->getFile(); +	} +} + +void LLScriptEdCore::saveScriptToFile(const std::vector<std::string>& filenames, void* data) +{ +	LLScriptEdCore* self = (LLScriptEdCore*)data; +	if (self) +	{ +		std::string filename = filenames[0]; +		std::string scriptText = self->mEditor->getText(); +		llofstream fout(filename.c_str()); +		fout << (scriptText); +		fout.close(); +		self->mSaveCallback(self->mUserdata, FALSE);  	}  } diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index a185d85889..69cf9d9158 100644 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -109,7 +109,10 @@ public:  	static void		onBtnInsertSample(void*);  	static void		onBtnInsertFunction(LLUICtrl*, void*);  	static void		onBtnLoadFromFile(void*); -    static void		onBtnSaveToFile(void*); +	static void		onBtnSaveToFile(void*); + +	static void		loadScriptFromFile(const std::vector<std::string>& filenames, void* data); +	static void		saveScriptToFile(const std::vector<std::string>& filenames, void* data);  	static bool		enableSaveToFileMenu(void* userdata);  	static bool		enableLoadFromFileMenu(void* userdata); diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp index 12bcd89cb0..9d8be4b2fe 100644 --- a/indra/newview/llpreviewtexture.cpp +++ b/indra/newview/llpreviewtexture.cpp @@ -46,6 +46,7 @@  #include "lltextureview.h"  #include "llui.h"  #include "llviewerinventory.h" +#include "llviewermenufile.h" // LLFilePickerReplyThread  #include "llviewertexture.h"  #include "llviewertexturelist.h"  #include "lluictrlfactory.h" @@ -293,27 +294,27 @@ void LLPreviewTexture::saveAs()  	if( mLoadingFullImage )  		return; -	LLFilePicker& file_picker = LLFilePicker::instance(); -	const LLInventoryItem* item = getItem() ; -	if( !file_picker.getSaveFile( LLFilePicker::FFSAVE_TGAPNG, item ? LLDir::getScrubbedFileName(item->getName()) : LLStringUtil::null) ) -	{ -		// User canceled or we failed to acquire save file. -		return; -	} -	if(mPreviewToSave) +	std::string filename = getItem() ? LLDir::getScrubbedFileName(getItem()->getName()) : LLStringUtil::null; +	(new LLFilePickerReplyThread(boost::bind(&LLPreviewTexture::saveTextureToFile, this, _1), LLFilePicker::FFSAVE_TGAPNG, filename))->getFile(); +} + +void LLPreviewTexture::saveTextureToFile(const std::vector<std::string>& filenames) +{ +	const LLInventoryItem* item = getItem(); +	if (item && mPreviewToSave)  	{  		mPreviewToSave = FALSE;  		LLFloaterReg::showTypedInstance<LLPreviewTexture>("preview_texture", item->getUUID());  	}  	// remember the user-approved/edited file name. -	mSaveFileName = file_picker.getFirstFile(); +	mSaveFileName = filenames[0];  	mLoadingFullImage = TRUE;  	getWindow()->incBusyCount(); -	mImage->forceToSaveRawImage(0) ;//re-fetch the raw image if the old one is removed. -	mImage->setLoadedCallback( LLPreviewTexture::onFileLoadedForSave,  -								0, TRUE, FALSE, new LLUUID( mItemUUID ), &mCallbackTextureList ); +	mImage->forceToSaveRawImage(0);//re-fetch the raw image if the old one is removed. +	mImage->setLoadedCallback(LLPreviewTexture::onFileLoadedForSave, +		0, TRUE, FALSE, new LLUUID(mItemUUID), &mCallbackTextureList);  }  // virtual diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h index c156c48d0c..ad77d9e118 100644 --- a/indra/newview/llpreviewtexture.h +++ b/indra/newview/llpreviewtexture.h @@ -61,6 +61,8 @@ public:  							BOOL final,  							void* userdata );  	void 				openToSave(); + +	void				saveTextureToFile(const std::vector<std::string>& filenames);  	static void			onSaveAsBtn(void* data); diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp index 43e7e57814..a486a29aa2 100644 --- a/indra/newview/llsidepaneliteminfo.cpp +++ b/indra/newview/llsidepaneliteminfo.cpp @@ -441,7 +441,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  	const std::string perm_and_sale_items[]={  		"perms_inv", -		"OwnerLabel",  		"perm_modify",  		"CheckOwnerModify",  		"CheckOwnerCopy", @@ -455,10 +454,8 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		"CheckNextOwnerCopy",  		"CheckNextOwnerTransfer",  		"CheckPurchase", -		"SaleLabel",  		"ComboBoxSaleType", -		"Edit Cost", -		"TextPrice" +		"Edit Cost"  	};  	const std::string debug_items[]={ @@ -495,14 +492,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  	///////////////////////  	// OWNER PERMISSIONS //  	/////////////////////// -	if(can_agent_manipulate) -	{ -		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("you_can")); -	} -	else -	{ -		getChild<LLUICtrl>("OwnerLabel")->setValue(getString("owner_can")); -	}  	U32 base_mask		= perm.getMaskBase();  	U32 owner_mask		= perm.getMaskOwner(); @@ -510,7 +499,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  	U32 everyone_mask	= perm.getMaskEveryone();  	U32 next_owner_mask	= perm.getMaskNextOwner(); -	getChildView("OwnerLabel")->setEnabled(TRUE);  	getChildView("CheckOwnerModify")->setEnabled(FALSE);  	getChild<LLUICtrl>("CheckOwnerModify")->setValue(LLSD((BOOL)(owner_mask & PERM_MODIFY)));  	getChildView("CheckOwnerCopy")->setEnabled(FALSE); @@ -645,7 +633,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  	if (is_obj_modify && can_agent_sell   		&& gAgent.allowOperation(PERM_TRANSFER, perm, GP_OBJECT_MANIPULATE))  	{ -		getChildView("SaleLabel")->setEnabled(is_complete);  		getChildView("CheckPurchase")->setEnabled(is_complete);  		getChildView("NextOwnerLabel")->setEnabled(TRUE); @@ -653,13 +640,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		getChildView("CheckNextOwnerCopy")->setEnabled((base_mask & PERM_COPY) && !cannot_restrict_permissions);  		getChildView("CheckNextOwnerTransfer")->setEnabled((next_owner_mask & PERM_COPY) && !cannot_restrict_permissions); -		getChildView("TextPrice")->setEnabled(is_complete && is_for_sale);  		combo_sale_type->setEnabled(is_complete && is_for_sale);  		edit_cost->setEnabled(is_complete && is_for_sale);  	}  	else  	{ -		getChildView("SaleLabel")->setEnabled(FALSE);  		getChildView("CheckPurchase")->setEnabled(FALSE);  		getChildView("NextOwnerLabel")->setEnabled(FALSE); @@ -667,7 +652,6 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)  		getChildView("CheckNextOwnerCopy")->setEnabled(FALSE);  		getChildView("CheckNextOwnerTransfer")->setEnabled(FALSE); -		getChildView("TextPrice")->setEnabled(FALSE);  		combo_sale_type->setEnabled(FALSE);  		edit_cost->setEnabled(FALSE);  	} diff --git a/indra/newview/llviewerassetupload.cpp b/indra/newview/llviewerassetupload.cpp index 346b2c0d1b..4e13eceb55 100644 --- a/indra/newview/llviewerassetupload.cpp +++ b/indra/newview/llviewerassetupload.cpp @@ -766,14 +766,7 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti              // Show the preview panel for textures and sounds to let              // user know that the image (or snapshot) arrived intact.              LLInventoryPanel* panel = LLInventoryPanel::getActiveInventoryPanel(FALSE); -            if (panel) -            { -                panel->setSelection(serverInventoryItem, TAKE_FOCUS_NO); -            } -            else -            { -                LLInventoryPanel::openInventoryPanelAndSetSelection(TRUE, serverInventoryItem, TRUE, TAKE_FOCUS_NO, TRUE); -            } +            LLInventoryPanel::openInventoryPanelAndSetSelection(TRUE, serverInventoryItem, TRUE, TAKE_FOCUS_NO, (panel == NULL));              // restore keyboard focus              gFocusMgr.setKeyboardFocus(focus); diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp index 8160a3a139..dc05d98228 100644 --- a/indra/newview/llviewermenufile.cpp +++ b/indra/newview/llviewermenufile.cpp @@ -203,6 +203,40 @@ void LLFilePickerThread::clearDead()  	}  } +LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple) +	: LLFilePickerThread(filter, get_multiple), +	mLoadFilter(filter), +	mSaveFilter(LLFilePicker::FFSAVE_ALL), +	mFilePickedSignal(NULL) +{ +	mFilePickedSignal = new file_picked_signal_t(); +	mFilePickedSignal->connect(cb); +} + +LLFilePickerReplyThread::LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name) +	: LLFilePickerThread(filter, proposed_name), +	mLoadFilter(LLFilePicker::FFLOAD_ALL), +	mSaveFilter(filter), +	mFilePickedSignal(NULL) +{ +	mFilePickedSignal = new file_picked_signal_t(); +	mFilePickedSignal->connect(cb); +} + +LLFilePickerReplyThread::~LLFilePickerReplyThread() +{ +	delete mFilePickedSignal; +} + +void LLFilePickerReplyThread::notify(const std::vector<std::string>& filenames) +{ +	if (filenames.empty()) return; + +	if (mFilePickedSignal) +	{ +		(*mFilePickedSignal)(filenames, mLoadFilter, mSaveFilter); +	} +}  //============================================================================ @@ -249,54 +283,21 @@ std::string build_extensions_string(LLFilePicker::ELoadFilter filter)  	}  } -/** -   char* upload_pick(void* data) -   If applicable, brings up a file chooser in which the user selects a file -   to upload for a particular task.  If the file is valid for the given action, -   returns the string to the full path filename, else returns NULL. -   Data is the load filter for the type of file as defined in LLFilePicker. -**/ -const std::string upload_pick(void* data) +const bool check_file_extension(const std::string& filename, LLFilePicker::ELoadFilter type)  { - 	if( gAgentCamera.cameraMouselook() ) -	{ -		gAgentCamera.changeCameraToDefault(); -		// This doesn't seem necessary. JC -		// display(); -	} - -	LLFilePicker::ELoadFilter type; -	if(data) -	{ -		type = (LLFilePicker::ELoadFilter)((intptr_t)data); -	} -	else -	{ -		type = LLFilePicker::FFLOAD_ALL; -	} - -	LLFilePicker& picker = LLFilePicker::instance(); -	if (!picker.getOpenFile(type)) -	{ -		LL_INFOS() << "Couldn't import objects from file" << LL_ENDL; -		return std::string(); -	} - -	 -	const std::string& filename = picker.getFirstFile();  	std::string ext = gDirUtilp->getExtension(filename);  	//strincmp doesn't like NULL pointers  	if (ext.empty())  	{  		std::string short_name = gDirUtilp->getBaseFileName(filename); -		 +  		// No extension  		LLSD args;  		args["FILE"] = short_name;  		LLNotificationsUtil::add("NoFileExtension", args); -		return std::string(); +		return false;  	}  	else  	{ @@ -308,7 +309,7 @@ const std::string upload_pick(void* data)  		std::string valid_extensions = build_extensions_string(type);  		BOOL ext_valid = FALSE; -		 +  		typedef boost::tokenizer<boost::char_separator<char> > tokenizer;  		boost::char_separator<char> sep(" ");  		tokenizer tokens(valid_extensions, sep); @@ -317,9 +318,9 @@ const std::string upload_pick(void* data)  		//now loop over all valid file extensions  		//and compare them to the extension of the file  		//to be uploaded -		for( token_iter = tokens.begin(); -			 token_iter != tokens.end() && ext_valid != TRUE; -			 ++token_iter) +		for (token_iter = tokens.begin(); +			token_iter != tokens.end() && ext_valid != TRUE; +			++token_iter)  		{  			const std::string& cur_token = *token_iter; @@ -339,42 +340,103 @@ const std::string upload_pick(void* data)  			args["EXTENSION"] = ext;  			args["VALIDS"] = valid_extensions;  			LLNotificationsUtil::add("InvalidFileExtension", args); -			return std::string(); +			return false;  		}  	}//end else (non-null extension) +	return true; +} -	//valid file extension +const void upload_single_file(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter type) +{ +	std::string filename = filenames[0]; +	if (!check_file_extension(filename, type)) return; -	//now we check to see -	//if the file is actually a valid image/sound/etc. -	if (type == LLFilePicker::FFLOAD_WAV) +	if (!filename.empty())  	{ -		// pre-qualify wavs to make sure the format is acceptable -		std::string error_msg; -		if (check_for_invalid_wav_formats(filename,error_msg)) +		if (type == LLFilePicker::FFLOAD_WAV)  		{ -			LL_INFOS() << error_msg << ": " << filename << LL_ENDL; -			LLSD args; -			args["FILE"] = filename; -			LLNotificationsUtil::add( error_msg, args ); -			return std::string(); +			// pre-qualify wavs to make sure the format is acceptable +			std::string error_msg; +			if (check_for_invalid_wav_formats(filename, error_msg)) +			{ +				LL_INFOS() << error_msg << ": " << filename << LL_ENDL; +				LLSD args; +				args["FILE"] = filename; +				LLNotificationsUtil::add(error_msg, args); +				return; +			} +			else +			{ +				LLFloaterReg::showInstance("upload_sound", LLSD(filename)); +			} +		} +		if (type == LLFilePicker::FFLOAD_IMAGE) +		{ +			LLFloaterReg::showInstance("upload_image", LLSD(filename));  		} -	}//end if a wave/sound file +		if (type == LLFilePicker::FFLOAD_ANIM) +		{ +			if (filename.rfind(".anim") != std::string::npos) +			{ +				LLFloaterReg::showInstance("upload_anim_anim", LLSD(filename)); +			} +			else +			{ +				LLFloaterReg::showInstance("upload_anim_bvh", LLSD(filename)); +			} +		}		 +	} +	return; +} -	 -	return filename; + +const void upload_bulk(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter type) +{ +	// TODO: +	// Check user balance for entire cost +	// Charge user entire cost +	// Loop, uploading +	// If an upload fails, refund the user for that one +	// +	// Also fix single upload to charge first, then refund + +	S32 expected_upload_cost = LLGlobalEconomy::getInstance()->getPriceUpload(); +	for (std::vector<std::string>::const_iterator in_iter = filenames.begin(); in_iter != filenames.end(); ++in_iter) +	{ +		std::string filename = (*in_iter); +		if (!check_file_extension(filename, type)) continue; +		 +		std::string name = gDirUtilp->getBaseFileName(filename, true); +		std::string asset_name = name; +		LLStringUtil::replaceNonstandardASCII(asset_name, '?'); +		LLStringUtil::replaceChar(asset_name, '|', '?'); +		LLStringUtil::stripNonprintable(asset_name); +		LLStringUtil::trim(asset_name); + +		LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo( +			filename, +			asset_name, +			asset_name, 0, +			LLFolderType::FT_NONE, LLInventoryType::IT_NONE, +			LLFloaterPerms::getNextOwnerPerms("Uploads"), +			LLFloaterPerms::getGroupPerms("Uploads"), +			LLFloaterPerms::getEveryonePerms("Uploads"), +			expected_upload_cost)); + +		upload_new_resource(uploadInfo, NULL, NULL); +	}  }  class LLFileUploadImage : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		std::string filename = upload_pick((void *)LLFilePicker::FFLOAD_IMAGE); -		if (!filename.empty()) +		if (gAgentCamera.cameraMouselook())  		{ -			LLFloaterReg::showInstance("upload_image", LLSD(filename)); +			gAgentCamera.changeCameraToDefault();  		} -		return TRUE; +		(new LLFilePickerReplyThread(boost::bind(&upload_single_file, _1, _2), LLFilePicker::FFLOAD_IMAGE, false))->getFile(); +		return true;  	}  }; @@ -396,11 +458,11 @@ class LLFileUploadSound : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		std::string filename = upload_pick((void*)LLFilePicker::FFLOAD_WAV); -		if (!filename.empty()) +		if (gAgentCamera.cameraMouselook())  		{ -			LLFloaterReg::showInstance("upload_sound", LLSD(filename)); +			gAgentCamera.changeCameraToDefault();  		} +		(new LLFilePickerReplyThread(boost::bind(&upload_single_file, _1, _2), LLFilePicker::FFLOAD_WAV, false))->getFile();  		return true;  	}  }; @@ -409,18 +471,11 @@ class LLFileUploadAnim : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		const std::string filename = upload_pick((void*)LLFilePicker::FFLOAD_ANIM); -		if (!filename.empty()) +		if (gAgentCamera.cameraMouselook())  		{ -			if (filename.rfind(".anim") != std::string::npos) -			{ -				LLFloaterReg::showInstance("upload_anim_anim", LLSD(filename)); -			} -			else -			{ -				LLFloaterReg::showInstance("upload_anim_bvh", LLSD(filename)); -			} +			gAgentCamera.changeCameraToDefault();  		} +		(new LLFilePickerReplyThread(boost::bind(&upload_single_file, _1, _2), LLFilePicker::FFLOAD_ANIM, false))->getFile();  		return true;  	}  }; @@ -429,55 +484,11 @@ class LLFileUploadBulk : public view_listener_t  {  	bool handleEvent(const LLSD& userdata)  	{ -		if( gAgentCamera.cameraMouselook() ) +		if (gAgentCamera.cameraMouselook())  		{  			gAgentCamera.changeCameraToDefault();  		} - -		// TODO: -		// Check extensions for uploadability, cost -		// Check user balance for entire cost -		// Charge user entire cost -		// Loop, uploading -		// If an upload fails, refund the user for that one -		// -		// Also fix single upload to charge first, then refund - -		LLFilePicker& picker = LLFilePicker::instance(); -		if (picker.getMultipleOpenFiles()) -		{ -            std::string filename = picker.getFirstFile(); -            S32 expected_upload_cost = LLGlobalEconomy::getInstance()->getPriceUpload(); - -            while (!filename.empty()) -            { -                std::string name = gDirUtilp->getBaseFileName(filename, true); - -                std::string asset_name = name; -                LLStringUtil::replaceNonstandardASCII( asset_name, '?' ); -                LLStringUtil::replaceChar(asset_name, '|', '?'); -                LLStringUtil::stripNonprintable(asset_name); -                LLStringUtil::trim(asset_name); - -                LLResourceUploadInfo::ptr_t uploadInfo(new LLNewFileResourceUploadInfo( -                    filename, -                    asset_name, -                    asset_name, 0, -                    LLFolderType::FT_NONE, LLInventoryType::IT_NONE, -                    LLFloaterPerms::getNextOwnerPerms("Uploads"), -                    LLFloaterPerms::getGroupPerms("Uploads"), -                    LLFloaterPerms::getEveryonePerms("Uploads"), -                    expected_upload_cost)); - -                upload_new_resource(uploadInfo, NULL, NULL); - -                filename = picker.getNextFile(); -            } -		} -		else -		{ -			LL_INFOS() << "Couldn't import objects from file" << LL_ENDL; -		} +		(new LLFilePickerReplyThread(boost::bind(&upload_bulk, _1, _2), LLFilePicker::FFLOAD_ALL, true))->getFile();  		return true;  	}  }; diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h index 3e23940c3f..15bbdd1e2d 100644 --- a/indra/newview/llviewermenufile.h +++ b/indra/newview/llviewermenufile.h @@ -107,4 +107,23 @@ public:  }; +class LLFilePickerReplyThread : public LLFilePickerThread +{ +public: + +	typedef boost::signals2::signal<void(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter load_filter, LLFilePicker::ESaveFilter save_filter)> file_picked_signal_t; +	 +	LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ELoadFilter filter, bool get_multiple); +	LLFilePickerReplyThread(const file_picked_signal_t::slot_type& cb, LLFilePicker::ESaveFilter filter, const std::string &proposed_name); +	~LLFilePickerReplyThread(); + +	virtual void notify(const std::vector<std::string>& filenames); + +private: +	LLFilePicker::ELoadFilter	mLoadFilter; +	LLFilePicker::ESaveFilter	mSaveFilter; +	file_picked_signal_t*		mFilePickedSignal; +}; + +  #endif diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d54138b80e..f394d6913f 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2156,6 +2156,15 @@ void LLViewerWindow::shutdownViews()  	RecordToChatConsole::getInstance()->stopRecorder();  	LL_INFOS() << "Warning logger is cleaned." << LL_ENDL ; +	gFocusMgr.unlockFocus(); +	gFocusMgr.setMouseCapture(NULL); +	gFocusMgr.setKeyboardFocus(NULL); +	gFocusMgr.setTopCtrl(NULL); +	if (mWindow) +	{ +		mWindow->allowLanguageTextInput(NULL, FALSE); +	} +  	delete mDebugText;  	mDebugText = NULL; @@ -2188,7 +2197,11 @@ void LLViewerWindow::shutdownViews()  	view_listener_t::cleanup();  	LL_INFOS() << "view listeners destroyed." << LL_ENDL ; -	 + +	// Clean up pointers that are going to be invalid. (todo: check sMenuContainer) +	mProgressView = NULL; +	mPopupView = NULL; +  	// Delete all child views.  	delete mRootView;  	mRootView = NULL; diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml index 6667238232..45e16c59ae 100644 --- a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml +++ b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml @@ -418,30 +418,5 @@       width="90">          N:      </text--> -        <!--text -     type="string" -     length="1" -     follows="left|top" -     height="10" -     layout="topleft" -     left="10" -     name="SaleLabel" -     top_pad="5" -     width="330"> -        Mark Item: -    </text--> - -    <!--text -     type="string" -     length="1" -     follows="left|top" -     height="16" -     layout="topleft" -     left="10" -     name="TextPrice" -     top_pad="5" -     width="78"> -        Price: L$ -    </text-->  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml index 1425d16cf1..c2500951a6 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xml @@ -253,7 +253,7 @@      follows="left|top"      height="16"      layout="topleft" -    name="ShadersText" +    name="HardwareText"      top_delta="20"      left="10"      width="128"> @@ -426,7 +426,7 @@      follows="left|top"      height="16"      layout="topleft" -    name="AvatarText" +    name="MeshText"      top_delta="20"      left="400"    	top="21" @@ -917,7 +917,7 @@ are saved in a preset file. -->      label="RenderAvatarMaxComplexity"      layout="topleft"      left="0" -    name="RenderAvatarMaxNonImpostors" +    name="RenderAvatarMaxComplexity"      top_delta="0"      width="0">    </check_box> diff --git a/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml index 01ca38f51a..5e16707340 100644 --- a/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml @@ -53,7 +53,7 @@    <menu_item_check     label="Block Particles"     layout="topleft" -   name="MuteText"> +   name="MuteParticles">        <on_check         function="Block.Check"         parameter="block_particles" /> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 73b7671824..7f9dc0c41f 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -10414,14 +10414,6 @@ Not enough script resources available to attach object!    </notification>    <notification -  icon="alertmodal.tga" -  name="IllegalAttachment" -  type="notify"> -   <tag>fail</tag> -   The attachment has requested a nonexistent point on the avatar. It has been attached to the chest instead. -  </notification> - -  <notification     icon="alertmodal.tga"     name="CantDropItemTrialUser"     type="notify"> diff --git a/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml b/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml index 343c2db2f1..67eff2b762 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_uploads.xml @@ -104,7 +104,7 @@     height="12"     layout="topleft"     left="37" -   name="title_animation" +   name="title_model"     top_pad="7"     width="100">      Models diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml index ffdbc5d227..8c769d87de 100644 --- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml +++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml @@ -11,14 +11,6 @@           name="Texture"           top="0"           width="295"> -            <panel.string -             name="string repeats per meter"> -                Repeats Per Meter -            </panel.string> -            <panel.string -             name="string repeats per face"> -                Repeats Per Face -            </panel.string>              <text               type="string"               length="1" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 0a220e68fd..882fbaf634 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -4199,8 +4199,7 @@ Try enclosing path to the editor with double quotes.    <string name="ExperiencePermissionShort10">Control Camera</string>    <string name="ExperiencePermissionShort11">Teleport</string>    <string name="ExperiencePermissionShort12">Permission</string> -  <string name="ExperiencePermissionShortUnknown">Unknown: [Permission]</string> -   +    <!-- Conversation log messages -->    <string name="logging_calls_disabled_log_empty">      Conversations are not being logged. To begin keeping a log, choose "Save: Log only" or "Save: Log and transcripts" under Preferences > Chat. | 
