diff options
Diffstat (limited to 'indra')
24 files changed, 484 insertions, 243 deletions
| diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h index 8d98363c5f..cad3ca9d8d 100755 --- a/indra/llui/llfolderviewmodel.h +++ b/indra/llui/llfolderviewmodel.h @@ -190,6 +190,7 @@ public:  	virtual std::string::size_type getFilterStringSize() = 0;  	virtual S32	getLastFilterGeneration() const = 0; +	virtual S32 getMarkedDirtyGeneration() const = 0;  	virtual bool hasChildren() const = 0;  	virtual void addChild(LLFolderViewModelItem* child) = 0; @@ -230,6 +231,7 @@ public:  		mFolderViewItem(NULL),  		mLastFilterGeneration(-1),  		mLastFolderFilterGeneration(-1), +		mMarkedDirtyGeneration(-1),  		mMostFilteredDescendantGeneration(-1),  		mParent(NULL),  		mRootViewModel(root_view_model) @@ -243,8 +245,13 @@ public:  	S32	getLastFilterGeneration() const { return mLastFilterGeneration; }  	S32	getLastFolderFilterGeneration() const { return mLastFolderFilterGeneration; } +	S32	getMarkedDirtyGeneration() const { return mMarkedDirtyGeneration; }  	void dirtyFilter()  	{ +		if(mMarkedDirtyGeneration < 0) +		{ +			mMarkedDirtyGeneration = mLastFilterGeneration; +		}  		mLastFilterGeneration = -1;  		mLastFolderFilterGeneration = -1; @@ -303,6 +310,7 @@ public:  		mLastFilterGeneration = filter_generation;  		mStringMatchOffsetFilter = string_offset;  		mStringFilterSize = string_size; +		mMarkedDirtyGeneration = -1;  	}  	void setPassedFolderFilter(bool passed, S32 filter_generation) @@ -351,7 +359,8 @@ protected:  	S32							mLastFilterGeneration,  								mLastFolderFilterGeneration, -								mMostFilteredDescendantGeneration; +								mMostFilteredDescendantGeneration, +								mMarkedDirtyGeneration;  	child_list_t				mChildren;  	LLFolderViewModelItem*		mParent; diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp index 75773d7dfd..6750ee482a 100755 --- a/indra/llui/llkeywords.cpp +++ b/indra/llui/llkeywords.cpp @@ -505,7 +505,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW  			}  			// Skip white space -			while( *cur && isspace(*cur) && (*cur != '\n')  ) +			while( *cur && iswspace(*cur) && (*cur != '\n')  )  			{  				cur++;  			} @@ -548,7 +548,7 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW  		}  		// Skip white space -		while( *cur && isspace(*cur) && (*cur != '\n')  ) +		while( *cur && iswspace(*cur) && (*cur != '\n')  )  		{  			cur++;  		} @@ -655,10 +655,10 @@ void LLKeywords::findSegments(std::vector<LLTextSegmentPtr>* seg_list, const LLW  			// check against words  			llwchar prev = cur > base ? *(cur-1) : 0; -			if( !isalnum( prev ) && (prev != '_') ) +			if( !iswalnum( prev ) && (prev != '_') )  			{  				const llwchar* p = cur; -				while( isalnum( *p ) || (*p == '_') ) +				while( iswalnum( *p ) || (*p == '_') )  				{  					p++;  				} diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 29534a4382..e35cf011c7 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -4056,17 +4056,33 @@ public:  	bool handle(const LLSD& tokens, const LLSD& query_map,  				LLMediaCtrl* web)  	{ -		LLPointer<LLInventoryCategory> category = new LLInventoryCategory(query_map["folder_id"], -																		  LLUUID::null, -																		  LLFolderType::FT_CLOTHING, -																		  "Quick Appearance"); -		LLSD::UUID folder_uuid = query_map["folder_id"].asUUID(); -		if ( gInventory.getCategory( folder_uuid ) != NULL ) -		{ -			LLAppearanceMgr::getInstance()->wearInventoryCategory(category, true, false); +		LLSD::UUID folder_uuid; -			// *TODOw: This may not be necessary if initial outfit is chosen already -- josh -			gAgent.setOutfitChosen(TRUE); +		if (folder_uuid.isNull() && query_map.has("folder_name")) +		{ +			std::string outfit_folder_name = query_map["folder_name"]; +			folder_uuid = findDescendentCategoryIDByName( +				gInventory.getLibraryRootFolderID(), +				outfit_folder_name);	 +		} +		if (folder_uuid.isNull() && query_map.has("folder_id")) +		{ +			folder_uuid = query_map["folder_id"].asUUID(); +		} +		 +		if (folder_uuid.notNull()) +		{ +			LLPointer<LLInventoryCategory> category = new LLInventoryCategory(folder_uuid, +																			  LLUUID::null, +																			  LLFolderType::FT_CLOTHING, +																			  "Quick Appearance"); +			if ( gInventory.getCategory( folder_uuid ) != NULL ) +			{ +				LLAppearanceMgr::getInstance()->wearInventoryCategory(category, true, false); +				 +				// *TODOw: This may not be necessary if initial outfit is chosen already -- josh +				gAgent.setOutfitChosen(TRUE); +			}  		}  		// release avatar picker keyboard focus diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp index 5b151bdcda..f74164aea6 100755 --- a/indra/newview/lldrawpool.cpp +++ b/indra/newview/lldrawpool.cpp @@ -443,7 +443,7 @@ void LLRenderPass::pushMaskBatches(U32 type, U32 mask, BOOL texture, BOOL batch_  	}  } -void LLRenderPass::applyModelMatrix(LLDrawInfo& params) +void LLRenderPass::applyModelMatrix(const LLDrawInfo& params)  {  	if (params.mModelMatrix != gGLLastMatrix)  	{ diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h index 3bde0d29be..bc299cc89f 100755 --- a/indra/newview/lldrawpool.h +++ b/indra/newview/lldrawpool.h @@ -168,7 +168,7 @@ public:  	BOOL isDead() { return FALSE; }  	void resetDrawOrders() { } -	static void applyModelMatrix(LLDrawInfo& params); +	static void applyModelMatrix(const LLDrawInfo& params);  	virtual void pushBatches(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE);  	virtual void pushMaskBatches(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE);  	virtual void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures = FALSE); diff --git a/indra/newview/lldrawpoolmaterials.cpp b/indra/newview/lldrawpoolmaterials.cpp index 514411aef5..f92320490a 100644 --- a/indra/newview/lldrawpoolmaterials.cpp +++ b/indra/newview/lldrawpoolmaterials.cpp @@ -96,7 +96,7 @@ void LLDrawPoolMaterials::endDeferredPass(S32 pass)  void LLDrawPoolMaterials::renderDeferred(S32 pass)  { -	U32 type_list[] =  +	static const U32 type_list[] =   	{  		LLRenderPass::PASS_MATERIAL,  		//LLRenderPass::PASS_MATERIAL_ALPHA, diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp index f0c010b545..a4d13ce1d5 100755 --- a/indra/newview/llfloaterpay.cpp +++ b/indra/newview/llfloaterpay.cpp @@ -40,8 +40,10 @@  #include "lltextbox.h"  #include "lllineeditor.h"  #include "llmutelist.h" +#include "llnotificationsutil.h"  #include "llfloaterreporter.h"  #include "llslurl.h" +#include "llstatusbar.h"  #include "llviewerobject.h"  #include "llviewerobjectlist.h"  #include "llviewerregion.h" @@ -90,6 +92,9 @@ public:  	static void payDirectly(money_callback callback,  							const LLUUID& target_id,  							bool is_group); +	static bool payConfirmationCallback(const LLSD& notification, +										const LLSD& response, +										LLGiveMoneyInfo* info);  private:  	static void onCancel(void* data); @@ -111,14 +116,12 @@ protected:  	LLGiveMoneyInfo* mQuickPayInfo[MAX_PAY_BUTTONS];  	LLSafeHandle<LLObjectSelection> mObjectSelection; - -	static S32 sLastAmount;  }; -S32 LLFloaterPay::sLastAmount = 0;  const S32 MAX_AMOUNT_LENGTH = 10;  const S32 FASTPAY_BUTTON_WIDTH = 80; +const S32 PAY_AMOUNT_NOTIFICATION = 200;  LLFloaterPay::LLFloaterPay(const LLSD& key)  	: LLFloater(key), @@ -188,17 +191,9 @@ BOOL LLFloaterPay::postBuild()  	getChildView("amount text")->setVisible(FALSE);	 - -	std::string last_amount; -	if(sLastAmount > 0) -	{ -		last_amount = llformat("%d", sLastAmount); -	} -  	getChildView("amount")->setVisible(FALSE);  	getChild<LLLineEditor>("amount")->setKeystrokeCallback(&LLFloaterPay::onKeystroke, this); -	getChild<LLUICtrl>("amount")->setValue(last_amount);  	getChild<LLLineEditor>("amount")->setPrevalidate(LLTextValidate::validateNonNegativeS32);  	info = new LLGiveMoneyInfo(this, 0); @@ -207,7 +202,7 @@ BOOL LLFloaterPay::postBuild()  	childSetAction("pay btn",&LLFloaterPay::onGive,info);  	setDefaultBtn("pay btn");  	getChildView("pay btn")->setVisible(FALSE); -	getChildView("pay btn")->setEnabled((sLastAmount > 0)); +	getChildView("pay btn")->setEnabled(FALSE);  	childSetAction("cancel btn",&LLFloaterPay::onCancel,this); @@ -419,7 +414,24 @@ void LLFloaterPay::payDirectly(money_callback callback,  	floater->finishPayUI(target_id, is_group);  } -	 + +bool LLFloaterPay::payConfirmationCallback(const LLSD& notification, const LLSD& response, LLGiveMoneyInfo* info) +{ +	if (!info || !info->mFloater) +	{ +		return false; +	} + +	S32 option = LLNotificationsUtil::getSelectedOption(notification, response); +	if (option == 0) +	{ +		info->mFloater->give(info->mAmount); +		info->mFloater->closeFloater(); +	} + +	return false; +} +  void LLFloaterPay::finishPayUI(const LLUUID& target_id, BOOL is_group)  {  	std::string slurl; @@ -470,10 +482,40 @@ void LLFloaterPay::onKeystroke(LLLineEditor*, void* data)  void LLFloaterPay::onGive(void* data)  {  	LLGiveMoneyInfo* info = reinterpret_cast<LLGiveMoneyInfo*>(data); -	if(info && info->mFloater) +	LLFloaterPay* floater = info->mFloater; +	if(info && floater)  	{ -		info->mFloater->give(info->mAmount); -		info->mFloater->closeFloater(); +		S32 amount = info->mAmount; +		if(amount == 0) +		{ +			amount = atoi(floater->getChild<LLUICtrl>("amount")->getValue().asString().c_str()); +		} +		if (amount > PAY_AMOUNT_NOTIFICATION && gStatusBar && gStatusBar->getBalance() > amount) +		{ +			LLUUID payee_id; +			BOOL is_group; +			if (floater->mObjectSelection.notNull()) +			{ +				LLSelectNode* node = floater->mObjectSelection->getFirstRootNode(); +				node->mPermissions->getOwnership(payee_id, is_group); +			} +			else +			{ +				is_group = floater->mTargetIsGroup; +				payee_id = floater->mTargetUUID; +			} + +			LLSD args; +			args["TARGET"] = LLSLURL( is_group ? "group" : "agent", payee_id, "completename").getSLURLString(); +			args["AMOUNT"] = amount; + +			LLNotificationsUtil::add("PayConfirmation", args, LLSD(), boost::bind(&LLFloaterPay::payConfirmationCallback, _1, _2, info)); +		} +		else +		{ +			floater->give(amount); +			floater->closeFloater(); +		}  	}  } @@ -487,7 +529,6 @@ void LLFloaterPay::give(S32 amount)  		{  			amount = atoi(getChild<LLUICtrl>("amount")->getValue().asString().c_str());  		} -		sLastAmount = amount;  		// Try to pay an object.  		if (mObjectSelection.notNull()) diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp index 7615c12043..7bac47a317 100755 --- a/indra/newview/llfolderviewmodelinventory.cpp +++ b/indra/newview/llfolderviewmodelinventory.cpp @@ -144,6 +144,9 @@ void LLFolderViewModelItemInventory::setPassedFilter(bool passed, S32 filter_gen  	}  } + + +  bool LLFolderViewModelItemInventory::filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter )  {  	S32 filter_generation = filter.getCurrentGeneration(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 33e557cddd..d6f2803fc2 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -87,6 +87,8 @@ void copy_slurl_to_clipboard_callback_inv(const std::string& slurl);  typedef std::pair<LLUUID, LLUUID> two_uuids_t;  typedef std::list<two_uuids_t> two_uuids_list_t; +const F32 SOUND_GAIN = 1.0f; +  struct LLMoveInv  {  	LLUUID mObjectID; @@ -3779,24 +3781,21 @@ void LLFolderBridge::modifyOutfit(BOOL append)  	// checking amount of items to wear  	U32 max_items = gSavedSettings.getU32("WearFolderLimit"); -	if (cat->getDescendentCount() > max_items) -	{ -		LLInventoryModel::cat_array_t cats; -		LLInventoryModel::item_array_t items; -		LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); -		gInventory.collectDescendentsIf(cat->getUUID(), -			cats, -			items, -			LLInventoryModel::EXCLUDE_TRASH, -			not_worn); - -		if (items.size() > max_items) -		{ -			LLSD args; -			args["AMOUNT"] = llformat("%d", max_items); -			LLNotificationsUtil::add("TooManyWearables", args); -			return; -		} +	LLInventoryModel::cat_array_t cats; +	LLInventoryModel::item_array_t items; +	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); +	gInventory.collectDescendentsIf(cat->getUUID(), +		cats, +		items, +		LLInventoryModel::EXCLUDE_TRASH, +		not_worn); + +	if (items.size() > max_items) +	{ +		LLSD args; +		args["AMOUNT"] = llformat("%d", max_items); +		LLNotificationsUtil::add("TooManyWearables", args); +		return;  	}  	LLAppearanceMgr::instance().wearInventoryCategory( cat, FALSE, append ); @@ -4526,6 +4525,23 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	hide_context_entries(menu, items, disabled_items);  } +void LLSoundBridge::performAction(LLInventoryModel* model, std::string action) +{ +	if ("sound_play" == action) +	{ +		LLViewerInventoryItem* item = getItem(); +		if(item) +		{ +			send_sound_trigger(item->getAssetUUID(), SOUND_GAIN); +		} +	} +	else if ("open" == action) +	{ +		openSoundPreview((void*)this); +	} +	else LLItemBridge::performAction(model, action); +} +  // +=================================================+  // |        LLLandmarkBridge                         |  // +=================================================+ @@ -6138,7 +6154,7 @@ public:  		LLViewerInventoryItem* item = getItem();  		if (item)  		{ -			LLFloaterReg::showInstance("preview_sound", LLSD(mUUID), TAKE_FOCUS_YES); +			send_sound_trigger(item->getAssetUUID(), SOUND_GAIN);  		}  		LLInvFVBridgeAction::doIt();  	} diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 833fbbadbb..e8d5db4437 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -389,6 +389,7 @@ public:  		LLItemBridge(inventory, root, uuid) {}  	virtual void openItem();  	virtual void buildContextMenu(LLMenuGL& menu, U32 flags); +	virtual void performAction(LLInventoryModel* model, std::string action);  	static void openSoundPreview(void*);  }; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index e3be1312e4..02e05d3d9a 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -1848,6 +1848,8 @@ void LLPanelFace::onCancelNormalTexture(const LLSD& data)  	U8 bumpy = 0;  	bool identical_bumpy = false;  	LLSelectedTE::getBumpmap(bumpy, identical_bumpy); +	LLUUID spec_map_id = getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID(); +	bumpy = spec_map_id.isNull() ? bumpy : BUMPY_TEXTURE;  	sendBump(bumpy);  } diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index 6b74d90708..6354b5a02b 100755 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -698,6 +698,10 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)  	if(isItemRenameable())  	{  		items.push_back(std::string("Task Rename")); +		if ((flags & FIRST_SELECTED_ITEM) == 0) +		{ +			disabled_items.push_back(std::string("Task Rename")); +		}  	}  	if(isItemRemovable())  	{ diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index 8eea5ea73e..a41986373e 100755 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -663,12 +663,13 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)  	LLTextSegmentPtr segment = NULL;  	std::vector<LLTextSegmentPtr> selected_segments;  	mEditor->getSelectedSegments(selected_segments); - +	LLKeywordToken* token;  	// try segments in selection range first  	std::vector<LLTextSegmentPtr>::iterator segment_iter;  	for (segment_iter = selected_segments.begin(); segment_iter != selected_segments.end(); ++segment_iter)  	{ -		if((*segment_iter)->getToken() && (*segment_iter)->getToken()->getType() == LLKeywordToken::TT_WORD) +		token = (*segment_iter)->getToken(); +		if(token && isKeyword(token))  		{  			segment = *segment_iter;  			break; @@ -679,7 +680,8 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)  	if (!segment)  	{  		const LLTextSegmentPtr test_segment = mEditor->getPreviousSegment(); -		if(test_segment->getToken() && test_segment->getToken()->getType() == LLKeywordToken::TT_WORD) +		token = test_segment->getToken(); +		if(token && isKeyword(token))  		{  			segment = test_segment;  		} @@ -708,6 +710,24 @@ void LLScriptEdCore::updateDynamicHelp(BOOL immediate)  	}  } +bool LLScriptEdCore::isKeyword(LLKeywordToken* token) +{ +	switch(token->getType()) +	{ +		case LLKeywordToken::TT_CONSTANT: +		case LLKeywordToken::TT_CONTROL: +		case LLKeywordToken::TT_EVENT: +		case LLKeywordToken::TT_FUNCTION: +		case LLKeywordToken::TT_SECTION: +		case LLKeywordToken::TT_TYPE: +		case LLKeywordToken::TT_WORD: +			return true; + +		default: +			return false; +	} +} +  void LLScriptEdCore::setHelpPage(const std::string& help_string)  {  	LLFloater* help_floater = mLiveHelpHandle.get(); diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h index 515f277c4a..66727bceee 100755 --- a/indra/newview/llpreviewscript.h +++ b/indra/newview/llpreviewscript.h @@ -133,6 +133,7 @@ protected:  	void deleteBridges();  	void setHelpPage(const std::string& help_string);  	void updateDynamicHelp(BOOL immediate = FALSE); +	bool isKeyword(LLKeywordToken* token);  	void addHelpItemToHistory(const std::string& help_string);  	static void onErrorList(LLUICtrl*, void* user_data); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 0a8257f42b..5e342099d7 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -1632,7 +1632,7 @@ void pushVertsColorCoded(LLSpatialGroup* group, U32 mask)  {  	LLDrawInfo* params = NULL; -	LLColor4 colors[] = { +	static const LLColor4 colors[] = {  		LLColor4::green,  		LLColor4::green1,  		LLColor4::green2, diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index c12753acb0..a426669b5e 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -118,7 +118,7 @@ public:  	/*virtual*/ void	onClose(bool app_settings);  	// New functions -	void setImageID( const LLUUID& image_asset_id); +	void setImageID( const LLUUID& image_asset_id, bool set_selection = true);  	void updateImageStats();  	const LLUUID& getAssetID() { return mImageAssetID; }  	const LLUUID& findItemID(const LLUUID& asset_id, BOOL copyable_only); @@ -232,7 +232,7 @@ LLFloaterTexturePicker::~LLFloaterTexturePicker()  {  } -void LLFloaterTexturePicker::setImageID(const LLUUID& image_id) +void LLFloaterTexturePicker::setImageID(const LLUUID& image_id, bool set_selection /*=true*/)  {  	if( mImageAssetID != image_id && mActive)  	{ @@ -253,6 +253,10 @@ void LLFloaterTexturePicker::setImageID(const LLUUID& image_id)  				getChild<LLUICtrl>("apply_immediate_check")->setValue(FALSE);  				mNoCopyTextureSelected = TRUE;  			} +		} + +		if (set_selection) +		{  			mInventoryPanel->setSelection(item_id, TAKE_FOCUS_NO);  		}  	} @@ -461,7 +465,10 @@ BOOL LLFloaterTexturePicker::postBuild()  		// don't put keyboard focus on selected item, because the selection callback  		// will assume that this was user input -		mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO); +		if(!mImageAssetID.isNull()) +		{ +			mInventoryPanel->setSelection(findItemID(mImageAssetID, FALSE), TAKE_FOCUS_NO); +		}  	}  	mModeSelector = getChild<LLRadioGroup>("mode_selection"); @@ -820,7 +827,7 @@ void LLFloaterTexturePicker::onSelectionChange(const std::deque<LLFolderViewItem  			{  				mNoCopyTextureSelected = TRUE;  			} -			setImageID(itemp->getAssetUUID()); +			setImageID(itemp->getAssetUUID(),false);  			mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here?  			if (user_action && mCanPreview)  			{ diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 575e5c5c52..8561d265de 100755 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -2173,23 +2173,20 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(  	}  	U32 max_items = gSavedSettings.getU32("WearFolderLimit"); -	if (category->getDescendentCount()>max_items) -	{ -		LLInventoryModel::cat_array_t cats; -		LLInventoryModel::item_array_t items; -		LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); -		gInventory.collectDescendentsIf(category->getUUID(), -			cats, -			items, -			LLInventoryModel::EXCLUDE_TRASH, -			not_worn); -		if (items.size() > max_items) -		{ -			LLStringUtil::format_map_t args; -			args["AMOUNT"] = llformat("%d", max_items); -			mCustomMsg = LLTrans::getString("TooltipTooManyWearables",args); -			return ACCEPT_NO_CUSTOM; -		} +	LLInventoryModel::cat_array_t cats; +	LLInventoryModel::item_array_t items; +	LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false); +	gInventory.collectDescendentsIf(category->getUUID(), +		cats, +		items, +		LLInventoryModel::EXCLUDE_TRASH, +		not_worn); +	if (items.size() > max_items) +	{ +		LLStringUtil::format_map_t args; +		args["AMOUNT"] = llformat("%d", max_items); +		mCustomMsg = LLTrans::getString("TooltipTooManyWearables",args); +		return ACCEPT_NO_CUSTOM;  	}  	if(mSource == SOURCE_AGENT) diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index b0f4802e20..a4a05587d3 100755 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -88,18 +88,25 @@ void agent_push_down( EKeystate s )  	gAgent.moveUp(-1);  } +static void agent_check_temporary_run(LLAgent::EDoubleTapRunMode mode) +{ +	if (gAgent.mDoubleTapRunMode == mode && +		gAgent.getRunning() && +		!gAgent.getAlwaysRun()) +	{ +		// Turn off temporary running. +		gAgent.clearRunning(); +		gAgent.sendWalkRun(gAgent.getRunning()); +	} +} +  static void agent_handle_doubletap_run(EKeystate s, LLAgent::EDoubleTapRunMode mode)  {  	if (KEYSTATE_UP == s)  	{ -		if (gAgent.mDoubleTapRunMode == mode && -		    gAgent.getRunning() && -		    !gAgent.getAlwaysRun()) -		{ -			// Turn off temporary running. -			gAgent.clearRunning(); -			gAgent.sendWalkRun(gAgent.getRunning()); -		} +		// Note: in case shift is already released, slide left/right run +		// will be released in agent_turn_left()/agent_turn_right() +		agent_check_temporary_run(mode);  	}  	else if (gSavedSettings.getBOOL("AllowTapTapHoldRun") &&  		 KEYSTATE_DOWN == s && @@ -218,7 +225,12 @@ void agent_turn_left( EKeystate s )  	}  	else  	{ -		if (KEYSTATE_UP == s) return; +		if (KEYSTATE_UP == s) +		{ +			// Check temporary running. In case user released 'left' key with shift already released. +			agent_check_temporary_run(LLAgent::DOUBLETAP_SLIDELEFT); +			return; +		}  		F32 time = gKeyboard->getCurKeyElapsedTime();  		gAgent.moveYaw( LLFloaterMove::getYawRate( time ) );  	} @@ -241,7 +253,12 @@ void agent_turn_right( EKeystate s )  	}  	else  	{ -		if (KEYSTATE_UP == s) return; +		if (KEYSTATE_UP == s) +		{ +			// Check temporary running. In case user released 'right' key with shift already released. +			agent_check_temporary_run(LLAgent::DOUBLETAP_SLIDERIGHT); +			return; +		}  		F32 time = gKeyboard->getCurKeyElapsedTime();  		gAgent.moveYaw( -LLFloaterMove::getYawRate( time ) );  	} diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index a83e2e020e..4295ea02d5 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2040,7 +2040,18 @@ S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)  S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)  { -	S32 res = LLViewerObject::setTEMaterialParams(te, pMaterialParams); +	S32 res = 0; +	 +	if (pMaterialParams && getTEImage(te) && 3 == getTEImage(te)->getComponents() && pMaterialParams->getDiffuseAlphaMode())  +	{ +		LLViewerObject::setTEMaterialID(te, LLMaterialID::null); +		res = LLViewerObject::setTEMaterialParams(te, NULL); +	} +	else  +	{ +		res = LLViewerObject::setTEMaterialParams(te, pMaterialParams); +	} +  	LL_DEBUGS("MaterialTEs") << "te " << (S32)te << " material " << ((pMaterialParams) ? pMaterialParams->asLLSD() : LLSD("null")) << " res " << res  							 << ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" )  							 << LL_ENDL; @@ -4328,7 +4339,7 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,  		draw_info->mBump  = bump;  		draw_info->mShiny = shiny; -		float alpha[4] = +		static const float alpha[4] =  		{  			0.00f,  			0.25f, @@ -5652,7 +5663,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFac  				if (material_pass)  				{ -					U32 pass[] =  +					static const U32 pass[] =   					{  						LLRenderPass::PASS_MATERIAL,  						LLRenderPass::PASS_ALPHA, //LLRenderPass::PASS_MATERIAL_ALPHA, diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml index 259acccb68..3dfdf8e1a5 100755 --- a/indra/newview/skins/default/xui/en/floater_joystick.xml +++ b/indra/newview/skins/default/xui/en/floater_joystick.xml @@ -4,7 +4,7 @@   height="500"   layout="topleft"   name="Joystick" - help_topic="joystick" + help_topic="Viewerhelp:Joystick_Configuration"   title="JOYSTICK CONFIGURATION"   width="569">      <floater.string diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml index 41a7134b1d..9d91f801a6 100755 --- a/indra/newview/skins/default/xui/en/floater_pay.xml +++ b/indra/newview/skins/default/xui/en/floater_pay.xml @@ -2,12 +2,12 @@  <floater   legacy_header_height="18"   can_minimize="false" - height="200" + height="186"   layout="topleft"   name="Give Money"   help_topic="give_money"   save_rect="true" - width="250"> + width="261">     <string      name="payee_group">          Pay Group @@ -21,88 +21,129 @@       type="string"       length="1"       follows="left|top" -     font="SansSerifSmall"       height="16"       layout="topleft"       left="10" -     name="payee_name" -     top="25"  -     use_ellipses="true" -     width="230"> -        Test Name That Is Extremely Long To Check Clipping +     top="24" +     name="paying_text" +     width="180"> +     You are paying:      </text> -    <button -     height="23" -     label="L$1" -     label_selected="L$1" -     layout="topleft" -     left="35" -     name="fastpay 1" -     top_pad="8" -     width="80" /> -    <button -     height="23" -     label="L$5" -     label_selected="L$5" -     layout="topleft" -     left_pad="15" -     name="fastpay 5" -     width="80" /> -    <button -     height="23" -     label="L$10" -     label_selected="L$10" -     layout="topleft" -     left="35" -     name="fastpay 10" -     top_pad="8" -     width="80" /> -    <button -     height="23" -     label="L$20" -     label_selected="L$20" -     layout="topleft" -     left_pad="15" -     name="fastpay 20" -     width="80" />      <text       type="string"       length="1"       follows="left|top" -     height="18" +     font="SansSerifSmall" +     height="16"       layout="topleft" -     left="35" -     name="amount text" -     top_pad="8" +     left="10" +     top_pad="5" +     name="payee_name" +     use_ellipses="true"       width="180"> -        Or, choose amount: +        Test Name That Is Extremely Long To Check Clipping      </text> -    <line_editor -     border_style="line" -     follows="left|top|right" -     height="19" -     top_pad="0" -     layout="topleft" -     left="130" -     max_length_bytes="9" -     name="amount" -     width="80" /> -    <button -     enabled="false" -     height="23" -     label="Pay" -     label_selected="Pay" -     layout="topleft" -     left="20" -     name="pay btn" -     top_pad="15" -     width="100" /> -    <button -     height="23" -     label="Cancel" -     label_selected="Cancel" +    <panel +     border_thickness="0" +     height="104" +     label="Search"       layout="topleft" +     left="0" +     top_pad="10" +     help_topic="avatarpicker" +     name="PatternsPanel" +     width="120"> +      <button +       height="23" +       label="Pay L$ 1" +       label_selected="Pay L$ 1" +       layout="topleft" +       left="10" +       top="0" +       name="fastpay 1" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 5" +       label_selected="Pay L$ 5" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 5" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 10" +       label_selected="Pay L$ 10" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 10" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 20" +       label_selected="Pay L$ 20" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 20" +       width="110" /> +    </panel> +    <view_border +     bevel_style="in" +     width="1" +     height="104"       left_pad="10" -     name="cancel btn" -     width="100" /> +     layout="topleft" /> +    <panel +     border_thickness="0" +     height="104" +     label="Search" +     layout="topleft" +     left_pad="0" +     name="InputPanel" +     width="120"> +      <text +       type="string" +       length="1" +       follows="left|top" +       height="18" +       layout="topleft" +       left="10" +       top="0" +       name="amount text" +       width="110"> +        Other amount: +      </text> +      <line_editor +       border_style="line" +       follows="left|top|right" +       height="19" +       layout="topleft" +       left="10" +       top_pad="0" +       max_length_bytes="9" +       name="amount" +       width="90" /> +      <button +       enabled="false" +       height="23" +       label="Pay" +       label_selected="Pay" +       layout="topleft" +       left="10" +       top_pad="17" +       name="pay btn" +       width="110" /> +      <button +       height="23" +       label="Cancel" +       label_selected="Cancel" +       layout="topleft" +       left="10" +       top_pad="4" +       name="cancel btn" +       width="110" /> +    </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml index d3a35c2051..f1e27b918e 100755 --- a/indra/newview/skins/default/xui/en/floater_pay_object.xml +++ b/indra/newview/skins/default/xui/en/floater_pay_object.xml @@ -2,12 +2,12 @@  <floater   legacy_header_height="18"   can_minimize="false" - height="225" + height="228"   layout="topleft"   name="Give Money"   help_topic="give_money"   save_rect="true" - width="250"> + width="261">      <string       name="payee_group">          Pay Group @@ -16,12 +16,25 @@       name="payee_resident">          Pay Resident      </string> +      <text +     type="string" +     length="1"       follows="left|top"       height="16"       layout="topleft"       left="10" -     top_pad="24" +     top="24" +     name="paying_text" +     width="180"> +      You are paying: +    </text> +    <text +     follows="left|top" +     height="16" +     layout="topleft" +     left="10" +     top_pad="5"       name="payee_name"       use_ellipses="true"        width="225"> @@ -40,7 +53,7 @@       width="180">          Via object:      </text> -   <icon +    <icon       height="16"       width="16"       image_name="Inv_Object" @@ -64,78 +77,107 @@       width="188">          My awesome object with a really damn long name      </text> -   <button -     height="23" -     label="L$1" -     label_selected="L$1" -     layout="topleft" -     left="25" -     name="fastpay 1" -     top_pad="8" -     width="80" /> -    <button -     height="23" -     label="L$5" -     label_selected="L$5" -     layout="topleft" -     left_pad="15" -     name="fastpay 5" -     width="80" /> -    <button -     height="23" -     label="L$10" -     label_selected="L$10" -     layout="topleft" -     left="25" -     name="fastpay 10" -     top_pad="8" -     width="80" /> -    <button -     height="23" -     label="L$20" -     label_selected="L$20" +    <panel +     border_thickness="0" +     height="104" +     label="Search"       layout="topleft" -     left_pad="15" -     name="fastpay 20" -     width="80" /> -    <text -     type="string" -     length="1" -     follows="left|top" -     height="14" -     layout="topleft" -     left="25" -     name="amount text" -     top_pad="8" -     width="180"> -        Or, choose amount: -    </text> -    <line_editor -     border_style="line" -     follows="left|top|right" -     height="21" -     top_pad="0" -     layout="topleft" -     left="120" -     max_length_bytes="9" -     name="amount" -     width="80" /> -    <button -     enabled="false" -     height="23" -     label="Pay" -     label_selected="Pay" -     layout="topleft" -     left="10" -     name="pay btn" -     top_pad="5" -     width="100" /> -    <button -     height="23" -     label="Cancel" -     label_selected="Cancel" +     left="0" +     top_pad="10" +     help_topic="avatarpicker" +     name="PatternsPanel" +     width="120"> +      <button +       height="23" +       label="Pay L$ 1" +       label_selected="Pay L$ 1" +       layout="topleft" +       left="10" +       top="0" +       name="fastpay 1" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 5" +       label_selected="Pay L$ 5" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 5" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 10" +       label_selected="Pay L$ 10" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 10" +       width="110" /> +      <button +       height="23" +       label="Pay L$ 20" +       label_selected="Pay L$ 20" +       layout="topleft" +       left="10" +       top_pad="4" +       name="fastpay 20" +       width="110" /> +    </panel> +    <view_border +     bevel_style="in" +     width="1" +     height="104" +     left_pad="10" +     layout="topleft" /> +    <panel +     border_thickness="0" +     height="104" +     label="Search"       layout="topleft" -     left_pad="5" -     name="cancel btn" -     width="100" /> +     left_pad="0" +     name="InputPanel" +     width="120"> +      <text +       type="string" +       length="1" +       follows="left|top" +       height="18" +       layout="topleft" +       left="10" +       top="0" +       name="amount text" +       width="180"> +        Other amount: +      </text> +      <line_editor +       border_style="line" +       follows="left|top|right" +       height="19" +       layout="topleft" +       left="10" +       top_pad="0" +       max_length_bytes="9" +       name="amount" +       width="90" /> +      <button +       enabled="false" +       height="23" +       label="Pay" +       label_selected="Pay" +       layout="topleft" +       left="10" +       top_pad="17" +       name="pay btn" +       width="110" /> +      <button +       height="23" +       label="Cancel" +       label_selected="Cancel" +       layout="topleft" +       left="10" +       top_pad="4" +       name="cancel btn" +       width="110" /> +    </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 6fa45d7d66..7099db63ab 100755 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -531,7 +531,7 @@       name="Sound Play">          <menu_item_call.on_click           function="Inventory.DoToSelected" -         parameter="open" /> +         parameter="sound_play" />      </menu_item_call>      <menu_item_separator       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index aa7a07671c..944f600ef7 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5225,6 +5225,19 @@ Warning: The 'Pay object' click action has been set, but it will only    <notification     icon="alertmodal.tga" +   name="PayConfirmation" +   type="alertmodal"> +    Confirm that you want to pay L$[AMOUNT] to [TARGET]. +    <tag>confirm</tag> +    <usetemplate +     ignoretext="Confirm before paying" +     name="okcancelignore" +     notext="Cancel" +     yestext="Pay"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="OpenObjectCannotCopy"     type="alertmodal">  There are no items in this object that you are allowed to copy. | 
