diff options
Diffstat (limited to 'indra')
36 files changed, 267 insertions, 72 deletions
| diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp index f841901801..82b01e705d 100755 --- a/indra/llui/lliconctrl.cpp +++ b/indra/llui/lliconctrl.cpp @@ -83,7 +83,12 @@ void LLIconCtrl::draw()  // virtual  // value might be a string or a UUID -void LLIconCtrl::setValue(const LLSD& value ) +void LLIconCtrl::setValue(const LLSD& value) +{ +    setValue(value, mPriority); +} + +void LLIconCtrl::setValue(const LLSD& value, S32 priority)  {  	LLSD tvalue(value);  	if (value.isString() && LLUUID::validate(value.asString())) @@ -94,11 +99,11 @@ void LLIconCtrl::setValue(const LLSD& value )  	LLUICtrl::setValue(tvalue);  	if (tvalue.isUUID())  	{ -		mImagep = LLUI::getUIImageByID(tvalue.asUUID(), mPriority); +        mImagep = LLUI::getUIImageByID(tvalue.asUUID(), priority);  	}  	else  	{ -		mImagep = LLUI::getUIImage(tvalue.asString(), mPriority); +        mImagep = LLUI::getUIImage(tvalue.asString(), priority);  	}  	if(mImagep.notNull()  diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h index 7971cd44d3..dd83e78fd3 100755 --- a/indra/llui/lliconctrl.h +++ b/indra/llui/lliconctrl.h @@ -59,6 +59,8 @@ protected:  	LLIconCtrl(const Params&);  	friend class LLUICtrlFactory; +	void setValue(const LLSD& value, S32 priority); +  public:  	virtual ~LLIconCtrl(); diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 926326aaff..3c86b539c4 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1716,7 +1716,20 @@ void LLTextEditor::unindentLineBeforeCloseBrace()  		LLWString text = getWText();  		if( ' ' == text[ mCursorPos - 1 ] )  		{ -			removeCharOrTab(); +			S32 line = getLineNumFromDocIndex(mCursorPos, false); +			S32 line_start = getLineStart(line); + +			// Jump over spaces in the current line +			while ((' ' == text[line_start]) && (line_start < mCursorPos)) +			{ +				line_start++; +			} + +			// Make sure there is nothing but ' ' before the Brace we are unindenting +			if (line_start == mCursorPos) +			{ +				removeCharOrTab(); +			}  		}  	}  } @@ -1800,7 +1813,7 @@ BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char)  	// Handle most keys only if the text editor is writeable.  	if( !mReadOnly )  	{ -		if( '}' == uni_char ) +		if( mAutoIndent && '}' == uni_char )  		{  			unindentLineBeforeCloseBrace();  		} diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm index f3b8dac844..ca502e0659 100644 --- a/indra/llwindow/llopenglview-objc.mm +++ b/indra/llwindow/llopenglview-objc.mm @@ -391,7 +391,7 @@ attributedStringInfo getSegments(NSAttributedString *str)  	NSPoint mPoint = [theEvent locationInWindow];  	mMousePos[0] = mPoint.x;  	mMousePos[1] = mPoint.y; -	callMouseMoved(mMousePos, 0); +	callMouseDragged(mMousePos, 0);  }  - (void) otherMouseDown:(NSEvent *)theEvent diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp index eadff8a6b4..d2afb3f91b 100755 --- a/indra/llwindow/llwindowcallbacks.cpp +++ b/indra/llwindow/llwindowcallbacks.cpp @@ -112,6 +112,10 @@ void LLWindowCallbacks::handleMouseMove(LLWindow *window, const LLCoordGL pos, M  {  } +void LLWindowCallbacks::handleMouseDragged(LLWindow *window, const LLCoordGL pos, MASK mask) +{ +} +  void LLWindowCallbacks::handleScrollWheel(LLWindow *window, S32 clicks)  {  } diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h index 7da5959700..6a7137e593 100755 --- a/indra/llwindow/llwindowcallbacks.h +++ b/indra/llwindow/llwindowcallbacks.h @@ -52,6 +52,7 @@ public:  	virtual BOOL handleActivate(LLWindow *window, BOOL activated);  	virtual BOOL handleActivateApp(LLWindow *window, BOOL activating);  	virtual void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask); +    virtual void handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask);  	virtual void handleScrollWheel(LLWindow *window,  S32 clicks);  	virtual void handleResize(LLWindow *window,  S32 width,  S32 height);  	virtual void handleFocus(LLWindow *window); diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index dc184b91fb..507d1239be 100755 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -92,6 +92,7 @@ void setCrossCursor();  void setNotAllowedCursor();  void hideNSCursor();  void showNSCursor(); +bool isCGCursorVisible();  void hideNSCursorTillMove(bool hide);  void requestUserAttention();  long showAlert(std::string title, std::string text, int type); @@ -133,6 +134,7 @@ void callLeftMouseUp(float *pos, unsigned int mask);  void callDoubleClick(float *pos, unsigned int mask);  void callResize(unsigned int width, unsigned int height);  void callMouseMoved(float *pos, unsigned int mask); +void callMouseDragged(float *pos, unsigned int mask);  void callScrollMoved(float delta);  void callMouseExit();  void callWindowFocus(); diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 1a21bf8430..43ce9a2255 100755 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -163,6 +163,11 @@ void showNSCursor()  	[NSCursor unhide];  } +bool isCGCursorVisible() +{ +    return CGCursorIsVisible(); +} +  void hideNSCursorTillMove(bool hide)  {  	[NSCursor setHiddenUntilMouseMoves:hide]; diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index 0d41884462..c6bf93507a 100755 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -343,6 +343,18 @@ void callMouseMoved(float *pos, MASK mask)  	//gWindowImplementation->getCallbacks()->handleScrollWheel(gWindowImplementation, 0);  } +void callMouseDragged(float *pos, MASK mask) +{ +    LLCoordGL		outCoords; +    outCoords.mX = ll_round(pos[0]); +    outCoords.mY = ll_round(pos[1]); +    float deltas[2]; +    gWindowImplementation->getMouseDeltas(deltas); +    outCoords.mX += deltas[0]; +    outCoords.mY += deltas[1]; +    gWindowImplementation->getCallbacks()->handleMouseDragged(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE)); +} +  void callScrollMoved(float delta)  {  	gWindowImplementation->getCallbacks()->handleScrollWheel(gWindowImplementation, delta); @@ -1445,8 +1457,16 @@ void LLWindowMacOSX::updateCursor()  		mNextCursor = UI_CURSOR_WORKING;  	} -	if(mCurrentCursor == mNextCursor) -		return; +    if(mCurrentCursor == mNextCursor) +    { +        if(mCursorHidden && isCGCursorVisible()) +        { +            hideNSCursor(); +            mHideCursorPermanent = TRUE; +            adjustCursorDecouple(); +        } +        return; +    }  	// RN: replace multi-drag cursors with single versions  	if (mNextCursor == UI_CURSOR_ARROWDRAGMULTI) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 5b8937429e..61b3b56d84 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4856,6 +4856,17 @@        <key>Value</key>        <integer>7</integer>      </map> +    <key>InventoryTrashMaxCapacity</key> +    <map> +        <key>Comment</key> +        <string>Maximum capacity of the Trash folder. User will ve offered to clean it up when exceeded.</string> +        <key>Persist</key> +        <integer>1</integer> +        <key>Type</key> +        <string>U32</string> +        <key>Value</key> +        <integer>5000</integer> +    </map>      <key>MarketplaceListingsSortOrder</key>      <map>        <key>Comment</key> @@ -7004,6 +7015,28 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>NotifyMoneySpend</key> +    <map> +      <key>Comment</key> +      <string>Pop up notifications when spending L$</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map> +    <key>NotifyMoneyReceived</key> +    <map> +      <key>Comment</key> +      <string>Pop up notifications when receiving L$</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>NotifyTipDuration</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 932326acae..c131dc641b 100755 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -196,7 +196,7 @@ LLAvatarIconCtrl::LLAvatarIconCtrl(const LLAvatarIconCtrl::Params& p)  	}  	else  	{ -		LLIconCtrl::setValue(mDefaultIconName); +		LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);  	}  } @@ -243,7 +243,7 @@ void LLAvatarIconCtrl::setValue(const LLSD& value)  				// *TODO: Consider getting avatar icon/badge directly from   				// People API, rather than sending AvatarPropertyRequest  				// messages.  People API already hits the user table. -				LLIconCtrl::setValue(mDefaultIconName); +				LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);  				app->addObserver(mAvatarId, this);  				app->sendAvatarPropertiesRequest(mAvatarId);  			} @@ -284,7 +284,7 @@ bool LLAvatarIconCtrl::updateFromCache()  	}  	else  	{ -		LLIconCtrl::setValue(mDefaultIconName); +		LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);          return false;  	} diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 4dbed114bb..f0331f20d8 100755 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -122,8 +122,6 @@ LLExpandableTextBox::LLTextBoxEx::LLTextBoxEx(const Params& p)  void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL called_from_parent)  {  	LLTextEditor::reshape(width, height, called_from_parent); - -	hideOrShowExpandTextAsNeeded();  }  void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params) @@ -298,6 +296,12 @@ void LLExpandableTextBox::updateTextBoxRect()  	mTextBox->reshape(rc.getWidth(), rc.getHeight());  	mTextBox->setRect(rc); +	// *HACK +	// hideExpandText brakes text styles (replaces hyper-links with plain text), see ticket EXT-3290 +	// Also text segments are not removed properly. Same issue at expandTextBox(). +	// So set text again to make text box re-apply styles and clear segments. +	// *TODO Find a solution that does not involve text segment. +	mTextBox->setText(mText);  }  S32 LLExpandableTextBox::recalculateTextDelta(S32 text_delta) @@ -403,8 +407,6 @@ void LLExpandableTextBox::collapseTextBox()  	setRect(mCollapsedRect);  	updateTextBoxRect(); - -	gViewerWindow->removePopup(this);  }  void LLExpandableTextBox::onFocusLost() @@ -423,13 +425,19 @@ void LLExpandableTextBox::onTopLost()  void LLExpandableTextBox::updateTextShape()  { -	// I guess this should be done on every reshape(), -	// but adding this code to reshape() currently triggers bug VWR-26455, -	// which makes the text virtually unreadable.  	llassert(!mExpanded);  	updateTextBoxRect();  } +void LLExpandableTextBox::reshape(S32 width, S32 height, BOOL called_from_parent) +{ +    mExpanded = false; +    LLUICtrl::reshape(width, height, called_from_parent); +    updateTextBoxRect(); + +    gViewerWindow->removePopup(this); +} +  void LLExpandableTextBox::setValue(const LLSD& value)  {  	collapseTextBox(); diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index 90d46ab262..aaf393277f 100755 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -147,6 +147,7 @@ public:  	 * *HACK: Update the inner textbox shape.  	 */  	void updateTextShape(); +	virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);  	/**  	 * Draws text box, collapses text box if its expanded and its parent's position changed diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp index 1974a073dd..271dd44c1f 100755 --- a/indra/newview/llgroupiconctrl.cpp +++ b/indra/newview/llgroupiconctrl.cpp @@ -64,7 +64,8 @@ LLGroupIconCtrl::LLGroupIconCtrl(const LLGroupIconCtrl::Params& p)  	}  	else  	{ -		LLIconCtrl::setValue(mDefaultIconName); +		//TODO: Consider implementing dedicated setDefault() function instead of passing priority for local file +		LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);  	}  } @@ -73,6 +74,11 @@ LLGroupIconCtrl::~LLGroupIconCtrl()  	LLGroupMgr::getInstance()->removeObserver(this);  } +void LLGroupIconCtrl::setIconId(const LLSD& value) +{ +    LLIconCtrl::setValue(value); +} +  void LLGroupIconCtrl::setValue(const LLSD& value)  {  	if (value.isUUID()) @@ -91,7 +97,7 @@ void LLGroupIconCtrl::setValue(const LLSD& value)  			// Check if cache already contains image_id for that group  			if (!updateFromCache())  			{ -				LLIconCtrl::setValue(mDefaultIconName); +				LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);  				gm->addObserver(this);  				gm->sendGroupPropertiesRequest(mGroupId);  			} @@ -122,7 +128,7 @@ bool LLGroupIconCtrl::updateFromCache()  	}  	else  	{ -		LLIconCtrl::setValue(mDefaultIconName); +		LLIconCtrl::setValue(mDefaultIconName, LLViewerFetchedTexture::BOOST_UI);  	}  	if (mDrawTooltip && !group_data->mName.empty()) diff --git a/indra/newview/llgroupiconctrl.h b/indra/newview/llgroupiconctrl.h index f42593c9e1..f8b22cf581 100755 --- a/indra/newview/llgroupiconctrl.h +++ b/indra/newview/llgroupiconctrl.h @@ -66,6 +66,8 @@ public:  	 */  	virtual void setValue(const LLSD& value); +	void setIconId(const LLSD& value); +  	// LLGroupMgrObserver observer trigger  	virtual void changed(LLGroupChange gc); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index ef238cefe3..6126db2988 100755 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -30,7 +30,7 @@  // libs  #include "llbutton.h" -#include "lliconctrl.h" +#include "llgroupiconctrl.h"  #include "llmenugl.h"  #include "lltextbox.h"  #include "lltextutil.h" @@ -319,7 +319,7 @@ LLGroupListItem::~LLGroupListItem()  //virtual  BOOL  LLGroupListItem::postBuild()  { -	mGroupIcon = getChild<LLIconCtrl>("group_icon"); +	mGroupIcon = getChild<LLGroupIconCtrl>("group_icon");  	mGroupNameBox = getChild<LLTextBox>("group_name");  	mInfoBtn = getChild<LLButton>("info_btn"); @@ -381,7 +381,7 @@ void LLGroupListItem::setGroupIconID(const LLUUID& group_icon_id)  {  	if (group_icon_id.notNull())  	{ -		mGroupIcon->setValue(group_icon_id); +		mGroupIcon->setIconId(group_icon_id);  	}  } diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h index e96a720886..171b77fb00 100755 --- a/indra/newview/llgrouplist.h +++ b/indra/newview/llgrouplist.h @@ -83,7 +83,7 @@ private:  };  class LLButton; -class LLIconCtrl; +class LLGroupIconCtrl;  class LLTextBox;  class LLGroupListItem : public LLPanel @@ -113,7 +113,7 @@ private:  	LLTextBox*	mGroupNameBox;  	LLUUID		mGroupID; -	LLIconCtrl* mGroupIcon; +	LLGroupIconCtrl* mGroupIcon;  	LLButton*	mInfoBtn;  	std::string	mGroupName; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 1782653439..26c9b40fb1 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1958,6 +1958,7 @@ BOOL LLItemBridge::removeItem()  	}  	LLNotifications::instance().forceResponse(params, 0); +	model->checkTrashOverflow();  	return TRUE;  } diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 494b8808e3..908f7125df 100755 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -759,6 +759,22 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id,  	}  } +U32 LLInventoryModel::getDescendentsCountRecursive(const LLUUID& id, U32 max_item_limit) +{ +	LLInventoryModel::cat_array_t cats; +	LLInventoryModel::item_array_t items; +	gInventory.collectDescendents(id, cats, items, LLInventoryModel::INCLUDE_TRASH); + +	U32 items_found = items.size() + cats.size(); + +	for (U32 i = 0; i < cats.size() && items_found <= max_item_limit; ++i) +	{ +		items_found += getDescendentsCountRecursive(cats[i]->getUUID(), max_item_limit - items_found); +	} + +	return items_found; +} +  void LLInventoryModel::addChangedMaskForLinks(const LLUUID& object_id, U32 mask)  {  	const LLInventoryObject *obj = getObject(object_id); @@ -3320,6 +3336,7 @@ void LLInventoryModel::processMoveInventoryItem(LLMessageSystem* msg, void**)  //----------------------------------------------------------------------------  // Trash: LLFolderType::FT_TRASH, "ConfirmEmptyTrash" +// Trash: LLFolderType::FT_TRASH, "TrashIsFull" when trash exceeds maximum capacity  // Lost&Found: LLFolderType::FT_LOST_AND_FOUND, "ConfirmEmptyLostAndFound"  bool LLInventoryModel::callbackEmptyFolderType(const LLSD& notification, const LLSD& response, LLFolderType::EType preferred_type) @@ -3401,6 +3418,8 @@ void LLInventoryModel::removeCategory(const LLUUID& category_id)  			changeCategoryParent(cat, trash_id, TRUE);  		}  	} + +	checkTrashOverflow();  }  void LLInventoryModel::removeObject(const LLUUID& object_id) @@ -3431,6 +3450,16 @@ void LLInventoryModel::removeObject(const LLUUID& object_id)  	}  } +void  LLInventoryModel::checkTrashOverflow() +{ +	static const U32 trash_max_capacity = gSavedSettings.getU32("InventoryTrashMaxCapacity"); +	const LLUUID trash_id = findCategoryUUIDForType(LLFolderType::FT_TRASH); +	if (getDescendentsCountRecursive(trash_id, trash_max_capacity) >= trash_max_capacity) +	{ +		gInventory.emptyFolderType("TrashIsFull", LLFolderType::FT_TRASH); +	} +} +  const LLUUID &LLInventoryModel::getRootFolderID() const  {  	return mRootFolderID; diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h index e1e6db19eb..86c6df3323 100755 --- a/indra/newview/llinventorymodel.h +++ b/indra/newview/llinventorymodel.h @@ -262,6 +262,9 @@ public:  	// Follow parent chain to the top.  	bool getObjectTopmostAncestor(const LLUUID& object_id, LLUUID& result) const; + +private: +	U32 getDescendentsCountRecursive(const LLUUID& id, U32 max_item_limit);  	//--------------------------------------------------------------------  	// Find @@ -403,6 +406,8 @@ public:  	/// removeItem() or removeCategory(), whichever is appropriate  	void removeObject(const LLUUID& object_id); +	void checkTrashOverflow(); +  protected:  	void updateLinkedObjectsFromPurge(const LLUUID& baseobj_id); diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp index 366b9ac034..aa934f95a1 100755 --- a/indra/newview/lllocalbitmaps.cpp +++ b/indra/newview/lllocalbitmaps.cpp @@ -135,7 +135,7 @@ LLLocalBitmap::~LLLocalBitmap()  	}  	// delete self from gimagelist -	LLViewerFetchedTexture* image = gTextureList.findImage(mWorldID, TEX_LIST_DISCARD); +	LLViewerFetchedTexture* image = gTextureList.findImage(mWorldID, TEX_LIST_STANDARD);  	gTextureList.deleteImage(image);  	if (image) @@ -207,7 +207,7 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)  					texture->setCachedRawImage(LL_LOCAL_DISCARD_LEVEL, raw_image);  					texture->ref();  -					gTextureList.addImage(texture, TEX_LIST_DISCARD); +					gTextureList.addImage(texture, TEX_LIST_STANDARD);  					if (optional_firstupdate != UT_FIRSTUSE)  					{ @@ -215,7 +215,7 @@ bool LLLocalBitmap::updateSelf(EUpdateType optional_firstupdate)  						replaceIDs(old_id, mWorldID);  						// remove old_id from gimagelist -						LLViewerFetchedTexture* image = gTextureList.findImage(old_id, TEX_LIST_DISCARD); +						LLViewerFetchedTexture* image = gTextureList.findImage(old_id, TEX_LIST_STANDARD);  						if (image != NULL)  						{  							gTextureList.deleteImage(image); @@ -384,7 +384,7 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)  std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id, U32 channel)  {  	std::vector<LLViewerObject*> obj_list; -	LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id, TEX_LIST_DISCARD); +	LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id, TEX_LIST_STANDARD);  	for(U32 face_iterator = 0; face_iterator < old_texture->getNumFaces(channel); face_iterator++)  	{ @@ -502,7 +502,7 @@ void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id, U32 channel)  void LLLocalBitmap::updateUserSculpts(LLUUID old_id, LLUUID new_id)  { -	LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id, TEX_LIST_DISCARD); +	LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id, TEX_LIST_STANDARD);  	for(U32 volume_iter = 0; volume_iter < old_texture->getNumVolumes(); volume_iter++)  	{  		LLVOVolume* volume_to_object = (*old_texture->getVolumeList())[volume_iter]; diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp index 551495c6ad..ec2d37c30d 100755 --- a/indra/newview/llpanelface.cpp +++ b/indra/newview/llpanelface.cpp @@ -2214,7 +2214,7 @@ void LLPanelFace::LLSelectedTE::getTexId(LLUUID& id, bool& identical)  				LLTextureEntry *te = object->getTE(te_index);  				if (te)  				{ -					LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID(), TEX_LIST_DISCARD) : NULL; +					LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID(), TEX_LIST_STANDARD) : NULL;  					if(!tex)  					{  						tex = LLViewerFetchedTexture::sDefaultImagep; diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 980810835e..e5aa740a33 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -1393,7 +1393,7 @@ void LLTextureCtrl::setOnTextureSelectedCallback(texture_selected_callback cb)  void	LLTextureCtrl::setImageAssetName(const std::string& name)  { -	LLPointer<LLUIImage> imagep = LLUI::getUIImage(name); +	LLPointer<LLUIImage> imagep = LLUI::getUIImage(name, LLGLTexture::BOOST_PREVIEW);  	if(imagep)  	{  		LLViewerFetchedTexture* pTexture = dynamic_cast<LLViewerFetchedTexture*>(imagep->getImage().get()); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 750140245b..a0e112c5e8 100755 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -4449,7 +4449,7 @@ void LLTextureFetchDebugger::addHistoryEntry(LLTextureFetchWorker* worker)  			mRefetchedAllData += worker->mFormattedImage->getDataSize();  			// refetch list only requests/creates normal images, so requesting ui='false' -			LLViewerFetchedTexture* tex = LLViewerTextureManager::findFetchedTexture(worker->mID, TEX_LIST_DISCARD); +			LLViewerFetchedTexture* tex = LLViewerTextureManager::findFetchedTexture(worker->mID, TEX_LIST_STANDARD);  			if(tex && mRefetchList[tex].begin() != mRefetchList[tex].end())  			{  				if(worker->mDecodedDiscard == mFetchingHistory[mRefetchList[tex][0]].mDecodedLevel) diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index cafe757c1a..f6ca0bc9d7 100755 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -31,7 +31,7 @@  #include "llfocusmgr.h"  #include "llbutton.h" -#include "lliconctrl.h" +#include "llgroupiconctrl.h"  #include "llinventoryfunctions.h"  #include "llinventoryicon.h"  #include "llnotifications.h" @@ -65,8 +65,10 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(const LLNotificationPtr& notifi  	}  	//group icon -	LLIconCtrl* pGroupIcon = getChild<LLIconCtrl>("group_icon", TRUE); -	pGroupIcon->setValue(groupData.mInsigniaID); +	LLGroupIconCtrl* pGroupIcon = getChild<LLGroupIconCtrl>("group_icon", TRUE); + +	// We should already have this data preloaded, so no sense in setting icon through setValue(group_id) +	pGroupIcon->setIconId(groupData.mInsigniaID);  	//header title  	std::string from_name = payload["sender_name"].asString(); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 518d014e8c..66eee552be 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5617,6 +5617,10 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)  	bool you_paid_someone = (source_id == gAgentID);  	if (you_paid_someone)  	{ +		if(!gSavedSettings.getBOOL("NotifyMoneySpend")) +		{ +			return; +		}  		args["NAME"] = dest_slurl;  		is_name_group = is_dest_group;  		name_id = dest_id; @@ -5654,6 +5658,10 @@ static void process_money_balance_reply_extended(LLMessageSystem* msg)  	}  	else {  		// ...someone paid you +		if(!gSavedSettings.getBOOL("NotifyMoneyReceived")) +		{ +			return; +		}  		args["NAME"] = source_slurl;  		is_name_group = is_source_group;  		name_id = source_id; diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 3e059f3b68..c5e07f009f 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -3323,7 +3323,7 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL  	setCategory(LLGLTexture::MEDIA); -	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_DISCARD); +	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_STANDARD);  	if(tex) //this media is a parcel media for tex.  	{  		tex->setParcelMedia(this); @@ -3333,7 +3333,7 @@ LLViewerMediaTexture::LLViewerMediaTexture(const LLUUID& id, BOOL usemipmaps, LL  //virtual   LLViewerMediaTexture::~LLViewerMediaTexture()   {	 -	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_DISCARD); +	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_STANDARD);  	if(tex) //this media is a parcel media for tex.  	{  		tex->setParcelMedia(NULL); @@ -3388,7 +3388,7 @@ BOOL LLViewerMediaTexture::findFaces()  	BOOL ret = TRUE; -	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_DISCARD); +	LLViewerTexture* tex = gTextureList.findImage(mID, TEX_LIST_STANDARD);  	if(tex) //this media is a parcel media for tex.  	{  		for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch) @@ -3497,7 +3497,7 @@ void LLViewerMediaTexture::addFace(U32 ch, LLFace* facep)  	const LLTextureEntry* te = facep->getTextureEntry();  	if(te && te->getID().notNull())  	{ -		LLViewerTexture* tex = gTextureList.findImage(te->getID(), TEX_LIST_DISCARD); +		LLViewerTexture* tex = gTextureList.findImage(te->getID(), TEX_LIST_STANDARD);  		if(tex)  		{  			mTextureList.push_back(tex);//increase the reference number by one for tex to avoid deleting it. @@ -3526,7 +3526,7 @@ void LLViewerMediaTexture::removeFace(U32 ch, LLFace* facep)  	const LLTextureEntry* te = facep->getTextureEntry();  	if(te && te->getID().notNull())  	{ -		LLViewerTexture* tex = gTextureList.findImage(te->getID(), TEX_LIST_DISCARD); +		LLViewerTexture* tex = gTextureList.findImage(te->getID(), TEX_LIST_STANDARD);  		if(tex)  		{  			for(std::list< LLPointer<LLViewerTexture> >::iterator iter = mTextureList.begin(); @@ -3635,10 +3635,10 @@ void LLViewerMediaTexture::switchTexture(U32 ch, LLFace* facep)  			const LLTextureEntry* te = facep->getTextureEntry();  			if(te)  			{ -				LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID(), TEX_LIST_DISCARD) : NULL; +				LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID(), TEX_LIST_STANDARD) : NULL;  				if(!tex && te->getID() != mID)//try parcel media.  				{ -					tex = gTextureList.findImage(mID, TEX_LIST_DISCARD); +					tex = gTextureList.findImage(mID, TEX_LIST_STANDARD);  				}  				if(!tex)  				{ diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index e2a3ad1981..5cfd04b4c1 100755 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -72,20 +72,14 @@ static LLTrace::BlockTimerStatHandle FTM_PROCESS_IMAGES("Process Images");  ETexListType get_element_type(S32 priority)  { -    // don't discard flag can be used in some cases, but it usually is not set yet -    if (priority == LLViewerFetchedTexture::BOOST_ICON -        || priority == LLViewerFetchedTexture::BOOST_UI) -    { -        return TEX_LIST_UI; -    } -    return TEX_LIST_DISCARD; +    return (priority == LLViewerFetchedTexture::BOOST_ICON) ? TEX_LIST_SCALE : TEX_LIST_STANDARD;  }  ///////////////////////////////////////////////////////////////////////////////  LLTextureKey::LLTextureKey()  : textureId(LLUUID::null), -textureType(TEX_LIST_DISCARD) +textureType(TEX_LIST_STANDARD)  {  } @@ -591,7 +585,7 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,  void LLViewerTextureList::findTexturesByID(const LLUUID &image_id, std::vector<LLViewerFetchedTexture*> &output)  { -    LLTextureKey search_key(image_id, TEX_LIST_DISCARD); +    LLTextureKey search_key(image_id, TEX_LIST_STANDARD);      uuid_map_t::iterator iter = mUUIDMap.lower_bound(search_key);      while (iter != mUUIDMap.end() && iter->first.textureId == image_id)      { @@ -1597,14 +1591,14 @@ void LLViewerTextureList::processImageNotInDatabase(LLMessageSystem *msg,void **  	LLUUID image_id;  	msg->getUUIDFast(_PREHASH_ImageID, _PREHASH_ID, image_id); -	LLViewerFetchedTexture* image = gTextureList.findImage( image_id, TEX_LIST_DISCARD); +	LLViewerFetchedTexture* image = gTextureList.findImage( image_id, TEX_LIST_STANDARD);  	if( image )  	{  		LL_WARNS() << "Image not in db" << LL_ENDL;  		image->setIsMissingAsset();  	} -    image = gTextureList.findImage(image_id, TEX_LIST_UI); +    image = gTextureList.findImage(image_id, TEX_LIST_SCALE);      if (image)      {          LL_WARNS() << "Icon not in db" << LL_ENDL; diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h index 9f94f2f1bc..ba76770838 100755 --- a/indra/newview/llviewertexturelist.h +++ b/indra/newview/llviewertexturelist.h @@ -61,8 +61,8 @@ typedef	void (*LLImageCallback)(BOOL success,  enum ETexListType  { -    TEX_LIST_DISCARD = 0, -    TEX_LIST_UI +    TEX_LIST_STANDARD = 0, +    TEX_LIST_SCALE  };  struct LLTextureKey diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index d3416ec5fc..50329d8576 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1037,7 +1037,16 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window,  LLCoordGL pos, MASK  BOOL LLViewerWindow::handleMouseDown(LLWindow *window,  LLCoordGL pos, MASK mask)  { -	BOOL down = TRUE; +    mAllowMouseDragging = FALSE; +    if (!mMouseDownTimer.getStarted()) +    { +        mMouseDownTimer.start(); +    } +    else +    { +        mMouseDownTimer.reset(); +    }     +    BOOL down = TRUE;  	return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);  } @@ -1056,7 +1065,11 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window,  LLCoordGL pos, MASK ma  BOOL LLViewerWindow::handleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask)  { -	BOOL down = FALSE; +    if (mMouseDownTimer.getStarted()) +    { +        mMouseDownTimer.stop(); +    } +    BOOL down = FALSE;  	return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);  } @@ -1288,6 +1301,22 @@ void LLViewerWindow::handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask  	}  } +void LLViewerWindow::handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask) +{ +    if (mMouseDownTimer.getStarted()) +    { +        if (mMouseDownTimer.getElapsedTimeF32() > 0.1) +        { +            mAllowMouseDragging = TRUE; +            mMouseDownTimer.stop(); +        } +    } +    if(mAllowMouseDragging || !LLToolCamera::getInstance()->hasMouseCapture()) +    { +        handleMouseMove(window, pos, mask); +    } +} +  void LLViewerWindow::handleMouseLeave(LLWindow *window)  {  	// Note: we won't get this if we have captured the mouse. @@ -1617,6 +1646,8 @@ LLViewerWindow::LLViewerWindow(const Params& p)  	mMiddleMouseDown(FALSE),  	mRightMouseDown(FALSE),  	mMouseInWindow( FALSE ), +    mAllowMouseDragging(TRUE), +    mMouseDownTimer(),  	mLastMask( MASK_NONE ),  	mToolStored( NULL ),  	mHideCursorPermanent( FALSE ), diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index d34e76f6f6..ad06f00234 100755 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -193,6 +193,7 @@ public:  	/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data);  				void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask); +                void handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ void handleMouseLeave(LLWindow *window);  	/*virtual*/ void handleResize(LLWindow *window,  S32 x,  S32 y);  	/*virtual*/ void handleFocus(LLWindow *window); @@ -463,6 +464,8 @@ private:  	BOOL			mMouseInWindow;				// True if the mouse is over our window or if we have captured the mouse.  	BOOL			mFocusCycleMode; +    BOOL            mAllowMouseDragging; +    LLFrameTimer    mMouseDownTimer;  	typedef std::set<LLHandle<LLView> > view_handle_set_t;  	view_handle_set_t mMouseHoverViews; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index d47638146a..ddf60b9464 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1992,7 +1992,7 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU  		uuid == IMG_INVISIBLE)  	{  		// Should already exist, don't need to find it on sim or baked-texture host. -		result = gTextureList.findImage(uuid, TEX_LIST_DISCARD); +		result = gTextureList.findImage(uuid, TEX_LIST_STANDARD);  	}  	if (!result)  	{ @@ -4313,7 +4313,7 @@ bool LLVOAvatar::allTexturesCompletelyDownloaded(std::set<LLUUID>& ids) const  {  	for (std::set<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)  	{ -		LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_DISCARD); +		LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_STANDARD);  		if (imagep && imagep->getDiscardLevel()!=0)  		{  			return false; @@ -4385,7 +4385,7 @@ S32Bytes LLVOAvatar::totalTextureMemForUUIDS(std::set<LLUUID>& ids)  	S32Bytes result(0);  	for (std::set<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); ++it)  	{ -		LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_DISCARD); +		LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_STANDARD);  		if (imagep)  		{  			result += imagep->getTextureMemory(); @@ -4473,7 +4473,7 @@ void LLVOAvatar::releaseOldTextures()  	{  		if (new_texture_ids.find(*it) == new_texture_ids.end())  		{ -			LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_DISCARD); +			LLViewerFetchedTexture *imagep = gTextureList.findImage(*it, TEX_LIST_STANDARD);  			if (imagep)  			{  				current_texture_mem += imagep->getTextureMemory(); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5a77d3fc8c..f8e346afb9 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5992,6 +5992,18 @@ Are you sure you want to permanently delete the contents of your Trash?    <notification     icon="alertmodal.tga" +   name="TrashIsFull" +   type="alertmodal"> +Your trash is overflowing. This may cause problems logging in. +      <tag>confirm</tag> +        <usetemplate +         name="okcancelbuttons" +         notext="I will empty trash later" +         yestext="Empty trash now"/> +  </notification> + +  <notification +   icon="alertmodal.tga"     name="ConfirmClearBrowserCache"     type="alertmodal">  Are you sure you want to delete your travel, web, and search history? diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml index cfe3aeb7c9..e758a8ce30 100755 --- a/indra/newview/skins/default/xui/en/panel_group_list_item.xml +++ b/indra/newview/skins/default/xui/en/panel_group_list_item.xml @@ -27,7 +27,7 @@       top="0"       visible="false"       width="320" /> -    <icon +    <group_icon       height="20"       image_name="Generic_Group"       name="group_icon" diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml index cded4cf31a..4121acdfb0 100755 --- a/indra/newview/skins/default/xui/en/panel_group_notify.xml +++ b/indra/newview/skins/default/xui/en/panel_group_notify.xml @@ -27,7 +27,7 @@       name="header"       top="0"       width="305"> -        <icon +        <group_icon           follows="all"           height="20"           layout="topleft" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml index 714dca7fac..93c97ded25 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml @@ -21,12 +21,12 @@          Tell me:      </text>      <check_box -     control_name="NotifyMoneyChange" +     control_name="NotifyMoneySpend"       height="16" -     label="When I spend or get L$" +     label="When I spend L$"       layout="topleft"       left_delta="50" -     name="notify_money_change_checkbox" +     name="notify_money_spend_checkbox"       top_pad="4"       width="300" />      <check_box @@ -34,10 +34,18 @@       height="16"       label="When my friends log in or out"       layout="topleft" -     left_delta="0" -     name="friends_online_notify_checkbox" -     top_pad="4" -     width="300" /> +     left_delta="150" +     name="friends_online_notify_checkbox"      +     width="300" />	 +    <check_box +     control_name="NotifyMoneyReceived" +     height="16" +     label="When I get L$" +     layout="topleft" +     left_delta="-150" +     top_pad="4"	 +     name="notify_money_received_checkbox"      +     width="300" />         <text       type="string"       length="1" | 
