diff options
| author | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-01-29 18:01:02 +0200 | 
|---|---|---|
| committer | Ychebotarev ProductEngine <ychebotarev@productengine.com> | 2010-01-29 18:01:02 +0200 | 
| commit | 675df36965c346f323bb2025cd832a4dc7c9cdce (patch) | |
| tree | cd4f950defd428e37340229013502d8d8ee48c88 | |
| parent | 67d006e404d830931db17814e8da38cc55332152 (diff) | |
| parent | 86609394caf1ebb20dd90de37b9af1471ae8aa20 (diff) | |
merge
--HG--
branch : product-engine
158 files changed, 1134 insertions, 765 deletions
| diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp index 0a807702d0..e50d59fd4b 100644 --- a/indra/llcommon/llallocator_heap_profile.cpp +++ b/indra/llcommon/llallocator_heap_profile.cpp @@ -113,21 +113,24 @@ void LLAllocatorHeapProfile::parse(std::string const & prof_text)          ++j;          while(j != line_elems.end() && j->empty()) { ++j; } // skip any separator tokens -        llassert_always(j != line_elems.end()); -        ++j; // skip the '@' - -        mLines.push_back(line(live_count, live_size, tot_count, tot_size)); -        line & current_line = mLines.back(); - -        for(; j != line_elems.end(); ++j) -        { -            if(!j->empty()) { -                U32 marker = boost::lexical_cast<U32>(*j); -                current_line.mTrace.push_back(marker); -            } -        } +	llassert(j != line_elems.end()); +        if (j != line_elems.end()) +	{ +		++j; // skip the '@' + +		mLines.push_back(line(live_count, live_size, tot_count, tot_size)); +		line & current_line = mLines.back(); +		 +		for(; j != line_elems.end(); ++j) +		{ +			if(!j->empty()) +			{ +				U32 marker = boost::lexical_cast<U32>(*j); +				current_line.mTrace.push_back(marker); +			} +		} +	}      } -      // *TODO - parse MAPPED_LIBRARIES section here if we're ever interested in it  } diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h index 5af7991006..a77bd211f3 100644 --- a/indra/llcommon/llchat.h +++ b/indra/llcommon/llchat.h @@ -79,6 +79,7 @@ public:  	:	mText(text),  		mFromName(),  		mFromID(), +		mNotifId(),  		mSourceType(CHAT_SOURCE_AGENT),  		mChatType(CHAT_TYPE_NORMAL),  		mAudible(CHAT_AUDIBLE_FULLY), @@ -87,12 +88,14 @@ public:  		mTimeStr(),  		mPosAgent(),  		mURL(), -		mChatStyle(CHAT_STYLE_NORMAL) +		mChatStyle(CHAT_STYLE_NORMAL), +		mSessionID()  	{ }  	std::string		mText;		// UTF-8 line of text  	std::string		mFromName;	// agent or object name  	LLUUID			mFromID;	// agent id or object id +	LLUUID			mNotifId;  	EChatSourceType	mSourceType;  	EChatType		mChatType;  	EChatAudible	mAudible; @@ -102,6 +105,7 @@ public:  	LLVector3		mPosAgent;  	std::string		mURL;  	EChatStyle		mChatStyle; +	LLUUID			mSessionID;  };  #endif diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp index ca7e471bf2..de7f2ead74 100644 --- a/indra/llcommon/lldate.cpp +++ b/indra/llcommon/lldate.cpp @@ -152,7 +152,8 @@ void LLDate::toStream(std::ostream& s) const  		s << '.' << std::setw(2)  		  << (int)(exp_time.tm_usec / (LL_APR_USEC_PER_SEC / 100));  	} -	s << 'Z'; +	s << 'Z' +	  << std::setfill(' ');  }  bool LLDate::split(S32 *year, S32 *month, S32 *day, S32 *hour, S32 *min, S32 *sec) const diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp index 469e544b16..8a4a4a8f9a 100644 --- a/indra/llcommon/llprocessor.cpp +++ b/indra/llcommon/llprocessor.cpp @@ -281,7 +281,8 @@ bool CProcessor::AnalyzeIntelProcessor()  	// already have a string here from GetCPUInfo().  JC  	if ( CPUInfo.uiBrandID < LL_ARRAY_SIZE(INTEL_BRAND) )  	{ -		strcpy(CPUInfo.strBrandID, INTEL_BRAND[CPUInfo.uiBrandID]); +		strncpy(CPUInfo.strBrandID, INTEL_BRAND[CPUInfo.uiBrandID], sizeof(CPUInfo.strBrandID)-1); +		CPUInfo.strBrandID[sizeof(CPUInfo.strBrandID)-1]='\0';  		if (CPUInfo.uiBrandID == 3 && CPUInfo.uiModel == 6)  		{ diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 31e70e0fe4..62cedcde4e 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -882,6 +882,7 @@ void LLStringUtilBase<T>::addCRLF(std::basic_string<T>& string)  		}  		string.assign(t, size); +		delete[] t;  	}  } diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp index f6e8f01f0e..9d4f3a98f0 100644 --- a/indra/llcommon/lluri.cpp +++ b/indra/llcommon/lluri.cpp @@ -46,10 +46,21 @@  void encode_character(std::ostream& ostr, std::string::value_type val)  { -	ostr << "%" << std::uppercase << std::hex << std::setw(2) << std::setfill('0')  +	ostr << "%" + +	     << std::uppercase +	     << std::hex +	     << std::setw(2) +	     << std::setfill('0')  +  	     // VWR-4010 Cannot cast to U32 because sign-extension on   	     // chars > 128 will result in FFFFFFC3 instead of F3. -	     << static_cast<S32>(static_cast<U8>(val)); +	     << static_cast<S32>(static_cast<U8>(val)) + +		// reset stream state +	     << std::nouppercase +	     << std::dec +	     << std::setfill(' ');  }  // static diff --git a/indra/llmath/llinterp.h b/indra/llmath/llinterp.h index 36ca2e9865..88af004170 100644 --- a/indra/llmath/llinterp.h +++ b/indra/llmath/llinterp.h @@ -54,7 +54,7 @@ template <typename Type>  class LLInterp  {  public: -	LLInterp(); +        LLInterp();  	virtual ~LLInterp() {}  	virtual void start(); @@ -151,6 +151,7 @@ protected:  template <typename Type>  LLInterp<Type>::LLInterp() +: mStartVal(Type()), mEndVal(Type()), mCurVal(Type())  {  	mStartTime = 0.f;  	mEndTime = 1.f; diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index ba8776690a..2f34fb1bb0 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -183,7 +183,6 @@ public:  		{  			mMax.mdV[i] = mCenter.mdV[i] + mSize.mdV[i];  			mMin.mdV[i] = mCenter.mdV[i] - mSize.mdV[i]; -			mCenter.mdV[i] = mCenter.mdV[i];  		}  	} diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp index 3078d80552..dbec2816c8 100644 --- a/indra/llmessage/llcachename.cpp +++ b/indra/llmessage/llcachename.cpp @@ -125,7 +125,7 @@ private:  };  ReplySender::ReplySender(LLMessageSystem* msg) -	: mMsg(msg), mPending(false) +	: mMsg(msg), mPending(false), mCurrIsGroup(false)  { }  ReplySender::~ReplySender() diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp index 283547ea00..2ddbf3e0df 100644 --- a/indra/llmessage/llmessagetemplateparser.cpp +++ b/indra/llmessage/llmessagetemplateparser.cpp @@ -403,6 +403,10 @@ LLTemplateParser::LLTemplateParser(LLTemplateTokenizer & tokens):  		{  			mMessages.push_back(templatep);  		} +		else +		{ +			delete templatep; +		}  	}  	if(!tokens.wantEOF()) diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp index 01e922eba2..43429b0ab3 100644 --- a/indra/llmessage/llnamevalue.cpp +++ b/indra/llmessage/llnamevalue.cpp @@ -963,6 +963,7 @@ std::ostream&		operator<<(std::ostream& s, const LLNameValue &a)  			U64_to_str(*a.mNameValueReference.u64, u64_string, sizeof(u64_string));  			s << u64_string;  		} +		break;  	case NVT_VEC3:  		s << *(a.mNameValueReference.vec3);  		break; diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp index 6400310c46..55379fc6fd 100644 --- a/indra/llmessage/lltemplatemessagebuilder.cpp +++ b/indra/llmessage/lltemplatemessagebuilder.cpp @@ -737,10 +737,14 @@ static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* templat  		}  		--block_count; -		++block_iter; +		  		if (block_iter != message_data->mMemberBlocks.end())  		{ -			mbci = block_iter->second; +			++block_iter; +			if (block_iter != message_data->mMemberBlocks.end()) +			{ +				mbci = block_iter->second; +			}  		}  	} diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp index d67911e8e2..0a71ad95f2 100644 --- a/indra/llmessage/lltransfermanager.cpp +++ b/indra/llmessage/lltransfermanager.cpp @@ -855,6 +855,7 @@ void LLTransferSourceChannel::updateTransfers()  			break;  		case LLTS_ERROR:  			llwarns << "Error in transfer dataCallback!" << llendl; +			// fall through  		case LLTS_DONE:  			// We need to clean up this transfer source.  			//llinfos << "LLTransferSourceChannel::updateTransfers() " << tsp->getID() << " done" << llendl; diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index 07fc82c770..11c924cadf 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -359,6 +359,7 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message)  					else  					{  						LL_WARNS("Plugin") << "Couldn't create a shared memory segment!" << LL_ENDL; +						delete region;  					}  				} diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp index 23dc532ba5..77240ce546 100644 --- a/indra/llplugin/slplugin/slplugin.cpp +++ b/indra/llplugin/slplugin/slplugin.cpp @@ -156,7 +156,7 @@ bool checkExceptionHandler()  	if (prev_filter == NULL)  	{  		ok = FALSE; -		if (myWin32ExceptionHandler == NULL) +		if (NULL == myWin32ExceptionHandler)  		{  			LL_WARNS("AppInit") << "Exception handler uninitialized." << LL_ENDL;  		} diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp index 5ad758072c..b75d1b0f67 100644 --- a/indra/llprimitive/llprimitive.cpp +++ b/indra/llprimitive/llprimitive.cpp @@ -154,6 +154,7 @@ bool LLPrimitive::cleanupVolumeManager()  //===============================================================  LLPrimitive::LLPrimitive()  :	mTextureList(), +	mNumTEs(0),  	mMiscFlags(0)  {  	mPrimitiveCode = 0; diff --git a/indra/llrender/llfontbitmapcache.cpp b/indra/llrender/llfontbitmapcache.cpp index f01878642a..fa231c9e6a 100644 --- a/indra/llrender/llfontbitmapcache.cpp +++ b/indra/llrender/llfontbitmapcache.cpp @@ -64,7 +64,7 @@ void LLFontBitmapCache::init(S32 num_components,  LLImageRaw *LLFontBitmapCache::getImageRaw(U32 bitmap_num) const  { -	if ((bitmap_num < 0) || (bitmap_num >= mImageRawVec.size())) +	if (bitmap_num >= mImageRawVec.size())  		return NULL;  	return mImageRawVec[bitmap_num]; @@ -72,7 +72,7 @@ LLImageRaw *LLFontBitmapCache::getImageRaw(U32 bitmap_num) const  LLImageGL *LLFontBitmapCache::getImageGL(U32 bitmap_num) const  { -	if ((bitmap_num < 0) || (bitmap_num >= mImageGLVec.size())) +	if (bitmap_num >= mImageGLVec.size())  		return NULL;  	return mImageGLVec[bitmap_num]; diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 46478ba3c9..8bcc4723ae 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -1716,10 +1716,7 @@ void LLImageGL::updatePickMask(S32 width, S32 height, const U8* data_in)  			{  				U32 pick_idx = pick_bit/8;  				U32 pick_offset = pick_bit%8; -				if (pick_idx >= size) -				{ -					llerrs << "WTF?" << llendl; -				} +				llassert(pick_idx < size);  				mPickMask[pick_idx] |= 1 << pick_offset;  			} diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 572ae13909..ecfe845b34 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -237,7 +237,7 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi  		llerrs << "Wrong vertex buffer bound." << llendl;  	} -	if (mode > LLRender::NUM_MODES) +	if (mode >= LLRender::NUM_MODES)  	{  		llerrs << "Invalid draw mode: " << mode << llendl;  		return; @@ -267,7 +267,7 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const  		llerrs << "Wrong vertex buffer bound." << llendl;  	} -	if (mode > LLRender::NUM_MODES) +	if (mode >= LLRender::NUM_MODES)  	{  		llerrs << "Invalid draw mode: " << mode << llendl;  		return; @@ -292,7 +292,7 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const  		llerrs << "Wrong vertex buffer bound." << llendl;  	} -	if (mode > LLRender::NUM_MODES) +	if (mode >= LLRender::NUM_MODES)  	{  		llerrs << "Invalid draw mode: " << mode << llendl;  		return; diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index f29e8785eb..9d23daf56d 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -103,7 +103,8 @@ LLComboBox::LLComboBox(const LLComboBox::Params& p)  	mPrearrangeCallback(p.prearrange_callback()),  	mTextEntryCallback(p.text_entry_callback()),  	mListPosition(p.list_position), -	mLastSelectedIndex(-1) +	mLastSelectedIndex(-1), +	mLabel(p.label)  {  	// Text label button @@ -490,6 +491,7 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p)  		params.handle_edit_keys_directly(true);  		params.commit_on_focus_lost(false);  		params.follows.flags(FOLLOWS_ALL); +		params.label(mLabel);  		mTextEntry = LLUICtrlFactory::create<LLLineEditor> (params);  		mTextEntry->setText(cur_label);  		mTextEntry->setIgnoreTab(TRUE); @@ -505,7 +507,8 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p)  		mButton->setRect(rect);  		mButton->setTabStop(TRUE);  		mButton->setHAlign(LLFontGL::LEFT); - +		mButton->setLabel(mLabel.getString()); +		  		if (mTextEntry)  		{  			mTextEntry->setVisible(FALSE); @@ -633,7 +636,7 @@ void LLComboBox::hideList()  			if(mLastSelectedIndex >= 0)  				mList->selectNthItem(mLastSelectedIndex);  		} -		else +		else if(mLastSelectedIndex >= 0)  			mList->selectNthItem(mLastSelectedIndex);  		mButton->setToggleState(FALSE); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 79d8f90fec..de46d89d6f 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1916,9 +1916,10 @@ static LLDefaultChildRegistry::Register<LLFloaterView> r("floater_view");  LLFloaterView::LLFloaterView (const Params& p)  :	LLUICtrl (p), +  	mFocusCycleMode(FALSE), -	mSnapOffsetBottom(0) -	,mSnapOffsetRight(0) +	mSnapOffsetBottom(0), +	mSnapOffsetRight(0)  {  } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index f70495c0f0..8c9dacbd20 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -468,9 +468,6 @@ public:  	void setSnapOffsetRight(S32 offset) { mSnapOffsetRight = offset; }  private: -	S32				mColumn; -	S32				mNextLeft; -	S32				mNextTop;  	BOOL			mFocusCycleMode;  	S32				mSnapOffsetBottom;  	S32				mSnapOffsetRight; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index c172a2b714..7fa9a88059 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -1651,6 +1651,7 @@ LLMenuGL::LLMenuGL(const LLMenuGL::Params& p)  	mBackgroundColor( p.bg_color() ),  	mBgVisible( p.bg_visible ),  	mDropShadowed( p.drop_shadow ), +	mHasSelection(false),  	mHorizontalLayout( p.horizontal_layout ),  	mScrollable(mHorizontalLayout ? FALSE : p.scrollable), // Scrolling is supported only for vertical layout  	mMaxScrollableItems(p.max_scrollable_items), @@ -1875,17 +1876,21 @@ void LLMenuGL::scrollItemsDown()  	item_list_t::iterator next_item_iter; -	for (next_item_iter = ++cur_item_iter; next_item_iter != mItems.end(); next_item_iter++) +	if (cur_item_iter != mItems.end())  	{ -		if( (*next_item_iter)->getVisible()) +		for (next_item_iter = ++cur_item_iter; next_item_iter != mItems.end(); next_item_iter++)  		{ -			break; +			if( (*next_item_iter)->getVisible()) +			{ +				break; +			} +		} +		 +		if (next_item_iter != mItems.end() && +		    (*next_item_iter)->getVisible()) +		{ +			mFirstVisibleItem = *next_item_iter;  		} -	} - -	if ((*next_item_iter)->getVisible()) -	{ -		mFirstVisibleItem = *next_item_iter;  	}  	mNeedsArrange = TRUE; @@ -2809,7 +2814,7 @@ BOOL LLMenuGL::handleHover( S32 x, S32 y, MASK mask )  					((LLMenuItemGL*)viewp)->setHighlight(TRUE);  					LLMenuGL::setKeyboardMode(FALSE);  				} -				mHasSelection = TRUE; +				mHasSelection = true;  			}  		}  	} @@ -2888,7 +2893,7 @@ void LLMenuGL::setVisible(BOOL visible)  		}  		else  		{ -			mHasSelection = FALSE; +			mHasSelection = true;  			mFadeTimer.stop();  		} diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 61e06f9e5f..8441aaadd4 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -546,7 +546,7 @@ private:  	LLHandle<LLView> mParentMenuItem;  	LLUIString		mLabel;  	BOOL mDropShadowed; 	//  Whether to drop shadow  -	BOOL			mHasSelection; +	bool			mHasSelection;  	LLFrameTimer	mFadeTimer;  	LLTimer			mScrollItemsTimer;  	BOOL			mTornOff; diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 86989012ee..a67094b8ce 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -1058,6 +1058,7 @@ LLNotificationChannelPtr LLNotifications::getChannel(const std::string& channelN  	if(p == mChannels.end())  	{  		llerrs << "Did not find channel named " << channelName << llendl; +		return LLNotificationChannelPtr();  	}  	return p->second;  } diff --git a/indra/llui/llnotificationsutil.cpp b/indra/llui/llnotificationsutil.cpp index f343d27cb4..54bdb4bd66 100644 --- a/indra/llui/llnotificationsutil.cpp +++ b/indra/llui/llnotificationsutil.cpp @@ -94,3 +94,8 @@ void LLNotificationsUtil::cancel(LLNotificationPtr pNotif)  {  	LLNotifications::instance().cancel(pNotif);  } + +LLNotificationPtr LLNotificationsUtil::find(LLUUID uuid) +{ +	return LLNotifications::instance().find(uuid); +} diff --git a/indra/llui/llnotificationsutil.h b/indra/llui/llnotificationsutil.h index d552fa915b..338204924a 100644 --- a/indra/llui/llnotificationsutil.h +++ b/indra/llui/llnotificationsutil.h @@ -65,6 +65,8 @@ namespace LLNotificationsUtil  	S32 getSelectedOption(const LLSD& notification, const LLSD& response);  	void cancel(LLNotificationPtr pNotif); + +	LLNotificationPtr find(LLUUID uuid);  }  #endif diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp index 71511f69a4..b8f93b6a0e 100644 --- a/indra/llui/llstyle.cpp +++ b/indra/llui/llstyle.cpp @@ -49,7 +49,10 @@ LLStyle::Params::Params()  LLStyle::LLStyle(const LLStyle::Params& p) -:	mVisible(p.visible), +:	mItalic(FALSE), +	mBold(FALSE), +	mUnderline(FALSE), +	mVisible(p.visible),  	mColor(p.color()),  	mReadOnlyColor(p.readonly_color()),  	mFont(p.font()), diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index dcb3542e18..6be76605fd 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -1590,7 +1590,10 @@ void LLTabContainer::onTabBtn( const LLSD& data, LLPanel* panel )  	LLTabTuple* tuple = getTabByPanel(panel);  	selectTabPanel( panel ); -	tuple->mTabPanel->setFocus(TRUE); +	if (tuple) +	{ +		tuple->mTabPanel->setFocus(TRUE); +	}  }  void LLTabContainer::onNextBtn( const LLSD& data ) diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 01c7a81309..173fde8e76 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -400,7 +400,8 @@ bool LLToolTip::hasClickCallback()  //  LLToolTipMgr::LLToolTipMgr() -:	mToolTip(NULL), +:       mToolTipsBlocked(false), +	mToolTip(NULL),  	mNeedsToolTip(false)  {} diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h index 7ec0fd603a..32cfc0d9cd 100644 --- a/indra/llui/lluistring.h +++ b/indra/llui/lluistring.h @@ -64,7 +64,7 @@ class LLUIString  public:  	// These methods all perform appropriate argument substitution  	// and modify mOrig where appropriate -	LLUIString() {} +        LLUIString() : mNeedsResult(false), mNeedsWResult(false) {}  	LLUIString(const std::string& instring, const LLStringUtil::format_map_t& args);  	LLUIString(const std::string& instring) { assign(instring); } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7ddeb90d29..1c32c690a8 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -156,13 +156,11 @@ set(viewer_SOURCE_FILES      llfloaterbuycurrency.cpp      llfloaterbuyland.cpp      llfloatercamera.cpp -    llfloaterchatterbox.cpp      llfloatercolorpicker.cpp      llfloatercustomize.cpp      llfloaterdaycycle.cpp      llfloaterenvsettings.cpp      llfloaterfonttest.cpp -    llfloaterfriends.cpp      llfloatergesture.cpp      llfloatergodtools.cpp      llfloatergroupinvite.cpp @@ -241,7 +239,6 @@ set(viewer_SOURCE_FILES      llimfloater.cpp      llimfloatercontainer.cpp      llimhandler.cpp -    llimpanel.cpp      llimview.cpp      llinspect.cpp      llinspectavatar.cpp @@ -273,7 +270,6 @@ set(viewer_SOURCE_FILES      llmaniptranslate.cpp      llmediactrl.cpp      llmediadataclient.cpp -    llmediaremotectrl.cpp      llmemoryview.cpp      llmenucommands.cpp      llmetricperformancetester.cpp @@ -297,7 +293,6 @@ set(viewer_SOURCE_FILES      llnotificationscripthandler.cpp      llnotificationtiphandler.cpp      lloutputmonitorctrl.cpp -    lloverlaybar.cpp      llpanelavatar.cpp      llpanelavatartag.cpp      llpanelblockedlist.cpp @@ -418,7 +413,6 @@ set(viewer_SOURCE_FILES      lltoastnotifypanel.cpp      lltoastpanel.cpp      lltool.cpp -    lltoolbar.cpp      lltoolbrush.cpp      lltoolcomp.cpp      lltooldraganddrop.cpp @@ -513,7 +507,6 @@ set(viewer_SOURCE_FILES      llvoground.cpp      llvoicechannel.cpp      llvoiceclient.cpp -    llvoiceremotectrl.cpp      llvoicevisualizer.cpp      llvoinventorylistener.cpp      llvopartgroup.cpp @@ -663,13 +656,11 @@ set(viewer_HEADER_FILES      llfloaterbuycurrency.h      llfloaterbuyland.h      llfloatercamera.h -    llfloaterchatterbox.h      llfloatercolorpicker.h      llfloatercustomize.h      llfloaterdaycycle.h      llfloaterenvsettings.h      llfloaterfonttest.h -    llfloaterfriends.h      llfloatergesture.h      llfloatergodtools.h      llfloatergroupinvite.h @@ -747,7 +738,6 @@ set(viewer_HEADER_FILES      llhudview.h      llimfloater.h      llimfloatercontainer.h -    llimpanel.h      llimview.h      llinspect.h      llinspectavatar.h @@ -780,7 +770,6 @@ set(viewer_HEADER_FILES      llmaniptranslate.h      llmediactrl.h      llmediadataclient.h -    llmediaremotectrl.h      llmemoryview.h      llmenucommands.h      llmetricperformancetester.h @@ -799,7 +788,6 @@ set(viewer_HEADER_FILES      llnotificationhandler.h      llnotificationmanager.h      lloutputmonitorctrl.h -    lloverlaybar.h      llpanelavatar.h      llpanelavatartag.h      llpanelblockedlist.h @@ -923,7 +911,6 @@ set(viewer_HEADER_FILES      lltoastnotifypanel.h      lltoastpanel.h      lltool.h -    lltoolbar.h      lltoolbrush.h      lltoolcomp.h      lltooldraganddrop.h @@ -1016,7 +1003,6 @@ set(viewer_HEADER_FILES      llvoground.h      llvoicechannel.h      llvoiceclient.h -    llvoiceremotectrl.h      llvoicevisualizer.h      llvoinventorylistener.h      llvopartgroup.h @@ -1064,11 +1050,13 @@ if (DARWIN)    find_library(APPKIT_LIBRARY AppKit)    find_library(COCOA_LIBRARY Cocoa)    find_library(IOKIT_LIBRARY IOKit) +  find_library(COREAUDIO_LIBRARY CoreAudio)    set(viewer_LIBRARIES      ${COCOA_LIBRARY}      ${AGL_LIBRARY}      ${IOKIT_LIBRARY} +    ${COREAUDIO_LIBRARY}      )    # Add resource files to the project. diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1ef79aeec0..f3bda19ed1 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -2377,6 +2377,17 @@        <key>Value</key>        <integer>0</integer>      </map> +    <key>DisableMouseWarp</key> +    <map> +      <key>Comment</key> +      <string>Disable warping of the mouse to the center of the screen during alt-zoom and mouse look. Useful with certain input devices, mouse sharing programs like Synergy, or running under Parallels.</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>0</integer> +    </map>      <key>DisableRendering</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index c21cdf9508..b0ff3a5626 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1130,8 +1130,9 @@ void LLAgentWearables::addLocalTextureObject(const EWearableType wearable_type,  	if (!wearable)  	{  		llerrs << "Tried to add local texture object to invalid wearable with type " << wearable_type << " and index " << wearable_index << llendl; +		return;  	} -	LLLocalTextureObject* lto = new LLLocalTextureObject(); +	LLLocalTextureObject lto;  	wearable->setLocalTextureObject(texture_type, lto);  } @@ -2527,6 +2528,7 @@ void LLInitialWearablesFetch::processWearablesMessage()  			{  				llinfos << "Invalid wearable, type " << wearable_data->mType << " itemID "  				<< wearable_data->mItemID << " assetID " << wearable_data->mAssetID << llendl; +				delete wearable_data;  			}  		} diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 1dec8c7bd8..8f4ce4498e 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -292,11 +292,11 @@ private:  struct LLFoundData  { -	LLFoundData() {} +	LLFoundData() : mAssetType(LLAssetType::AT_NONE), mWearable(NULL) {}  	LLFoundData(const LLUUID& item_id, -				const LLUUID& asset_id, -				const std::string& name, -				LLAssetType::EType asset_type) : +		    const LLUUID& asset_id, +		    const std::string& name, +		    LLAssetType::EType asset_type) :  		mItemID(item_id),  		mAssetID(asset_id),  		mName(name), diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index dd50b482cf..38d1e01d08 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -35,11 +35,11 @@  #include "llsingleton.h"  #include "llinventorymodel.h" -#include "llviewerinventory.h"  #include "llcallbacklist.h"  class LLWearable;  class LLWearableHoldingPattern; +class LLInventoryCallback;  class LLAppearanceManager: public LLSingleton<LLAppearanceManager>  { diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 0e248ff88b..9bb0977c1a 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -163,7 +163,6 @@  #include "llvotree.h"  #include "llvoavatar.h"  #include "llfolderview.h" -#include "lltoolbar.h"  #include "llagentpilot.h"  #include "llvovolume.h"  #include "llflexibleobject.h"  @@ -414,7 +413,6 @@ static void settings_to_globals()  	LLVOAvatar::sVisibleInFirstPerson	= gSavedSettings.getBOOL("FirstPersonAvatarVisible");  	// clamp auto-open time to some minimum usable value  	LLFolderView::sAutoOpenTime			= llmax(0.25f, gSavedSettings.getF32("FolderAutoOpenDelay")); -	LLToolBar::sInventoryAutoOpenTime	= gSavedSettings.getF32("InventoryAutoOpenDelay");  	LLSelectMgr::sRectSelectInclusive	= gSavedSettings.getBOOL("RectangleSelectInclusive");  	LLSelectMgr::sRenderHiddenSelections = gSavedSettings.getBOOL("RenderHiddenSelections");  	LLSelectMgr::sRenderLightRadius = gSavedSettings.getBOOL("RenderLightRadius"); @@ -2685,7 +2683,7 @@ void LLAppViewer::handleViewerCrash()  		gMessageSystem->stopLogging();  	} -	LLWorld::getInstance()->getInfo(gDebugInfo); +	if (LLWorld::instanceExists()) LLWorld::getInstance()->getInfo(gDebugInfo);  	// Close the debug file  	pApp->writeDebugInfo(); @@ -4405,3 +4403,15 @@ void LLAppViewer::launchUpdater()  	// LLAppViewer::instance()->forceQuit();  } + +//virtual +void LLAppViewer::setMasterSystemAudioMute(bool mute) +{ +	gSavedSettings.setBOOL("MuteAudio", mute); +} + +//virtual +bool LLAppViewer::getMasterSystemAudioMute() +{ +	return gSavedSettings.getBOOL("MuteAudio"); +} diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 40e74061b5..a011c5ebfd 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -168,6 +168,10 @@ public:  	void purgeCache(); // Clear the local cache.  +	// mute/unmute the system's master audio +	virtual void setMasterSystemAudioMute(bool mute); +	virtual bool getMasterSystemAudioMute(); +	  protected:  	virtual bool initWindow(); // Initialize the viewer's window.  	virtual bool initLogging(); // Initialize log files, logging system, return false on failure. diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 1282e437f2..f8f8f50cd6 100644 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -50,6 +50,7 @@  #include <Carbon/Carbon.h>  #include "lldir.h"  #include <signal.h> +#include <CoreAudio/CoreAudio.h>	// for systemwide mute  class LLMediaCtrl;		// for LLURLDispatcher  namespace  @@ -444,6 +445,59 @@ std::string LLAppViewerMacOSX::generateSerialNumber()  	return serial_md5;  } +static AudioDeviceID get_default_audio_output_device(void) +{ +	AudioDeviceID device = 0; +	UInt32 size; +	OSStatus err; +	 +	size = sizeof(device); +	err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, &device); +	if(err != noErr) +	{ +		LL_DEBUGS("SystemMute") << "Couldn't get default audio output device (0x" << std::hex << err << ")" << LL_ENDL; +	} +	 +	return device; +} + +//virtual +void LLAppViewerMacOSX::setMasterSystemAudioMute(bool new_mute) +{ +	AudioDeviceID device = get_default_audio_output_device(); +	 +	if(device != 0) +	{ +		UInt32 mute = new_mute; +		OSStatus err = AudioDeviceSetProperty(device, NULL, 0, false, kAudioDevicePropertyMute, sizeof(mute), &mute); +		if(err != noErr) +		{ +			LL_INFOS("SystemMute") << "Couldn't set audio mute property (0x" << std::hex << err << ")" << LL_ENDL; +		} +	} +} + +//virtual +bool LLAppViewerMacOSX::getMasterSystemAudioMute() +{ +	// Assume the system isn't muted  +	UInt32 mute = 0; +	 +	AudioDeviceID device = get_default_audio_output_device(); +	 +	if(device != 0) +	{ +		UInt32 size = sizeof(mute); +		OSStatus err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyMute, &size, &mute); +		if(err != noErr) +		{ +			LL_DEBUGS("SystemMute") << "Couldn't get audio mute property (0x" << std::hex << err << ")" << LL_ENDL; +		} +	} +	 +	return (mute != 0); +} +  OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)  {  	OSErr result = noErr; diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h index bc841fc3a7..cbf7e6c209 100644 --- a/indra/newview/llappviewermacosx.h +++ b/indra/newview/llappviewermacosx.h @@ -48,6 +48,9 @@ public:  	//  	virtual bool init();			// Override to do application initialization +	// mute/unmute the system's master audio +	virtual void setMasterSystemAudioMute(bool mute); +	virtual bool getMasterSystemAudioMute();  protected:  	virtual bool restoreErrorTrap(); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index d6a7edee5b..acbd0db868 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -34,7 +34,9 @@  #include "llinstantmessage.h" +#include "llimview.h"  #include "llchathistory.h" +#include "llcommandhandler.h"  #include "llpanel.h"  #include "lluictrlfactory.h"  #include "llscrollcontainer.h" @@ -46,8 +48,14 @@  #include "llfloaterreg.h"  #include "llmutelist.h"  #include "llstylemap.h" +#include "llslurl.h"  #include "lllayoutstack.h"  #include "llagent.h" +#include "llnotificationsutil.h" +#include "lltoastnotifypanel.h" +#include "llviewerregion.h" +#include "llworld.h" +  #include "llsidetray.h"//for blocked objects panel @@ -55,6 +63,38 @@ static LLDefaultChildRegistry::Register<LLChatHistory> r("chat_history");  const static std::string NEW_LINE(rawstr_to_utf8("\n")); +// support for secondlife:///app/objectim/{UUID}/ SLapps +class LLObjectIMHandler : public LLCommandHandler +{ +public: +	// requests will be throttled from a non-trusted browser +	LLObjectIMHandler() : LLCommandHandler("objectim", UNTRUSTED_THROTTLE) {} + +	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) +	{ +		if (params.size() < 1) +		{ +			return false; +		} + +		LLUUID object_id; +		if (!object_id.set(params[0], FALSE)) +		{ +			return false; +		} + +		LLSD payload; +		payload["object_id"] = object_id; +		payload["owner_id"] = query_map["owner"]; +		payload["name"] = query_map["name"]; +		payload["slurl"] = query_map["slurl"]; +		payload["group_owned"] = query_map["groupowned"]; +		LLFloaterReg::showInstance("inspect_remote_object", payload); +		return true; +	} +}; +LLObjectIMHandler gObjectIMHandler; +  class LLChatHistoryHeader: public LLPanel  {  public: @@ -183,6 +223,7 @@ public:  	void setup(const LLChat& chat,const LLStyle::Params& style_params)   	{  		mAvatarID = chat.mFromID; +		mSessionID = chat.mSessionID;  		mSourceType = chat.mSourceType;  		gCacheName->get(mAvatarID, FALSE, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3, _4));  		if(chat.mFromID.isNull()) @@ -305,6 +346,11 @@ protected:  				menu->setItemEnabled("Remove Friend", false);  			} +			if (mSessionID == LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, mAvatarID)) +			{ +				menu->setItemVisible("Send IM", false); +			} +  			menu->buildDrawLabels();  			menu->updateParent(LLMenuGL::sMenuContainer);  			LLMenuGL::showPopup(this, menu, x, y); @@ -344,6 +390,7 @@ protected:  	std::string			mFirstName;  	std::string			mLastName;  	std::string			mFrom; +	LLUUID				mSessionID;  	S32					mMinUserNameWidth;  }; @@ -457,8 +504,9 @@ void LLChatHistory::clear()  	mLastFromID = LLUUID::null;  } -void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_chat_history, const LLStyle::Params& input_append_params) +void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LLStyle::Params& input_append_params)  { +	bool use_plain_text_chat_history = args["use_plain_text_chat_history"].asBoolean();  	if (!mEditor->scrolledToEnd() && chat.mFromID != gAgent.getID() && !chat.mFromName.empty())  	{  		mUnreadChatSources.insert(chat.mFromName); @@ -524,7 +572,28 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		if (utf8str_trim(chat.mFromName).size() != 0)  		{  			// Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text. -			if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() ) +			if ( chat.mSourceType == CHAT_SOURCE_OBJECT ) +			{ +				// for object IMs, create a secondlife:///app/objectim SLapp +				std::string url = LLSLURL::buildCommand("objectim", chat.mFromID, ""); +				url += "?name=" + chat.mFromName; +				url += "&owner=" + args["owner_id"].asString(); + +				LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent); +				if (region) +				{ +					S32 x, y, z; +					LLSLURL::globalPosToXYZ(LLVector3d(chat.mPosAgent), x, y, z); +					url += "&slurl=" + region->getName() + llformat("/%d/%d/%d", x, y, z); +				} + +				// set the link for the object name to be the objectim SLapp +				LLStyle::Params link_params(style_params); +				link_params.color.control = "HTMLLinkColor"; +				link_params.link_href = url; +				mEditor->appendText(chat.mFromName + delimiter, false, link_params); +			} +			else if ( chat.mFromName != SYSTEM_FROM && chat.mFromID.notNull() )  			{  				LLStyle::Params link_params(style_params);  				link_params.fillFrom(LLStyleMap::instance().lookupAgent(chat.mFromID)); @@ -588,8 +657,36 @@ void LLChatHistory::appendMessage(const LLChat& chat, const bool use_plain_text_  		mLastMessageTimeStr = chat.mTimeStr;  	} -	std::string message = irc_me ? chat.mText.substr(3) : chat.mText; -	mEditor->appendText(message, FALSE, style_params); +   if (chat.mNotifId.notNull()) +	{ +		LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId); +		if (notification != NULL) +		{ +			LLToastNotifyPanel* notify_box = new LLToastNotifyPanel( +					notification); +			notify_box->setFollowsLeft(); +			notify_box->setFollowsRight(); +			//Prepare the rect for the view +			LLRect target_rect = mEditor->getDocumentView()->getRect(); +			// squeeze down the widget by subtracting padding off left and right +			target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad(); +			target_rect.mRight -= mRightWidgetPad; +			notify_box->reshape(target_rect.getWidth(), +					notify_box->getRect().getHeight()); +			notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom); + +			LLInlineViewSegment::Params params; +			params.view = notify_box; +			params.left_pad = mLeftWidgetPad; +			params.right_pad = mRightWidgetPad; +			mEditor->appendWidget(params, "\n", false); +		} +	} +	else +	{ +		std::string message = irc_me ? chat.mText.substr(3) : chat.mText; +		mEditor->appendText(message, FALSE, style_params); +	}  	mEditor->blockUndo();  	// automatically scroll to end when receiving chat from myself diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h index c2c60e60cf..32600bb71d 100644 --- a/indra/newview/llchathistory.h +++ b/indra/newview/llchathistory.h @@ -113,11 +113,14 @@ class LLChatHistory : public LLUICtrl  		 * Appends a widget message.  		 * If last user appended message, concurs with current user,  		 * separator is added before the message, otherwise header is added. +		 * The args LLSD contains: +		 * - use_plain_text_chat_history (bool) - whether to add message as plain text. +		 * - owner_id (LLUUID) - the owner ID for object chat  		 * @param chat - base chat message. -		 * @param use_plain_text_chat_history  - whether to add message as plain text. +		 * @param args - additional arguments  		 * @param input_append_params - font style.  		 */ -		void appendMessage(const LLChat& chat, const bool use_plain_text_chat_history = false, const LLStyle::Params& input_append_params = LLStyle::Params()); +		void appendMessage(const LLChat& chat, const LLSD &args = LLSD(), const LLStyle::Params& input_append_params = LLStyle::Params());  		/*virtual*/ void clear();  		/*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp index 5c05a54120..a96981a108 100644 --- a/indra/newview/llcompilequeue.cpp +++ b/indra/newview/llcompilequeue.cpp @@ -92,7 +92,8 @@ struct LLScriptQueueData  // Default constructor  LLFloaterScriptQueue::LLFloaterScriptQueue(const LLSD& key) :  	LLFloater(key), -	mDone(FALSE) +	mDone(false), +	mMono(false)  {  	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_script_queue.xml", FALSE);  } @@ -216,7 +217,7 @@ BOOL LLFloaterScriptQueue::nextObject()  	} while((mObjectIDs.count() > 0) && !successful_start);  	if(isDone() && !mDone)  	{ -		mDone = TRUE; +		mDone = true;  		getChild<LLScrollListCtrl>("queue output")->setCommentText(getString("Done"));  		childSetEnabled("close",TRUE);  	} diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h index 063d573239..2d061f5d8a 100644 --- a/indra/newview/llcompilequeue.h +++ b/indra/newview/llcompilequeue.h @@ -104,10 +104,10 @@ protected:  	// Object Queue  	LLDynamicArray<LLUUID> mObjectIDs;  	LLUUID mCurrentObjectID; -	BOOL mDone; +	bool mDone;  	std::string mStartString; -	BOOL mMono; +	bool mMono;  };  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp index edfb9dc864..f096ba604f 100644 --- a/indra/newview/lleventnotifier.cpp +++ b/indra/newview/lleventnotifier.cpp @@ -174,6 +174,7 @@ void LLEventNotifier::remove(const U32 event_id)  LLEventNotification::LLEventNotification() :  	mEventID(0), +	mEventDate(0),  	mEventName("")  {  } diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index eef774426a..965ac1cad0 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -157,6 +157,7 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)  	mGeomIndex		= 0;  	mIndicesCount	= 0;  	mIndicesIndex	= 0; +	mIndexInTex = 0;  	mTexture		= NULL;  	mTEOffset		= -1; diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 0e42ff09d8..57e6619470 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -685,7 +685,7 @@ void LLFavoritesBarCtrl::updateButtons()  			{  				// an child's order  and mItems  should be same     				if (button->getLandmarkId() != item->getUUID() // sort order has been changed -					|| button->getLabelSelected() != item->getDisplayName() // favorite's name has been changed +					|| button->getLabelSelected() != item->getName() // favorite's name has been changed  					|| button->getRect().mRight < rightest_point) // favbar's width has been changed  				{  					break; @@ -780,7 +780,7 @@ LLButton* LLFavoritesBarCtrl::createButton(const LLPointer<LLViewerInventoryItem  	 * Empty space (or ...) is displaying instead of last symbols, even though the width of the button is enough.  	 * Problem will gone, if we  stretch out the button. For that reason I have to put additional  20 pixels.  	 */ -	int requred_width = mFont->getWidth(item->getDisplayName()) + 20; +	int requred_width = mFont->getWidth(item->getName()) + 20;  	int width = requred_width > def_button_width? def_button_width : requred_width;  	LLFavoriteLandmarkButton* fav_btn = NULL; diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp index fc8790c172..aea2de8e92 100644 --- a/indra/newview/llflexibleobject.cpp +++ b/indra/newview/llflexibleobject.cpp @@ -66,6 +66,7 @@ LLVolumeImplFlexible::LLVolumeImplFlexible(LLViewerObject* vo, LLFlexibleObjectD  	mInitializedRes = -1;  	mSimulateRes = 0;  	mFrameNum = 0; +	mCollisionSphereRadius = 0.f;  	mRenderRes = 1;  	if(mVO->mDrawable.notNull()) diff --git a/indra/newview/llfloateranimpreview.h b/indra/newview/llfloateranimpreview.h index dd2c0b809a..3ee1f419ab 100644 --- a/indra/newview/llfloateranimpreview.h +++ b/indra/newview/llfloateranimpreview.h @@ -127,7 +127,6 @@ protected:  	LLRectf				mPreviewImageRect;  	LLAssetID			mMotionID;  	LLTransactionID		mTransactionID; -	BOOL				mEnabled;  	LLAnimPauseRequest	mPauseRequest;  	std::map<std::string, LLUUID>	mIDList; diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index 5c3a54e34b..b2f700069f 100644 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -43,6 +43,7 @@  #include "llviewerregion.h"  #include "lscript_rt_interface.h"  #include "llviewercontrol.h" +#include "llviewerinventory.h"  #include "llviewerobject.h"  #include "llviewerregion.h"  #include "llresmgr.h" diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h index 31f4f5c3e1..bffcff7059 100644 --- a/indra/newview/llfloaterbulkpermission.h +++ b/indra/newview/llfloaterbulkpermission.h @@ -44,8 +44,6 @@  #include "llfloater.h"  #include "llscrolllistctrl.h" -#include "llviewerinventory.h" -  class LLFloaterBulkPermission : public LLFloater, public LLVOInventoryListener  {  	friend class LLFloaterReg; diff --git a/indra/newview/llfloaterchatterbox.cpp b/indra/newview/llfloaterchatterbox.cpp index 84b423399e..774caaec90 100644 --- a/indra/newview/llfloaterchatterbox.cpp +++ b/indra/newview/llfloaterchatterbox.cpp @@ -216,11 +216,11 @@ void LLFloaterChatterBox::onOpen(const LLSD& key)  	}  	else if (key.isDefined())  	{ -		LLFloaterIMPanel* impanel = gIMMgr->findFloaterBySession(key.asUUID()); +		/*LLFloaterIMPanel* impanel = gIMMgr->findFloaterBySession(key.asUUID());  		if (impanel)  		{  			impanel->openFloater(); -		} +		}*/  	}  } diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index de65c6f876..b684e1f985 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -367,7 +367,14 @@ void LLFloaterGesture::addGesture(const LLUUID& item_id , LLMultiGesture* gestur  		element["columns"][3]["font"]["name"] = "SANSSERIF";  		element["columns"][3]["font"]["style"] = font_style;  	} -	list->addElement(element, ADD_BOTTOM); + +	LLScrollListItem* sl_item = list->addElement(element, ADD_BOTTOM); +	if(sl_item) +	{ +		LLFontGL::StyleFlags style = LLGestureManager::getInstance()->isGestureActive(item_id) ? LLFontGL::BOLD : LLFontGL::NORMAL; +		// *TODO find out why ["font"]["style"] does not affect font style +		((LLScrollListText*)sl_item->getColumn(0))->setFontStyle(style); +	}  }  void LLFloaterGesture::getSelectedIds(std::vector<LLUUID>& ids) @@ -401,8 +408,7 @@ bool LLFloaterGesture::isActionEnabled(const LLSD& command)  		}  		return false;  	} -	else if("copy_uuid" == command_name || "edit_gesture" == command_name  -			|| "inspect" == command_name) +	else if("copy_uuid" == command_name || "edit_gesture" == command_name)  	{  		return	mGestureList->getAllSelected().size() == 1;  	} diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp index 31b494b590..b2564eb2b6 100644 --- a/indra/newview/llfloaterhardwaresettings.cpp +++ b/indra/newview/llfloaterhardwaresettings.cpp @@ -50,7 +50,17 @@  #include "llsliderctrl.h"  LLFloaterHardwareSettings::LLFloaterHardwareSettings(const LLSD& key) -  : LLFloater(key) +	: LLFloater(key), + +	  // these should be set on imminent refresh() call, +	  // but init them anyway +	  mUseVBO(0), +	  mUseAniso(0), +	  mFSAASamples(0), +	  mGamma(0.0), +	  mVideoCardMem(0), +	  mFogRatio(0.0), +	  mProbeHardwareOnStartup(FALSE)  {  	//LLUICtrlFactory::getInstance()->buildFloater(this, "floater_hardware_settings.xml");  } diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp index 06fe2a84c8..78bc63ac8c 100644 --- a/indra/newview/llfloaterjoystick.cpp +++ b/indra/newview/llfloaterjoystick.cpp @@ -52,6 +52,7 @@ LLFloaterJoystick::LLFloaterJoystick(const LLSD& data)  {  	//Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this, "floater_joystick.xml"); +	initFromSettings();  }  void LLFloaterJoystick::draw() @@ -123,10 +124,8 @@ void LLFloaterJoystick::apply()  {  } -void LLFloaterJoystick::refresh() +void LLFloaterJoystick::initFromSettings()  { -	LLFloater::refresh(); -  	mJoystickEnabled = gSavedSettings.getBOOL("JoystickEnabled");  	mJoystickAxis[0] = gSavedSettings.getS32("JoystickAxis0"); @@ -194,6 +193,12 @@ void LLFloaterJoystick::refresh()  	mFlycamFeathering = gSavedSettings.getF32("FlycamFeathering");  } +void LLFloaterJoystick::refresh() +{ +	LLFloater::refresh(); +	initFromSettings(); +} +  void LLFloaterJoystick::cancel()  {  	gSavedSettings.setBOOL("JoystickEnabled", mJoystickEnabled); diff --git a/indra/newview/llfloaterjoystick.h b/indra/newview/llfloaterjoystick.h index f3559c28e9..7a2f497c69 100644 --- a/indra/newview/llfloaterjoystick.h +++ b/indra/newview/llfloaterjoystick.h @@ -55,6 +55,8 @@ private:  	LLFloaterJoystick(const LLSD& data);  	virtual ~LLFloaterJoystick(); + +	void initFromSettings();  	static void onCommitJoystickEnabled(LLUICtrl*, void*);  	static void onClickRestoreSNDefaults(void*); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index e77c93b5f8..ef444c8ba4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1207,7 +1207,7 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im  	childEnable("log_nearby_chat");  	childEnable("log_instant_messages");  	childEnable("show_timestamps_check_im"); -	childEnable("log_path_string"); +	childDisable("log_path_string");// LineEditor becomes readonly in this case.  	childEnable("log_path_button");  	std::string display_email(email); diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 85353ce308..d54736e942 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -1521,11 +1521,6 @@ void LLPanelEstateInfo::onClickRemoveEstateManager(void* user_data)  //---------------------------------------------------------------------------  // Kick from estate methods  //--------------------------------------------------------------------------- -struct LLKickFromEstateInfo -{ -	LLPanelEstateInfo *mEstatePanelp; -	LLUUID      mAgentID; -};  void LLPanelEstateInfo::onClickKickUser()  { @@ -1547,11 +1542,6 @@ void LLPanelEstateInfo::onKickUserCommit(const std::vector<std::string>& names,  		return;  	} -	//keep track of what user they want to kick and other misc info -	LLKickFromEstateInfo *kick_info = new LLKickFromEstateInfo(); -	kick_info->mEstatePanelp = this; -	kick_info->mAgentID     = ids[0]; -  	//Bring up a confirmation dialog  	LLSD args;  	args["EVIL_USER"] = names[0]; diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index afb58c9407..94c7ff6f94 100644 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -1028,7 +1028,8 @@ class LLFloaterSnapshot::Impl  public:  	Impl()  	:	mAvatarPauseHandles(), -		mLastToolset(NULL) +		mLastToolset(NULL), +		mAspectRatioCheckOff(false)  	{  	}  	~Impl() @@ -1079,7 +1080,7 @@ public:  	LLToolset*	mLastToolset;  	LLHandle<LLView> mPreviewHandle; -	BOOL mAspectRatioCheckOff ; +	bool mAspectRatioCheckOff ;  };  // static @@ -1606,7 +1607,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde  	if(0 == index) //current window size  	{ -		view->impl.mAspectRatioCheckOff = TRUE ; +		view->impl.mAspectRatioCheckOff = true ;  		view->childSetEnabled("keep_aspect_check", FALSE) ;  		if(previewp) @@ -1616,7 +1617,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde  	}  	else if(-1 == index) //custom  	{ -		view->impl.mAspectRatioCheckOff = FALSE ; +		view->impl.mAspectRatioCheckOff = false ;  		//if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE != gSavedSettings.getS32("LastSnapshotType"))  		{  			view->childSetEnabled("keep_aspect_check", TRUE) ; @@ -1629,7 +1630,7 @@ void LLFloaterSnapshot::Impl::checkAspectRatio(LLFloaterSnapshot *view, S32 inde  	}  	else  	{ -		view->impl.mAspectRatioCheckOff = TRUE ; +		view->impl.mAspectRatioCheckOff = true ;  		view->childSetEnabled("keep_aspect_check", FALSE) ;  		if(previewp) diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 4b48626b22..b05eb84e52 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -40,7 +40,6 @@  #include "llinventoryfilter.h"  #include "llpanel.h"  #include "llviewercontrol.h"	// gSavedSettings -#include "llviewerinventory.h"  #include "llviewerwindow.h"		// Argh, only for setCursor()  // linden library includes diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index d6e2bb0445..3653371d76 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -75,11 +75,12 @@ public:  			return false;  		} +		//*TODO by what to replace showing groups floater?  		if (tokens[0].asString() == "list")  		{  			if (tokens[1].asString() == "show")  			{ -				LLFloaterReg::showInstance("contacts", "groups"); +				//LLFloaterReg::showInstance("contacts", "groups");  				return true;  			}              return false; diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 73597e7de3..c2bcb1cdf9 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -599,9 +599,20 @@ void LLIMFloater::updateMessages()  			LLChat chat;  			chat.mFromID = from_id; +			chat.mSessionID = mSessionID;  			chat.mFromName = from; -			chat.mText = message;  			chat.mTimeStr = time; + +			// process offer notification +			if (msg.has("notifiaction_id")) +			{ +				chat.mNotifId = msg["notifiaction_id"].asUUID(); +			} +			//process text message +			else +			{ +				chat.mText = message; +			}  			mChatHistory->appendMessage(chat, use_plain_text_chat_history);  			mLastMessageIndex = msg["index"].asInteger(); @@ -609,6 +620,13 @@ void LLIMFloater::updateMessages()  	}  } +void LLIMFloater::reloadMessages() +{ +	mChatHistory->clear(); +	mLastMessageIndex = -1; +	updateMessages(); +} +  // static  void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void* userdata )  { diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 0ca0325451..9552b30737 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -80,6 +80,7 @@ public:  	// get new messages from LLIMModel  	void updateMessages(); +	void reloadMessages();  	static void onSendMsg( LLUICtrl*, void*);  	void sendMsg(); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index c4b1d7a9f4..80d2778934 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -52,7 +52,6 @@  #include "llbottomtray.h"  #include "llcallingcard.h"  #include "llchat.h" -#include "llfloaterchatterbox.h"  #include "llimfloater.h"  #include "llgroupiconctrl.h"  #include "llmd5.h" @@ -64,6 +63,7 @@  #include "llnotificationsutil.h"  #include "llnearbychat.h"  #include "llspeakers.h" //for LLIMSpeakerMgr +#include "lltextbox.h"  #include "lltextutil.h"  #include "llviewercontrol.h"  #include "llviewerparcelmgr.h" @@ -538,13 +538,6 @@ void LLIMModel::processSessionInitializedReply(const LLUUID& old_session_id, con  			gIMMgr->startCall(new_session_id);  		}  	} - -	//*TODO remove this "floater" stuff when Communicate Floater is gone -	LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(old_session_id); -	if (floater) -	{ -		floater->sessionInitReplyReceived(new_session_id); -	}  }  void LLIMModel::testMessages() @@ -679,15 +672,6 @@ bool LLIMModel::proccessOnlineOfflineNotification(  	const LLUUID& session_id,   	const std::string& utf8_text)  { -	// Add message to old one floater -	LLFloaterIMPanel *floater = gIMMgr->findFloaterBySession(session_id); -	if ( floater ) -	{ -		if ( !utf8_text.empty() ) -		{ -			floater->addHistoryLine(utf8_text, LLUIColorTable::instance().getColor("SystemChatColor")); -		} -	}  	// Add system message to history  	return addMessage(session_id, SYSTEM_FROM, LLUUID::null, utf8_text);  } @@ -955,9 +939,6 @@ void LLIMModel::sendMessage(const std::string& utf8_text,  		history_echo += ": " + utf8_text; -		LLFloaterIMPanel* floater = gIMMgr->findFloaterBySession(im_session_id); -		if (floater) floater->addHistoryLine(history_echo, LLUIColorTable::instance().getColor("IMChatColor"), true, gAgent.getID()); -  		LLIMSpeakerMgr* speaker_mgr = LLIMModel::getInstance()->getSpeakerManager(im_session_id);  		if (speaker_mgr)  		{ @@ -1275,33 +1256,16 @@ LLUUID LLIMMgr::computeSessionID(  	return session_id;  } -inline LLFloater* getFloaterBySessionID(const LLUUID session_id) -{ -	LLFloater* floater = NULL; -	if ( gIMMgr ) -	{ -		floater = dynamic_cast < LLFloater* > -			( gIMMgr->findFloaterBySession(session_id) ); -	} -	if ( !floater ) -	{ -		floater = dynamic_cast < LLFloater* > -			( LLIMFloater::findInstance(session_id) ); -	} -	return floater; -} -  void  LLIMMgr::showSessionStartError(  	const std::string& error_string,  	const LLUUID session_id)  { -	const LLFloater* floater = getFloaterBySessionID (session_id); -	if (!floater) return; +	if (!hasSession(session_id)) return;  	LLSD args;  	args["REASON"] = LLTrans::getString(error_string); -	args["RECIPIENT"] = floater->getTitle(); +	args["RECIPIENT"] = LLIMModel::getInstance()->getName(session_id);  	LLSD payload;  	payload["session_id"] = session_id; @@ -1339,12 +1303,11 @@ LLIMMgr::showSessionForceClose(  	const std::string& reason_string,  	const LLUUID session_id)  { -	const LLFloater* floater = getFloaterBySessionID (session_id); -	if (!floater) return; +	if (!hasSession(session_id)) return;  	LLSD args; -	args["NAME"] = floater->getTitle(); +	args["NAME"] = LLIMModel::getInstance()->getName(session_id);  	args["REASON"] = LLTrans::getString(reason_string);  	LLSD payload; @@ -1366,7 +1329,7 @@ LLIMMgr::onConfirmForceCloseError(  	//only 1 option really  	LLUUID session_id = notification["payload"]["session_id"]; -	LLFloater* floater = getFloaterBySessionID (session_id); +	LLFloater* floater = LLIMFloater::findInstance(session_id);  	if ( floater )  	{  		floater->closeFloater(FALSE); @@ -1498,9 +1461,11 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // Class LLCallDialog  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -LLCallDialog::LLCallDialog(const LLSD& payload) : -LLDockableFloater(NULL, false, payload), -mPayload(payload) +LLCallDialog::LLCallDialog(const LLSD& payload) +	: LLDockableFloater(NULL, false, payload), + +	  mPayload(payload), +	  mLifetime(DEFAULT_LIFETIME)  {  } @@ -2112,8 +2077,7 @@ bool inviteUserResponse(const LLSD& notification, const LLSD& response)  // Member Functions  // -LLIMMgr::LLIMMgr() : -	mIMReceived(FALSE) +LLIMMgr::LLIMMgr()  {  	mPendingInvitations = LLSD::emptyMap();  	mPendingAgentListUpdates = LLSD::emptyMap(); @@ -2144,7 +2108,6 @@ void LLIMMgr::addMessage(  		return;  	} -	LLFloaterIMPanel* floater;  	LLUUID new_session_id = session_id;  	if (new_session_id.isNull())  	{ @@ -2163,32 +2126,7 @@ void LLIMMgr::addMessage(  	if (new_session)  	{  		LLIMModel::getInstance()->newSession(new_session_id, fixed_session_name, dialog, other_participant_id); -	} - -	floater = findFloaterBySession(new_session_id); -	if (!floater) -	{ -		floater = findFloaterBySession(other_participant_id); -		if (floater) -		{ -			llinfos << "found the IM session " << session_id  -				<< " by participant " << other_participant_id << llendl; -		} -	} - -	// create IM window as necessary -	if(!floater) -	{ -		floater = createFloater( -			new_session_id, -			other_participant_id, -			fixed_session_name, -			dialog, -			FALSE); -	} -	if (new_session) -	{  		// When we get a new IM, and if you are a god, display a bit  		// of information about the source. This is to help liaisons  		// when answering questions. @@ -2207,50 +2145,13 @@ void LLIMMgr::addMessage(  			//<< "*** region_id: " << region_id << std::endl  			//<< "*** position: " << position << std::endl; -			floater->addHistoryLine(bonus_info.str(), LLUIColorTable::instance().getColor("SystemChatColor"));  			LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, bonus_info.str());  		}  		make_ui_sound("UISndNewIncomingIMSession");  	} -	// now add message to floater -	bool is_from_system = target_id.isNull() || (from == SYSTEM_FROM); -	const LLColor4& color = ( is_from_system ?  -							  LLUIColorTable::instance().getColor("SystemChatColor") :  -							  LLUIColorTable::instance().getColor("IMChatColor")); -	if ( !link_name ) -	{ -		floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally -	} -	else -	{ -		floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message -	} -  	LLIMModel::instance().addMessage(new_session_id, from, other_participant_id, msg); - -	if( !LLFloaterReg::instanceVisible("communicate") && !floater->getVisible()) -	{ -		LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(); -		 -		//if the IM window is not open and the floater is not visible (i.e. not torn off) -		LLFloater* previouslyActiveFloater = chat_floater->getActiveFloater(); - -		// select the newly added floater (or the floater with the new line added to it). -		// it should be there. -		chat_floater->selectFloater(floater); - -		//there was a previously unseen IM, make that old tab flashing -		//it is assumed that the most recently unseen IM tab is the one current selected/active -		if ( previouslyActiveFloater && getIMReceived() ) -		{ -			chat_floater->setFloaterFlashing(previouslyActiveFloater, TRUE); -		} - -		//notify of a new IM -		notifyNewIM(); -	}  }  void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& message_name, const LLSD& args) @@ -2283,14 +2184,6 @@ void LLIMMgr::addSystemMessage(const LLUUID& session_id, const std::string& mess  	}  } -void LLIMMgr::notifyNewIM() -{ -	if(!LLFloaterReg::instanceVisible("communicate")) -	{ -		mIMReceived = TRUE; -	} -} -  S32 LLIMMgr::getNumberOfUnreadIM()  {  	std::map<LLUUID, LLIMModel::LLIMSession*>::iterator it; @@ -2317,16 +2210,6 @@ S32 LLIMMgr::getNumberOfUnreadParticipantMessages()  	return num;  } -void LLIMMgr::clearNewIMNotification() -{ -	mIMReceived = FALSE; -} - -BOOL LLIMMgr::getIMReceived() const -{ -	return mIMReceived; -} -  void LLIMMgr::autoStartCallOnStartup(const LLUUID& session_id)  {  	LLIMModel::LLIMSession *session = LLIMModel::getInstance()->findIMSession(session_id); @@ -2414,21 +2297,6 @@ LLUUID LLIMMgr::addSession(  		LLIMModel::getInstance()->newSession(session_id, name, dialog, other_participant_id, ids, voice);  	} -	//*TODO remove this "floater" thing when Communicate Floater's gone -	LLFloaterIMPanel* floater = findFloaterBySession(session_id); -	if(!floater) -	{ -		// On creation, use the first element of ids as the -		// "other_participant_id" -		floater = createFloater( -			session_id, -			other_participant_id, -			name, -			dialog, -			TRUE, -			ids); -	} -  	//we don't need to show notes about online/offline, mute/unmute users' statuses for existing sessions  	if (!new_session) return session_id; @@ -2439,7 +2307,7 @@ LLUUID LLIMMgr::addSession(  	// Only warn for regular IMs - not group IMs  	if( dialog == IM_NOTHING_SPECIAL )  	{ -		noteMutedUsers(session_id, floater, ids); +		noteMutedUsers(session_id, ids);  	}  	return session_id; @@ -2460,14 +2328,6 @@ void LLIMMgr::removeSession(const LLUUID& session_id)  {  	llassert_always(hasSession(session_id)); -	//*TODO remove this floater thing when Communicate Floater is being deleted (IB) -	LLFloaterIMPanel* floater = findFloaterBySession(session_id); -	if(floater) -	{ -		mFloaters.erase(floater->getHandle()); -		LLFloaterChatterBox::getInstance()->removeFloater(floater); -	} -  	clearPendingInvitation(session_id);  	clearPendingAgentListUpdates(session_id); @@ -2577,50 +2437,12 @@ void LLIMMgr::onInviteNameLookup(LLSD payload, const LLUUID& id, const std::stri  	LLFloaterReg::showInstance("incoming_call", payload, TRUE);  } +//*TODO disconnects all sessions  void LLIMMgr::disconnectAllSessions()  { -	LLFloaterIMPanel* floater = NULL; -	std::set<LLHandle<LLFloater> >::iterator handle_it; -	for(handle_it = mFloaters.begin(); -		handle_it != mFloaters.end(); -		) -	{ -		floater = (LLFloaterIMPanel*)handle_it->get(); - -		// MUST do this BEFORE calling floater->onClose() because that may remove the item from the set, causing the subsequent increment to crash. -		++handle_it; - -		if (floater) -		{ -			floater->setEnabled(FALSE); -			floater->closeFloater(TRUE); -		} -	} -} - - -// This method returns the im panel corresponding to the uuid -// provided. The uuid can either be a session id or an agent -// id. Returns NULL if there is no matching panel. -LLFloaterIMPanel* LLIMMgr::findFloaterBySession(const LLUUID& session_id) -{ -	LLFloaterIMPanel* rv = NULL; -	std::set<LLHandle<LLFloater> >::iterator handle_it; -	for(handle_it = mFloaters.begin(); -		handle_it != mFloaters.end(); -		++handle_it) -	{ -		rv = (LLFloaterIMPanel*)handle_it->get(); -		if(rv && session_id == rv->getSessionID()) -		{ -			break; -		} -		rv = NULL; -	} -	return rv; +	//*TODO disconnects all IM sessions  } -  BOOL LLIMMgr::hasSession(const LLUUID& session_id)  {  	return LLIMModel::getInstance()->findIMSession(session_id) != NULL; @@ -2804,49 +2626,14 @@ bool LLIMMgr::isVoiceCall(const LLUUID& session_id)  	return im_session->mStartedAsIMCall;  } -// create a floater and update internal representation for -// consistency. Returns the pointer, caller (the class instance since -// it is a private method) is not responsible for deleting the -// pointer.  Add the floater to this but do not select it. -LLFloaterIMPanel* LLIMMgr::createFloater( -	const LLUUID& session_id, -	const LLUUID& other_participant_id, -	const std::string& session_label, -	EInstantMessage dialog, -	BOOL user_initiated, -	const LLDynamicArray<LLUUID>& ids) -{ -	if (session_id.isNull()) -	{ -		llwarns << "Creating LLFloaterIMPanel with null session ID" << llendl; -	} - -	llinfos << "LLIMMgr::createFloater: from " << other_participant_id  -			<< " in session " << session_id << llendl; -	LLFloaterIMPanel* floater = new LLFloaterIMPanel(session_label, -													 session_id, -													 other_participant_id, -													 ids, -													 dialog); -	LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END; -	LLFloaterChatterBox::getInstance()->addFloater(floater, FALSE, i_pt); -	mFloaters.insert(floater->getHandle()); -	return floater; -} -  void LLIMMgr::noteOfflineUsers(  	const LLUUID& session_id, -	LLFloaterIMPanel* floater,  	const LLDynamicArray<LLUUID>& ids)  {  	S32 count = ids.count();  	if(count == 0)  	{  		const std::string& only_user = LLTrans::getString("only_user_message"); -		if (floater) -		{ -			floater->addHistoryLine(only_user, LLUIColorTable::instance().getColor("SystemChatColor")); -		}  		LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, only_user);  	}  	else @@ -2870,7 +2657,7 @@ void LLIMMgr::noteOfflineUsers(  	}  } -void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater, +void LLIMMgr::noteMutedUsers(const LLUUID& session_id,  								  const LLDynamicArray<LLUUID>& ids)  {  	// Don't do this if we don't have a mute list. @@ -2891,9 +2678,6 @@ void LLIMMgr::noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* floater  			{  				LLUIString muted = LLTrans::getString("muted_message"); -				//*TODO remove this "floater" thing when Communicate Floater's gone -				floater->addHistoryLine(muted); -  				im_model->addMessage(session_id, SYSTEM_FROM, LLUUID::null, muted);  				break;  			} @@ -2914,12 +2698,6 @@ void LLIMMgr::processIMTypingStop(const LLIMInfo* im_info)  void LLIMMgr::processIMTypingCore(const LLIMInfo* im_info, BOOL typing)  {  	LLUUID session_id = computeSessionID(im_info->mIMType, im_info->mFromID); -	LLFloaterIMPanel* floater = findFloaterBySession(session_id); -	if (floater) -	{ -		floater->processIMTyping(im_info, typing); -	} -  	LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);  	if ( im_floater )  	{ @@ -2965,15 +2743,6 @@ public:  				speaker_mgr->updateSpeakers(gIMMgr->getPendingAgentListUpdates(session_id));  			} -			LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(session_id); -			if (floaterp) -			{ -				if ( body.has("session_info") ) -				{ -					floaterp->processSessionUpdate(body["session_info"]); -				} -			} -  			LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);  			if ( im_floater )  			{ @@ -3068,11 +2837,6 @@ public:  		const LLSD& input) const  	{  		LLUUID session_id = input["body"]["session_id"].asUUID(); -		LLFloaterIMPanel* floaterp = gIMMgr->findFloaterBySession(session_id); -		if (floaterp) -		{ -			floaterp->processSessionUpdate(input["body"]["info"]); -		}  		LLIMFloater* im_floater = LLIMFloater::findInstance(session_id);  		if ( im_floater )  		{ diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 0386ff234d..b573490fa3 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -39,9 +39,8 @@  #include "lllogchat.h"  #include "llvoicechannel.h" -class LLFloaterChatterBox; -class LLUUID; -class LLFloaterIMPanel; + +  class LLFriendObserver;  class LLCallDialogManager;	  class LLIMSpeakerMgr; @@ -361,15 +360,9 @@ public:  	void processIMTypingStart(const LLIMInfo* im_info);  	void processIMTypingStop(const LLIMInfo* im_info); -	void notifyNewIM(); -	void clearNewIMNotification(); -  	// automatically start a call once the session has initialized  	void autoStartCallOnStartup(const LLUUID& session_id); -	// IM received that you haven't seen yet -	BOOL getIMReceived() const; -  	// Calc number of all unread IMs  	S32 getNumberOfUnreadIM(); @@ -386,11 +379,6 @@ public:  	BOOL hasSession(const LLUUID& session_id); -	// This method returns the im panel corresponding to the uuid -	// provided. The uuid must be a session id. Returns NULL if there -	// is no matching panel. -	LLFloaterIMPanel* findFloaterBySession(const LLUUID& session_id); -  	static LLUUID computeSessionID(EInstantMessage dialog, const LLUUID& other_participant_id);  	void clearPendingInvitation(const LLUUID& session_id); @@ -402,10 +390,6 @@ public:  		const LLSD& updates);  	void clearPendingAgentListUpdates(const LLUUID& session_id); -	//HACK: need a better way of enumerating existing session, or listening to session create/destroy events -	//@deprecated, is used only by LLToolBox, which is not used anywhere, right? (IB) -	const std::set<LLHandle<LLFloater> >& getIMFloaterHandles() { return mFloaters; } -  	void addSessionObserver(LLIMSessionObserver *);  	void removeSessionObserver(LLIMSessionObserver *); @@ -436,23 +420,12 @@ private:  	 */  	void removeSession(const LLUUID& session_id); -	// create a panel and update internal representation for -	// consistency. Returns the pointer, caller (the class instance -	// since it is a private method) is not responsible for deleting -	// the pointer. -	LLFloaterIMPanel* createFloater(const LLUUID& session_id, -									const LLUUID& target_id, -									const std::string& name, -									EInstantMessage dialog, -									BOOL user_initiated = FALSE,  -									const LLDynamicArray<LLUUID>& ids = LLDynamicArray<LLUUID>()); -  	// This simple method just iterates through all of the ids, and  	// prints a simple message if they are not online. Used to help  	// reduce 'hello' messages to the linden employees unlucky enough  	// to have their calling card in the default inventory. -	void noteOfflineUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); -	void noteMutedUsers(const LLUUID& session_id, LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); +	void noteOfflineUsers(const LLUUID& session_id, const LLDynamicArray<LLUUID>& ids); +	void noteMutedUsers(const LLUUID& session_id, const LLDynamicArray<LLUUID>& ids);  	void processIMTypingCore(const LLIMInfo* im_info, BOOL typing); @@ -464,15 +437,9 @@ private:  private: -	//*TODO should be deleted when Communicate Floater is being deleted -	std::set<LLHandle<LLFloater> > mFloaters; -  	typedef std::list <LLIMSessionObserver *> session_observers_list_t;  	session_observers_list_t mSessionObservers; -	// An IM has been received that you haven't seen yet. -	BOOL mIMReceived; -  	LLSD mPendingInvitations;  	LLSD mPendingAgentListUpdates;  }; diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp index e4d2eec242..898f1cd9ac 100644 --- a/indra/newview/llinspectremoteobject.cpp +++ b/indra/newview/llinspectremoteobject.cpp @@ -31,17 +31,16 @@  #include "llviewerprecompiledheaders.h" +#include "llfloaterreg.h"  #include "llinspectremoteobject.h"  #include "llinspect.h" -#include "llslurl.h"  #include "llmutelist.h" -#include "llurlaction.h"  #include "llpanelblockedlist.h" -#include "llfloaterreg.h" +#include "llslurl.h" +#include "lltrans.h"  #include "llui.h"  #include "lluictrl.h" - -class LLViewerObject; +#include "llurlaction.h"  //////////////////////////////////////////////////////////////////////////////  // LLInspectRemoteObject @@ -183,11 +182,25 @@ void LLInspectRemoteObject::update()  			owner = LLSLURL::buildCommand("agent", mOwnerID, "about");  		}  	} +	else +	{ +		owner = LLTrans::getString("Unknown"); +	}  	getChild<LLUICtrl>("object_owner")->setValue(owner);  	// display the object's SLurl - click it to teleport -	std::string url = "secondlife:///app/teleport/" + mSLurl; +	std::string url; +	if (! mSLurl.empty()) +	{ +		std::string url = "secondlife:///app/teleport/" + mSLurl; +	}  	getChild<LLUICtrl>("object_slurl")->setValue(url); + +	// disable the Map button if we don't have a SLurl +	getChild<LLUICtrl>("map_btn")->setEnabled(! mSLurl.empty()); + +	// disable the Block button if we don't have the owner ID +	getChild<LLUICtrl>("block_btn")->setEnabled(! mOwnerID.isNull());  }  ////////////////////////////////////////////////////////////////////////////// diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 6c9c7d15be..e04d3ec5a0 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -5079,7 +5079,7 @@ void	LLLandmarkBridgeAction::doIt()  		payload["asset_id"] = item->getAssetUUID();		  		LLSD args;  -		args["LOCATION"] = item->getDisplayName();  +		args["LOCATION"] = item->getName();   		LLNotificationsUtil::add("TeleportFromLandmark", args, payload);  	} diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 759d0cba18..eeb8246b11 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -320,8 +320,12 @@ public:  	LLViewerInventoryCategory* getCategory() const;  protected: -	LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) : -		LLInvFVBridge(inventory, uuid), mCallingCards(FALSE), mWearables(FALSE) {} +	LLFolderBridge(LLInventoryPanel* inventory, const LLUUID& uuid) +		: LLInvFVBridge(inventory, uuid), + +		mCallingCards(FALSE), +		mWearables(FALSE), +		mMenu(NULL) {}  	// menu callbacks  	static void pasteClipboard(void* user_data); diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index b4dcb566e4..cd20d64ca8 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -39,7 +39,6 @@  #include "llfolderviewitem.h"  #include "llinventorymodel.h"	// gInventory.backgroundFetchActive()  #include "llviewercontrol.h" -#include "llviewerinventory.h"  #include "llfolderview.h"  // linden library includes diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 2885ba13fa..33623539e9 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -76,7 +76,6 @@  #include "lltabcontainer.h"  #include "lltooldraganddrop.h"  #include "lluictrlfactory.h" -#include "llviewerinventory.h"  #include "llviewermessage.h"  #include "llviewerobjectlist.h"  #include "llviewerregion.h" diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 961f7adc0a..bdf1ebddac 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -142,6 +142,105 @@ bool LLCanCache::operator()(LLInventoryCategory* cat, LLInventoryItem* item)  	return rv;  } +/* +This namespace contains a functionality to remove LM prefixes were used to store sort order of +Favorite Landmarks in landmarks' names. +Once being in Favorites folder LM inventory Item has such prefix. +Due to another solution is implemented in EXT-3985 these prefixes should be removed. + +*NOTE: It will be unnecessary after the first successful session in viewer 2.0. +Can be removed before public release. + +Implementation details: +At the first run with this patch it patches all cached landmarks: removes LM sort prefixes and +updates them on the viewer and server sides. +Also it calls fetching agent's inventory to process not yet loaded landmarks too. +If fetching is successfully done it will store special per-agent empty file-marker +in the user temporary folder (where cached inventory is loaded) while caching agent's inventory. +After that in will not affect the viewer until cached marker is removed. +*/ +namespace LMSortPrefix +{ +	bool cleanup_done = false; +	const std::string getMarkerPath() +	{ +		std::string path(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, gAgentID.asString())); +		std::string marker_filename = llformat("%s-lm_prefix_marker", path.c_str()); + +		return marker_filename; +	} +	bool wasClean() +	{ +		static bool was_clean = false; +		static bool already_init = false; +		if (already_init) return was_clean; + +		already_init = true; +		std::string path_to_marker = getMarkerPath(); +		was_clean = LLFile::isfile(path_to_marker); + +		return was_clean; +	} + +	void setLandmarksWereCleaned() +	{ +		if (cleanup_done) +		{ +			std::string path_to_marker = getMarkerPath(); +			LLFILE* file = LLFile::fopen(path_to_marker, "w"); +			if(!file) +			{ +				llwarns << "unable to save marker that LM prefixes were removed: " << path_to_marker << llendl; +				return; +			} + +			fclose(file); +		} +	} + +	void removePrefix(LLPointer<LLViewerInventoryItem> inv_item) +	{ +		if (wasClean()) +		{ +			LL_INFOS_ONCE("") << "Inventory was cleaned for this avatar. Patch can be removed." << LL_ENDL; +			return; +		} + +		if (LLInventoryType::IT_LANDMARK != inv_item->getInventoryType()) return; + +		std::string old_name = inv_item->getName(); + +		S32 sort_field = -1; +		std::string display_name; +		BOOL exists = LLViewerInventoryItem::extractSortFieldAndDisplayName(old_name, &sort_field, &display_name); +		if (exists && sort_field != -1) +		{ +			llinfos << "Removing Landmark sort field and separator for: " << old_name << " | " << inv_item->getUUID() << llendl; +			LLUUID parent_uuid = inv_item->getParentUUID(); +			if (gInventory.getCategory(parent_uuid)) +			{ +				llinfos << "parent folder is: " << gInventory.getCategory(parent_uuid)->getName() << llendl; +			} + + +			// mark item completed to avoid error while copying and updating server +			inv_item->setComplete(TRUE); +			LLPointer<LLViewerInventoryItem> new_item = new LLViewerInventoryItem(inv_item.get()); +			new_item->rename(display_name); +			gInventory.updateItem(new_item); +			new_item->updateServer(FALSE); + +			gInventory.notifyObservers(); +		} +	} + +	void completeCleanup() +	{ +		// background fetch is completed. can save marker +		cleanup_done = true; +	} +} +  ///----------------------------------------------------------------------------  /// Class LLInventoryModel  ///---------------------------------------------------------------------------- @@ -1736,6 +1835,8 @@ void LLInventoryModel::stopBackgroundFetch()  		gIdleCallbacks.deleteFunction(&LLInventoryModel::backgroundFetch, NULL);  		sBulkFetchCount=0;  		sMinTimeBetweenFetches=0.0f; + +		LMSortPrefix::completeCleanup();  	}  } @@ -1882,6 +1983,13 @@ void LLInventoryModel::cache(  	const LLUUID& parent_folder_id,  	const LLUUID& agent_id)  { +	if (getRootFolderID() == parent_folder_id) +	{ +		// *TODO: mantipov: can be removed before public release, EXT-3985 +		//save marker to avoid fetching inventory on future sessions +		LMSortPrefix::setLandmarksWereCleaned(); +	} +  	lldebugs << "Caching " << parent_folder_id << " for " << agent_id  			 << llendl;  	LLViewerInventoryCategory* root_cat = getCategory(parent_folder_id); @@ -2692,6 +2800,28 @@ void LLInventoryModel::buildParentChildMap()  			// The inv tree is built.  			mIsAgentInvUsable = true; +			{// *TODO: mantipov: can be removed before public release, EXT-3985 +				/* +				*HACK: mantipov: to cleanup landmarks were marked with sort index prefix in name. +				Is necessary to be called once per account after EXT-3985 is implemented. +				So, let fetch agent's inventory, processing will be done in processInventoryDescendents() +				Should be removed before public release. +				*/ +				if (!LMSortPrefix::wasClean()) +				{ +					cat_array_t cats; +					item_array_t items; +					collectDescendents(agent_inv_root_id, cats, items, INCLUDE_TRASH); + +					for (item_array_t::const_iterator it= items.begin(); it != items.end(); ++it) +					{ +						LMSortPrefix::removePrefix(*it); +					} + +					gInventory.startBackgroundFetch(agent_inv_root_id); +				} +			} +  			llinfos << "Inventory initialized, notifying observers" << llendl;  			addChangedMask(LLInventoryObserver::ALL, LLUUID::null);  			notifyObservers(); @@ -3457,6 +3587,10 @@ void LLInventoryModel::processInventoryDescendents(LLMessageSystem* msg,void**)  			continue;  		}  		gInventory.updateItem(titem); + +		{// *TODO: mantipov: can be removed before public release, EXT-3985 +			LMSortPrefix::removePrefix(titem); +		}  	}  	// set version and descendentcount according to message. diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 7e71ac90b4..12a2c370d2 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -759,7 +759,9 @@ bool LLInventoryPanel::beginIMSession()  				S32 count = item_array.count();  				if(count > 0)  				{ -					LLFloaterReg::showInstance("communicate"); +					//*TODO by what to replace that? +					//LLFloaterReg::showInstance("communicate"); +  					// create the session  					LLAvatarTracker& at = LLAvatarTracker::instance();  					LLUUID id; diff --git a/indra/newview/lllocaltextureobject.cpp b/indra/newview/lllocaltextureobject.cpp index 6bcbe6f58c..69eb5fce2f 100644 --- a/indra/newview/lllocaltextureobject.cpp +++ b/indra/newview/lllocaltextureobject.cpp @@ -47,7 +47,9 @@ LLLocalTextureObject::LLLocalTextureObject() :  	mImage = NULL;  } -LLLocalTextureObject::LLLocalTextureObject(LLViewerFetchedTexture* image, const LLUUID& id) +LLLocalTextureObject::LLLocalTextureObject(LLViewerFetchedTexture* image, const LLUUID& id) : +	mIsBakedReady(FALSE), +	mDiscard(MAX_DISCARD_LEVEL+1)  {  	mImage = image;  	gGL.getTexUnit(0)->bind(mImage); diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp index ae1b8f8540..df93930d33 100644 --- a/indra/newview/lllocationhistory.cpp +++ b/indra/newview/lllocationhistory.cpp @@ -50,18 +50,19 @@ void LLLocationHistory::addItem(const LLLocationHistoryItem& item) {  	// check if this item doesn't duplicate any existing one  	location_list_t::iterator item_iter = std::find(mItems.begin(), mItems.end(),item); -	if(item_iter != mItems.end()){ +	if(item_iter != mItems.end()) // if it already exists, erase the old one +	{  		mItems.erase(item_iter);	  	}  	mItems.push_back(item); -	// If the vector size exceeds the maximum, purge the oldest items. -	if ((S32)mItems.size() > max_items) { -		for(location_list_t::iterator i = mItems.begin(); i != mItems.end()-max_items; ++i) { -				mItems.erase(i); -		} +	// If the vector size exceeds the maximum, purge the oldest items (at the start of the mItems vector). +	if ((S32)mItems.size() > max_items) +	{ +		mItems.erase(mItems.begin(), mItems.end()-max_items);  	} +	llassert((S32)mItems.size() <= max_items);  }  /* diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 7f49a7defb..050cfcc3d9 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -39,6 +39,7 @@  #include "llbutton.h"  #include "llfocusmgr.h"  #include "llmenugl.h" +#include "llparcel.h"  #include "llstring.h"  #include "lltrans.h"  #include "lluictrlfactory.h" @@ -672,11 +673,12 @@ void LLLocationInputCtrl::refreshParcelIcons()  	if (show_properties)  	{  		LLViewerParcelMgr* vpm = LLViewerParcelMgr::getInstance(); -		bool allow_buy      = vpm->canAgentBuyParcel( vpm->getAgentParcel(), false); +		LLParcel* agent_parcel = vpm->getAgentParcel(); +		bool allow_buy      = vpm->canAgentBuyParcel( agent_parcel, false);  		bool allow_voice	= vpm->allowAgentVoice();  		bool allow_fly		= vpm->allowAgentFly();  		bool allow_push		= vpm->allowAgentPush(); -		bool allow_build	= vpm->allowAgentBuild(); +		bool allow_build	= agent_parcel && agent_parcel->getAllowModify(); // true when anyone is allowed to build. See EXT-4610.  		bool allow_scripts	= vpm->allowAgentScripts();  		bool allow_damage	= vpm->allowAgentDamage(); diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 84a5eb7352..ee3ffa2450 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -180,6 +180,7 @@ LLManipScale::LLManipScale( LLToolComposite* composite )  	mScaleSnapUnit2(1.f),  	mSnapRegimeOffset(0.f),  	mSnapGuideLength(0.f), +	mInSnapRegime(FALSE),  	mScaleSnapValue(0.f)  {   	mManipulatorScales = new F32[NUM_MANIPULATORS]; diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp index 5f30ab4e01..52fe31fbba 100644 --- a/indra/newview/llmaniptranslate.cpp +++ b/indra/newview/llmaniptranslate.cpp @@ -123,9 +123,13 @@ LLManipTranslate::LLManipTranslate( LLToolComposite* composite )  	mAxisArrowLength(50),  	mConeSize(0),  	mArrowLengthMeters(0.f), +	mGridSizeMeters(1.f),  	mPlaneManipOffsetMeters(0.f),  	mUpdateTimer(),  	mSnapOffsetMeters(0.f), +	mSubdivisions(10.f), +	mInSnapRegime(FALSE), +	mSnapped(FALSE),  	mArrowScales(1.f, 1.f, 1.f),  	mPlaneScales(1.f, 1.f, 1.f),  	mPlaneManipPositions(1.f, 1.f, 1.f, 1.f) diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 5981baab60..4bf2bac649 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -651,6 +651,9 @@ void LLPanelStandStopFlying::reparent(LLFloaterMove* move_view)  		// Detach from movement controls.   		parent->removeChild(this);  		mOriginalParent.get()->addChild(this); +		// update parent with self visibility (it is changed in setVisible()). EXT-4743 +		mOriginalParent.get()->setVisible(getVisible()); +  		mAttached = false;  		updatePosition(); // don't defer until next draw() to avoid flicker  	} diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index c1666f5666..2d3c4b187e 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -58,7 +58,6 @@  #include "llagent.h"  #include "llviewergenericmessage.h"	// for gGenericDispatcher  #include "llworld.h" //for particle system banning -#include "llimpanel.h"  #include "llimview.h"  #include "llnotifications.h"  #include "llviewerobjectlist.h" @@ -472,12 +471,6 @@ void notify_automute_callback(const LLUUID& agent_id, const std::string& first_n  		if (reason == LLMuteList::AR_IM)  		{ -			LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id); -			if (timp) -			{ -				timp->addHistoryLine(message); -			} -  			LLIMModel::getInstance()->addMessage(agent_id, SYSTEM_FROM, LLUUID::null, message);  		}  	} diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 0a8d020b4f..90482eb74d 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -153,7 +153,7 @@ std::string appendTime()  } -void	LLNearbyChat::addMessage(const LLChat& chat,bool archive) +void	LLNearbyChat::addMessage(const LLChat& chat,bool archive,const LLSD &args)  {  	if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)  	{ @@ -184,7 +184,9 @@ void	LLNearbyChat::addMessage(const LLChat& chat,bool archive)  	if (!chat.mMuted)  	{  		tmp_chat.mFromName = chat.mFromName; -		mChatHistory->appendMessage(chat, use_plain_text_chat_history); +		LLSD chat_args = args; +		chat_args["use_plain_text_chat_history"] = use_plain_text_chat_history; +		mChatHistory->appendMessage(chat, chat_args);  	}  	if(archive) diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index 938b77df7a..5fb8ade19e 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -47,7 +47,7 @@ public:  	~LLNearbyChat();  	BOOL	postBuild			(); -	void	addMessage			(const LLChat& message,bool archive = true);	 +	void	addMessage			(const LLChat& message,bool archive = true, const LLSD &args = LLSD());	  	void	onNearbyChatContextMenuItemClicked(const LLSD& userdata);  	bool	onNearbyChatCheckContextMenuItem(const LLSD& userdata); diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index a1a9d84c14..c08ca30bab 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -319,7 +319,7 @@ void LLNearbyChatHandler::initChannel() -void LLNearbyChatHandler::processChat(const LLChat& chat_msg) +void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)  {  	if(chat_msg.mMuted == TRUE)  		return; @@ -337,7 +337,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg)  		//if(tmp_chat.mFromName.empty() && tmp_chat.mFromID!= LLUUID::null)  		//	tmp_chat.mFromName = tmp_chat.mFromID.asString();  	} -	nearby_chat->addMessage(chat_msg); +	nearby_chat->addMessage(chat_msg, true, args);  	if(nearby_chat->getVisible())  		return;//no need in toast if chat is visible diff --git a/indra/newview/llnearbychathandler.h b/indra/newview/llnearbychathandler.h index fb2abac6a4..01a6de5610 100644 --- a/indra/newview/llnearbychathandler.h +++ b/indra/newview/llnearbychathandler.h @@ -45,7 +45,7 @@ public:  	virtual ~LLNearbyChatHandler(); -	virtual void processChat(const LLChat& chat_msg); +	virtual void processChat(const LLChat& chat_msg, const LLSD &args);  protected:  	virtual void onDeleteToast(LLToast* toast); diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index 0fb438bfe9..5f4768e321 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -135,7 +135,7 @@ class LLChatHandler : public LLEventHandler  public:  	virtual ~LLChatHandler() {}; -	virtual void processChat(const LLChat& chat_msg)=0; +	virtual void processChat(const LLChat& chat_msg, const LLSD &args)=0;  };  /** @@ -277,6 +277,11 @@ public:  	static bool canSpawnIMSession(const LLNotificationPtr& notification);  	/** +	 * Checks sufficient conditions to add notification toast panel IM floater. +	 */ +	static bool canAddNotifPanelToIM(const LLNotificationPtr& notification); + +	/**  	 * Checks if passed notification can create IM session and be written into it.  	 *  	 * This method uses canLogToIM() & canSpawnIMSession(). @@ -297,6 +302,11 @@ public:  	static void logToIMP2P(const LLNotificationPtr& notification);  	/** +	 * Writes notification message to IM  p2p session. +	 */ +	static void logToIMP2P(const LLNotificationPtr& notification, bool to_file_only); + +	/**  	 * Writes group notice notification message to IM  group session.  	 */  	static void logGroupNoticeToIMGroup(const LLNotificationPtr& notification); @@ -309,7 +319,7 @@ public:  	/**  	 * Spawns IM session.  	 */ -	static void spawnIMSession(const std::string& name, const LLUUID& from_id); +	static LLUUID spawnIMSession(const std::string& name, const LLUUID& from_id);  	/**  	 * Returns name from the notification's substitution. @@ -319,6 +329,16 @@ public:  	 * @param notification - Notification which substitution's name will be returned.  	 */  	static std::string getSubstitutionName(const LLNotificationPtr& notification); + +	/** +	 * Adds notification panel to the IM floater. +	 */ +	static void addNotifPanelToIM(const LLNotificationPtr& notification); + +	/** +	 * Reloads IM floater messages. +	 */ +	static void reloadIMFloaterMessages(const LLNotificationPtr& notification);  };  } diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index 02f948eca9..f9b3b7187a 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -39,6 +39,7 @@  #include "llagent.h"  #include "llfloaterreg.h"  #include "llnearbychat.h" +#include "llimfloater.h"  using namespace LLNotificationsUI; @@ -91,6 +92,13 @@ bool LLHandlerUtil::canSpawnIMSession(const LLNotificationPtr& notification)  }  // static +bool LLHandlerUtil::canAddNotifPanelToIM(const LLNotificationPtr& notification) +{ +	return OFFER_FRIENDSHIP == notification->getName(); +} + + +// static  bool LLHandlerUtil::canSpawnSessionAndLogToIM(const LLNotificationPtr& notification)  {  	return canLogToIM(notification) && canSpawnIMSession(notification); @@ -137,6 +145,12 @@ void LLHandlerUtil::logToIM(const EInstantMessage& session_type,  // static  void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)  { +	logToIMP2P(notification, false); +} + +// static +void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification, bool to_file_only) +{  	const std::string name = LLHandlerUtil::getSubstitutionName(notification);  	const std::string session_name = notification->getPayload().has( @@ -148,8 +162,16 @@ void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)  	{  		LLUUID from_id = notification->getPayload()["from_id"]; -		logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), -				from_id, from_id); +		if(to_file_only) +		{ +			logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), +					LLUUID(), LLUUID()); +		} +		else +		{ +			logToIM(IM_NOTHING_SPECIAL, session_name, name, notification->getMessage(), +					from_id, from_id); +		}  	}  } @@ -191,7 +213,7 @@ void LLHandlerUtil::logToNearbyChat(const LLNotificationPtr& notification, EChat  }  // static -void LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_id) +LLUUID LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_id)  {  	LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id); @@ -199,8 +221,10 @@ void LLHandlerUtil::spawnIMSession(const std::string& name, const LLUUID& from_i  			session_id);  	if (session == NULL)  	{ -		LLIMMgr::instance().addSession(name, IM_NOTHING_SPECIAL, from_id); +		session_id = LLIMMgr::instance().addSession(name, IM_NOTHING_SPECIAL, from_id);  	} + +	return session_id;  }  // static @@ -210,3 +234,49 @@ std::string LLHandlerUtil::getSubstitutionName(const LLNotificationPtr& notifica  		? notification->getSubstitutions()["NAME"]  		: notification->getSubstitutions()["[NAME]"];  } + +// static +void LLHandlerUtil::addNotifPanelToIM(const LLNotificationPtr& notification) +{ +	const std::string name = LLHandlerUtil::getSubstitutionName(notification); +	LLUUID from_id = notification->getPayload()["from_id"]; + +	LLUUID session_id = spawnIMSession(name, from_id); +	// add offer to session +	LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession( +			session_id); +	llassert_always(session != NULL); + +	LLSD offer; +	offer["notifiaction_id"] = notification->getID(); +	offer["from_id"] = notification->getPayload()["from_id"]; +	offer["from"] = name; +	offer["time"] = LLLogChat::timestamp(true); +	session->mMsgs.push_front(offer); + +	LLIMFloater::show(session_id); +} + +// static +void LLHandlerUtil::reloadIMFloaterMessages( +		const LLNotificationPtr& notification) +{ +	LLUUID from_id = notification->getPayload()["from_id"]; +	LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, from_id); +	LLIMFloater* im_floater = LLFloaterReg::findTypedInstance<LLIMFloater>( +			"impanel", session_id); +	if (im_floater != NULL) +	{ +		LLIMModel::LLIMSession * session = LLIMModel::getInstance()->findIMSession( +				session_id); +		if(session != NULL) +		{ +			session->mMsgs.clear(); +			std::list<LLSD> chat_history; +			LLLogChat::loadAllHistory(session->mHistoryFileName, chat_history); +			session->addMessagesFromHistory(chat_history); +		} + +		im_floater->reloadMessages(); +	} +} diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp index 66bc217d15..4401bb953f 100644 --- a/indra/newview/llnotificationmanager.cpp +++ b/indra/newview/llnotificationmanager.cpp @@ -107,16 +107,17 @@ bool LLNotificationManager::onNotification(const LLSD& notify)  }  //-------------------------------------------------------------------------- -void LLNotificationManager::onChat(const LLChat& msg,ENotificationType type) +void LLNotificationManager::onChat(const LLChat& msg, const LLSD &args)  { -	switch(type) +	// check ENotificationType argument +	switch(args["type"].asInteger())  	{  	case NT_NEARBYCHAT:  		{  			LLNearbyChatHandler* handle = dynamic_cast<LLNearbyChatHandler*>(mNotifyHandlers["nearbychat"].get());  			if(handle) -				handle->processChat(msg); +				handle->processChat(msg, args);  		}  		break;  	default: 	//no need to handle all enum types diff --git a/indra/newview/llnotificationmanager.h b/indra/newview/llnotificationmanager.h index 072fc6f24c..575aa69c4d 100644 --- a/indra/newview/llnotificationmanager.h +++ b/indra/newview/llnotificationmanager.h @@ -66,7 +66,7 @@ public:  	bool onNotification(const LLSD& notification);  	// this method reacts on chat notifications and calls an appropriate handler -	void onChat(const LLChat& msg,ENotificationType type); +	void onChat(const LLChat& msg, const LLSD &args);  	// get a handler for a certain type of notification  	LLEventHandler* getHandlerForNotification(std::string notification_type); diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index fad0c6a91e..8c13b0fafa 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -93,7 +93,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)  	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")  	{ -		LLHandlerUtil::logToIMP2P(notification); +  		if( notification->getPayload().has("give_inventory_notification")  			&& !notification->getPayload()["give_inventory_notification"] ) @@ -103,18 +103,25 @@ bool LLOfferHandler::processNotification(const LLSD& notify)  		}  		else  		{ +			LLUUID session_id;  			if (LLHandlerUtil::canSpawnIMSession(notification))  			{  				const std::string name = LLHandlerUtil::getSubstitutionName(notification);  				LLUUID from_id = notification->getPayload()["from_id"]; -				LLHandlerUtil::spawnIMSession(name, from_id); +				session_id = LLHandlerUtil::spawnIMSession(name, from_id);  			} -			if (notification->getPayload().has("SUPPRESS_TOAST") +			if (LLHandlerUtil::canAddNotifPanelToIM(notification)) +			{ +				LLHandlerUtil::addNotifPanelToIM(notification); +				LLHandlerUtil::logToIMP2P(notification, true); +			} +			else if (notification->getPayload().has("SUPPRESS_TOAST")  						&& notification->getPayload()["SUPPRESS_TOAST"])  			{ +				LLHandlerUtil::logToIMP2P(notification);  				LLNotificationsUtil::cancel(notification);  			}  			else @@ -131,6 +138,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify)  				if(channel)  					channel->addToast(p); +				LLHandlerUtil::logToIMP2P(notification); +  				// send a signal to the counter manager  				mNewNotificationSignal();  			} @@ -146,6 +155,10 @@ bool LLOfferHandler::processNotification(const LLSD& notify)  		}  		else  		{ +			if (LLHandlerUtil::canAddNotifPanelToIM(notification)) +			{ +				LLHandlerUtil::reloadIMFloaterMessages(notification); +			}  			mChannel->killToastByNotificationID(notification->getID());  		}  	} diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index fe5b20813a..48dd5513bd 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -635,6 +635,9 @@ void LLPanelAvatarProfile::fillCommonData(const LLAvatarData* avatar_data)  	childSetValue("2nd_life_pic", avatar_data->image_id);  	childSetValue("real_world_pic", avatar_data->fl_image_id);  	childSetValue("homepage_edit", avatar_data->profile_url); + +	// Hide home page textbox if no page was set to fix "homepage URL appears clickable without URL - EXT-4734" +	childSetVisible("homepage_edit", !avatar_data->profile_url.empty());  }  void LLPanelAvatarProfile::fillPartnerData(const LLAvatarData* avatar_data) diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index 9d591ef43d..2a7d097f94 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -50,7 +50,6 @@  // project includes  #include "llagent.h" -#include "llfloaterbulkpermission.h"  #include "llpanelobjectinventory.h"  #include "llpreviewscript.h"  #include "llresmgr.h" @@ -60,6 +59,7 @@  #include "lltoolmgr.h"  #include "lltrans.h"  #include "llviewerassettype.h" +#include "llviewerinventory.h"  #include "llviewerobject.h"  #include "llviewerregion.h"  #include "llviewerwindow.h" diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 23db7ad226..469f1c1739 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -569,10 +569,10 @@ void LLPanelGroup::chatGroup()  }  void LLPanelGroup::showNotice(const std::string& subject, -							  const std::string& message, -							  const bool& has_inventory, -							  const std::string& inventory_name, -							  LLOfferInfo* inventory_offer) +			      const std::string& message, +			      const bool& has_inventory, +			      const std::string& inventory_name, +			      LLOfferInfo* inventory_offer)  {  	LLPanelGroupNotices* panel_notices = findChild<LLPanelGroupNotices>("group_notices_tab_panel");  	if(!panel_notices) diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index 45fc3d4688..6210973dae 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -614,7 +614,7 @@ void LLPanelGroupNotices::showNotice(const std::string& subject,  		mViewInventoryIcon->setVisible(TRUE);  		std::stringstream ss; -		ss << "        " << LLViewerInventoryItem::getDisplayName(inventory_name); +		ss << "        " << inventory_name;  		mViewInventoryName->setText(ss.str());  		mBtnOpenAttachment->setEnabled(TRUE); diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp index c792fd4fe3..36a542cfa0 100644 --- a/indra/newview/llpanellandmarkinfo.cpp +++ b/indra/newview/llpanellandmarkinfo.cpp @@ -108,7 +108,7 @@ void LLPanelLandmarkInfo::resetLocation()  }  // virtual -void LLPanelLandmarkInfo::setInfoType(INFO_TYPE type) +void LLPanelLandmarkInfo::setInfoType(EInfoType type)  {  	LLPanel* landmark_info_panel = getChild<LLPanel>("landmark_info_panel"); @@ -367,7 +367,6 @@ void LLPanelLandmarkInfo::createLandmark(const LLUUID& folder_id)  	}  	LLStringUtil::replaceChar(desc, '\n', ' '); -	LLViewerInventoryItem::insertDefaultSortField(name);  	// If no folder chosen use the "Landmarks" folder.  	LLLandmarkActions::createLandmarkHere(name, desc, diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h index 2a9949ae41..b3dc3f5ad9 100644 --- a/indra/newview/llpanellandmarkinfo.h +++ b/indra/newview/llpanellandmarkinfo.h @@ -49,7 +49,7 @@ public:  	/*virtual*/ void resetLocation(); -	/*virtual*/ void setInfoType(INFO_TYPE type); +	/*virtual*/ void setInfoType(EInfoType type);  	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index d4376550d6..5c5c35141e 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -463,10 +463,6 @@ BOOL LLTaskInvFVBridge::removeItem()  			}  			else  			{ -				remove_data_t* data = new remove_data_t; -				data->first = mPanel; -				data->second.first = mPanel->getTaskUUID(); -				data->second.second.push_back(mUUID);  				LLSD payload;  				payload["task_id"] = mPanel->getTaskUUID();  				payload["inventory_ids"].append(mUUID); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 501dac5dff..470cfca8fe 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -61,7 +61,14 @@ ContextMenu::~ContextMenu()  	// It can have registered Enable callbacks which are called from the LLMenuHolderGL::draw()  	// via selected item (menu_item_call) by calling LLMenuItemCallGL::buildDrawLabel.  	// we can have a crash via using callbacks of deleted instance of ContextMenu. EXT-4725 -	if (mMenu) 	mMenu->die(); + +	// menu holder deletes its menus on viewer exit, so we have no way to determine if instance  +	// of mMenu has already been deleted except of using LLHandle. EXT-4762. +	if (!mMenuHandle.isDead()) +	{ +		mMenu->die(); +		mMenu = NULL; +	}  }  void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y) @@ -86,6 +93,7 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,  	std::copy(uuids.begin(), uuids.end(), mUUIDs.begin());  	mMenu = createMenu(); +	mMenuHandle = mMenu->getHandle();  	mMenu->show(x, y);  	LLMenuGL::showPopup(spawning_view, mMenu, x, y);  } diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 7251f6dbbd..913638d8c8 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -62,6 +62,7 @@ protected:  	std::vector<LLUUID>	mUUIDs;  	LLContextMenu*		mMenu; +	LLHandle<LLView>	mMenuHandle;  };  /** diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 5f75668722..9ebc8ca2b9 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -58,6 +58,7 @@ LLPanelPlaceInfo::LLPanelPlaceInfo()  	mPosRegion(),  	mScrollingPanelMinHeight(0),  	mScrollingPanelWidth(0), +	mInfoType(UNKNOWN),  	mScrollingPanel(NULL),  	mScrollContainer(NULL)  {} @@ -120,7 +121,7 @@ void LLPanelPlaceInfo::setParcelID(const LLUUID& parcel_id)  }  //virtual -void LLPanelPlaceInfo::setInfoType(INFO_TYPE type) +void LLPanelPlaceInfo::setInfoType(EInfoType type)  {  	mTitle->setText(mCurrentTitle); diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h index 3091f7ed24..deedbd2b0f 100644 --- a/indra/newview/llpanelplaceinfo.h +++ b/indra/newview/llpanelplaceinfo.h @@ -54,8 +54,10 @@ class LLViewerInventoryCategory;  class LLPanelPlaceInfo : public LLPanel, LLRemoteParcelInfoObserver  {  public: -	enum INFO_TYPE +	enum EInfoType  	{ +		UNKNOWN, +  		AGENT,  		CREATE_LANDMARK,  		LANDMARK, @@ -79,7 +81,7 @@ public:  	// Depending on how the panel was triggered  	// (from landmark or current location, or other)  	// sets a corresponding title and contents. -	virtual void setInfoType(INFO_TYPE type); +	virtual void setInfoType(EInfoType type);  	// Requests remote parcel info by parcel ID.  	void sendParcelInfoRequest(); @@ -114,7 +116,7 @@ protected:  	std::string				mCurrentTitle;  	S32						mScrollingPanelMinHeight;  	S32						mScrollingPanelWidth; -	INFO_TYPE 				mInfoType; +	EInfoType 				mInfoType;  	LLScrollContainer*		mScrollContainer;  	LLPanel*				mScrollingPanel; diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 3c798639d4..8d689b2c5e 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -207,7 +207,7 @@ void LLPanelPlaceProfile::resetLocation()  }  // virtual -void LLPanelPlaceProfile::setInfoType(INFO_TYPE type) +void LLPanelPlaceProfile::setInfoType(EInfoType type)  {  	bool is_info_type_agent = type == AGENT; diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h index 8ca9526875..e77b441567 100644 --- a/indra/newview/llpanelplaceprofile.h +++ b/indra/newview/llpanelplaceprofile.h @@ -48,7 +48,7 @@ public:  	/*virtual*/ void resetLocation(); -	/*virtual*/ void setInfoType(INFO_TYPE type); +	/*virtual*/ void setInfoType(EInfoType type);  	/*virtual*/ void processParcelInfo(const LLParcelData& parcel_data); diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index 5de78b1595..110d7a1054 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -32,9 +32,9 @@  #ifndef LL_LLPANELPLACES_H  #define LL_LLPANELPLACES_H -#include "llpanel.h" +#include "lltimer.h" -class LLTimer; +#include "llpanel.h"  class LLInventoryItem;  class LLFilterEditor; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 1b8fb49641..43e0f9a88c 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -46,7 +46,6 @@  #include "llnotificationsutil.h"  #include "lltextbox.h"  #include "llviewermenu.h" -#include "llviewerinventory.h"  #include "lllandmarkactions.h"  #include "llclipboard.h" @@ -308,7 +307,7 @@ void LLTeleportHistoryFlatItemStorage::purge()  ////////////////////////////////////////////////////////////////////////////////  LLTeleportHistoryPanel::ContextMenu::ContextMenu() : -	mMenu(NULL) +	mMenu(NULL), mIndex(0)  {  } diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp index 84bdaafacf..53e351e66e 100644 --- a/indra/newview/llpreviewgesture.cpp +++ b/indra/newview/llpreviewgesture.cpp @@ -155,6 +155,12 @@ LLPreviewGesture* LLPreviewGesture::show(const LLUUID& item_id, const LLUUID& ob  	return preview;  } +void LLPreviewGesture::draw() +{ +	// Skip LLPreview::draw() to avoid description update +	LLFloater::draw(); +} +  // virtual  BOOL LLPreviewGesture::handleKeyHere(KEY key, MASK mask)  { @@ -497,11 +503,9 @@ BOOL LLPreviewGesture::postBuild()  	if (item)   	{ -		childSetCommitCallback("desc", LLPreview::onText, this);  		childSetText("desc", item->getDescription());  		childSetPrevalidate("desc", &LLLineEditor::prevalidateASCIIPrintableNoPipe); -		childSetCommitCallback("name", LLPreview::onText, this);  		childSetText("name", item->getName());  		childSetPrevalidate("name", &LLLineEditor::prevalidateASCIIPrintableNoPipe);  	} @@ -1077,6 +1081,8 @@ void LLPreviewGesture::saveIfNeeded()  	}  	else  	{ +		LLPreview::onCommit(); +  		// Every save gets a new UUID.  Yup.  		LLTransactionID tid;  		LLAssetID asset_id; diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h index 19fa1dcc37..5968e936ef 100644 --- a/indra/newview/llpreviewgesture.h +++ b/indra/newview/llpreviewgesture.h @@ -60,6 +60,7 @@ public:  	virtual ~LLPreviewGesture();  	// LLView +	/*virtual*/ void draw();  	/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask);  	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  									 EDragAndDropType cargo_type, diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 60a095506b..bf08756051 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -218,7 +218,8 @@ LLSelectMgr::LLSelectMgr()  	mHoverObjects = new LLObjectSelection();  	mHighlightedObjects = new LLObjectSelection(); - +	mForceSelection = FALSE; +	mShowSelection = FALSE;  } @@ -5093,6 +5094,7 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)  	mName = nodep.mName;  	mDescription = nodep.mDescription;  	mCategory = nodep.mCategory; +	mInventorySerial = 0;  	mSavedPositionLocal = nodep.mSavedPositionLocal;  	mSavedPositionGlobal = nodep.mSavedPositionGlobal;  	mSavedScale = nodep.mSavedScale; diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp index 56e342c3ce..f51462dcce 100644 --- a/indra/newview/llsidepanelinventorysubpanel.cpp +++ b/indra/newview/llsidepanelinventorysubpanel.cpp @@ -44,7 +44,6 @@  #include "lllineeditor.h"  #include "llradiogroup.h"  #include "llviewercontrol.h" -#include "llviewerinventory.h"  #include "llviewerobjectlist.h" diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 514d8facb4..2a57d48f16 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -294,7 +294,7 @@ LLSpatialGroup::~LLSpatialGroup()  	sNodeCount--; -	if (gGLManager.mHasOcclusionQuery && mOcclusionQuery) +	if (gGLManager.mHasOcclusionQuery && mOcclusionQuery[LLViewerCamera::sCurCameraID])  	{  		sQueryPool.release(mOcclusionQuery[LLViewerCamera::sCurCameraID]);  	} @@ -2607,6 +2607,7 @@ void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE)  						break;  				case LL_PCODE_LEGACY_TREE:  						gGL.color4f(0,0.5f,0,1); +						break;  				default:  						gGL.color4f(1,0,1,1);  						break; diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 8a36475510..bff32af228 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -354,7 +354,7 @@ void LLStatusBar::refresh()  	childSetEnabled("stat_btn", net_stats_visible);  	// update the master volume button state -	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); +	bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute();  	mBtnVolume->setToggleState(mute_audio);  } @@ -523,8 +523,8 @@ void LLStatusBar::onMouseEnterVolume(LLUICtrl* ctrl)  static void onClickVolume(void* data)  {  	// toggle the master mute setting -	BOOL mute_audio = gSavedSettings.getBOOL("MuteAudio"); -	gSavedSettings.setBOOL("MuteAudio", !mute_audio); +	bool mute_audio = LLAppViewer::instance()->getMasterSystemAudioMute(); +	LLAppViewer::instance()->setMasterSystemAudioMute(!mute_audio);	  }  // sets the static variables necessary for the date diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 0ce794addb..48e4a6ccc7 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -60,6 +60,7 @@ LLSurfacePatch::LLSurfacePatch() :  	mHeightsGenerated(FALSE),  	mDataOffset(0),  	mDataZ(NULL), +	mDataNorm(NULL),  	mVObjp(NULL),  	mOriginRegion(0.f, 0.f, 0.f),  	mCenterRegion(0.f, 0.f, 0.f), @@ -355,12 +356,14 @@ void LLSurfacePatch::calcNormal(const U32 x, const U32 y, const U32 stride)  	normal %= c2;  	normal.normVec(); +	llassert(mDataNorm);  	*(mDataNorm + surface_stride * y + x) = normal;  }  const LLVector3 &LLSurfacePatch::getNormal(const U32 x, const U32 y) const  {  	U32 surface_stride = mSurfacep->getGridsPerEdge(); +	llassert(mDataNorm);  	return *(mDataNorm + surface_stride * y + x);  } @@ -402,6 +405,7 @@ void LLSurfacePatch::updateVerticalStats()  	U32 i, j, k;  	F32 z, total; +	llassert(mDataZ);  	z = *(mDataZ);  	mMinZ = z; diff --git a/indra/newview/lltexlayer.cpp b/indra/newview/lltexlayer.cpp index 84c8b9d5f0..ddb6405c41 100644 --- a/indra/newview/lltexlayer.cpp +++ b/indra/newview/lltexlayer.cpp @@ -567,6 +567,7 @@ LLTexLayerSet::LLTexLayerSet(LLVOAvatarSelf* const avatar) :  	mAvatar( avatar ),  	mUpdatesEnabled( FALSE ),  	mIsVisible( TRUE ), +	mBakedTexIndex(LLVOAvatarDefines::BAKED_HEAD),  	mInfo( NULL )  {  } @@ -1860,7 +1861,7 @@ U32 LLTexLayerTemplate::updateWearableCache()  }  LLTexLayer* LLTexLayerTemplate::getLayer(U32 i)  { -	if (mWearableCache.size() <= i || i < 0) +	if (mWearableCache.size() <= i)  	{  		return NULL;  	} diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 051c189013..a7f26f1df1 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1617,20 +1617,20 @@ bool LLTextureCache::writeComplete(handle_t handle, bool abort)  {  	lockWorkers();  	handle_map_t::iterator iter = mWriters.find(handle); -	llassert_always(iter != mWriters.end()); -	LLTextureCacheWorker* worker = iter->second; -	if (worker->complete() || abort) -	{ -		mWriters.erase(handle); -		unlockWorkers(); -		worker->scheduleDelete(); -		return true; -	} -	else +	llassert(iter != mWriters.end()); +	if (iter != mWriters.end())  	{ -		unlockWorkers(); -		return false; +		LLTextureCacheWorker* worker = iter->second; +		if (worker->complete() || abort) +		{ +			mWriters.erase(handle); +			unlockWorkers(); +			worker->scheduleDelete(); +			return true; +		}  	} +	unlockWorkers(); +	return false;  }  void LLTextureCache::prioritizeWrite(handle_t handle) diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h index 4203cbbc43..64ec881fc3 100644 --- a/indra/newview/lltexturecache.h +++ b/indra/newview/lltexturecache.h @@ -59,7 +59,12 @@ private:  	};  	struct Entry  	{ -		Entry() {} +        	Entry() : +		        mBodySize(0), +			mImageSize(0), +			mTime(0) +		{ +		}  		Entry(const LLUUID& id, S32 imagesize, S32 bodysize, U32 time) :  			mID(id), mImageSize(imagesize), mBodySize(bodysize), mTime(time) {}  		void init(const LLUUID& id, U32 time) { mID = id, mImageSize = 0; mBodySize = 0; mTime = time; } diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 5ce6884239..404b79bfaf 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -661,6 +661,8 @@ bool LLTextureFetchWorker::doWork(S32 param)  				}  				setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);  				mState = SEND_HTTP_REQ; +				delete responder; +				responder = NULL;  			}  		} diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp index c3ccb9380b..da31bb3e73 100644 --- a/indra/newview/lltoastalertpanel.cpp +++ b/indra/newview/lltoastalertpanel.cpp @@ -170,6 +170,7 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal  	params.tab_stop(false);  	params.wrap(true);  	params.follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP); +	params.allow_html(false);  	LLTextBox * msg_box = LLUICtrlFactory::create<LLTextBox> (params);  	// Compute max allowable height for the dialog text, so we can allocate diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp index e49044cdca..add61c00cf 100644 --- a/indra/newview/lltoastgroupnotifypanel.cpp +++ b/indra/newview/lltoastgroupnotifypanel.cpp @@ -127,17 +127,7 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(LLNotificationPtr& notification  	pAttachLink->setVisible(hasInventory);  	pAttachIcon->setVisible(hasInventory);  	if (hasInventory) { -		std::string dis_name; -		std::string inv_name = payload["inventory_name"]; - -		if (LLViewerInventoryItem::extractSortFieldAndDisplayName(inv_name, NULL, &dis_name)) -		{ -			pAttachLink->setValue(dis_name); -		} -		else -		{ -			pAttachLink->setValue(inv_name); -		} +		pAttachLink->setValue(payload["inventory_name"]);  		mInventoryOffer = new LLOfferInfo(payload["inventory_offer"]);  		childSetActionTextbox("attachment", boost::bind( diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp index d62017cc2f..89a58cd736 100644 --- a/indra/newview/lltoastimpanel.cpp +++ b/indra/newview/lltoastimpanel.cpp @@ -33,22 +33,25 @@  #include "llviewerprecompiledheaders.h"  #include "lltoastimpanel.h" +#include "llfloaterreg.h"  #include "llnotifications.h"  #include "llinstantmessage.h" +#include "lltooltip.h" +  #include "llviewerchat.h"  const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT	= 6;  //--------------------------------------------------------------------------  LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notification), -								mAvatar(NULL), mUserName(NULL), +								mAvatarIcon(NULL), mAvatarName(NULL),  								mTime(NULL), mMessage(NULL)  {  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_instant_message.xml");  	LLIconCtrl* sys_msg_icon = getChild<LLIconCtrl>("sys_msg_icon"); -	mAvatar = getChild<LLAvatarIconCtrl>("avatar_icon"); -	mUserName = getChild<LLTextBox>("user_name"); +	mAvatarIcon = getChild<LLAvatarIconCtrl>("avatar_icon"); +	mAvatarName = getChild<LLTextBox>("user_name");  	mTime = getChild<LLTextBox>("time_box");  	mMessage = getChild<LLTextBox>("message"); @@ -77,22 +80,23 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) :	LLToastPanel(p.notif  		mMessage->setValue(p.message);  	} -	mUserName->setValue(p.from); +	mAvatarName->setValue(p.from);  	mTime->setValue(p.time);  	mSessionID = p.session_id; +	mAvatarID = p.avatar_id;  	mNotification = p.notification;  	if(p.from == SYSTEM_FROM)  	{ -		mAvatar->setVisible(FALSE); +		mAvatarIcon->setVisible(FALSE);  		sys_msg_icon->setVisible(TRUE);  	}  	else  	{ -		mAvatar->setVisible(TRUE); +		mAvatarIcon->setVisible(TRUE);  		sys_msg_icon->setVisible(FALSE); -		mAvatar->setValue(p.avatar_id); +		mAvatarIcon->setValue(p.avatar_id);  	}  	S32 maxLinesCount; @@ -119,3 +123,36 @@ BOOL LLToastIMPanel::handleMouseDown(S32 x, S32 y, MASK mask)  	return TRUE;  } + +//virtual +BOOL LLToastIMPanel::handleToolTip(S32 x, S32 y, MASK mask) +{ +	// It's not our direct child, so parentPointInView() doesn't work. +	LLRect name_rect; +	mAvatarName->localRectToOtherView(mAvatarName->getLocalRect(), &name_rect, this); +	if (!name_rect.pointInRect(x, y)) +		return LLToastPanel::handleToolTip(x, y, mask); + +	// Spawn at right side of the name textbox. +	LLRect sticky_rect = mAvatarName->calcScreenRect(); +	S32 icon_x = llmin(sticky_rect.mLeft + mAvatarName->getTextPixelWidth() + 3, sticky_rect.mRight - 16); +	LLCoordGL pos(icon_x, sticky_rect.mTop); + +	LLToolTip::Params params; +	params.background_visible(false); +	params.click_callback(boost::bind(&LLToastIMPanel::showInspector, this)); +	params.delay_time(0.0f);		// spawn instantly on hover +	params.image(LLUI::getUIImage("Info_Small")); +	params.message(""); +	params.padding(0); +	params.pos(pos); +	params.sticky_rect(sticky_rect); + +	LLToolTipMgr::getInstance()->show(params); +	return TRUE; +} + +void LLToastIMPanel::showInspector() +{ +	LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarID)); +} diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h index 53661f2cf6..154e6dae16 100644 --- a/indra/newview/lltoastimpanel.h +++ b/indra/newview/lltoastimpanel.h @@ -58,13 +58,16 @@ public:  	LLToastIMPanel(LLToastIMPanel::Params &p);  	virtual ~LLToastIMPanel();  	/*virtual*/ BOOL 	handleMouseDown(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL	handleToolTip(S32 x, S32 y, MASK mask);  private: +	void showInspector();  	static const S32 DEFAULT_MESSAGE_MAX_LINE_COUNT;  	LLNotificationPtr	mNotification;  	LLUUID				mSessionID; -	LLAvatarIconCtrl*	mAvatar; -	LLTextBox*			mUserName; +	LLUUID				mAvatarID; +	LLAvatarIconCtrl*	mAvatarIcon; +	LLTextBox*			mAvatarName;  	LLTextBox*			mTime;  	LLTextBox*			mMessage;  }; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 94acb2ae8c..4d741456c4 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -43,6 +43,7 @@  #include "lluiconstants.h"  #include "llrect.h"  #include "lltrans.h" +#include "llnotificationsutil.h"  const S32 BOTTOM_PAD = VPAD * 3;  S32 BUTTON_WIDTH = 90; @@ -235,6 +236,10 @@ LLButton* LLToastNotifyPanel::createButton(const LLSD& form_element, BOOL is_opt  LLToastNotifyPanel::~LLToastNotifyPanel()   {  	std::for_each(mBtnCallbackData.begin(), mBtnCallbackData.end(), DeletePointer()); +	if (LLNotificationsUtil::find(mNotification->getID()) != NULL) +	{ +		LLNotifications::getInstance()->cancel(mNotification); +	}  }  void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair_t>& buttons, S32 left_pad, S32 top)  { diff --git a/indra/newview/lltoolbar.cpp b/indra/newview/lltoolbar.cpp index edbaa0d45a..404eab9249 100644 --- a/indra/newview/lltoolbar.cpp +++ b/indra/newview/lltoolbar.cpp @@ -54,7 +54,6 @@  #include "lltooldraganddrop.h"  #include "llfloaterinventory.h"  #include "llfloaterchatterbox.h" -#include "llfloaterfriends.h"  #include "llfloatersnapshot.h"  #include "llinventorypanel.h"  #include "lltoolmgr.h" @@ -70,7 +69,6 @@  #include "llviewerwindow.h"  #include "lltoolgrab.h"  #include "llcombobox.h" -#include "llimpanel.h"  #include "lllayoutstack.h"  #if LL_DARWIN @@ -95,7 +93,10 @@ F32	LLToolBar::sInventoryAutoOpenTime = 1.f;  //  LLToolBar::LLToolBar() -:	LLPanel() +	: LLPanel(), + +	mInventoryAutoOpen(FALSE), +	mNumUnreadIMs(0)	  #if LL_DARWIN  	, mResizeHandle(NULL)  #endif // LL_DARWIN @@ -262,12 +263,12 @@ void LLToolBar::updateCommunicateList()  	communicate_button->removeall(); -	LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater(); +	//LLFloater* frontmost_floater = LLFloaterChatterBox::getInstance()->getActiveFloater();  	LLScrollListItem* itemp = NULL;  	LLSD contact_sd;  	contact_sd["value"] = "contacts"; -	contact_sd["columns"][0]["value"] = LLFloaterMyFriends::getInstance()->getShortTitle();  +	/*contact_sd["columns"][0]["value"] = LLFloaterMyFriends::getInstance()->getShortTitle();   	if (LLFloaterMyFriends::getInstance() == frontmost_floater)  	{  		contact_sd["columns"][0]["font"]["name"] = "SANSSERIF_SMALL";  @@ -277,7 +278,7 @@ void LLToolBar::updateCommunicateList()  		{  			selected = "contacts";  		} -	} +	}*/  	itemp = communicate_button->addElement(contact_sd, ADD_TOP);  	communicate_button->addSeparator(ADD_TOP); @@ -287,7 +288,7 @@ void LLToolBar::updateCommunicateList()  	std::set<LLHandle<LLFloater> >::const_iterator floater_handle_it; -	if (gIMMgr->getIMFloaterHandles().size() > 0) +	/*if (gIMMgr->getIMFloaterHandles().size() > 0)  	{  		communicate_button->addSeparator(ADD_TOP);  	} @@ -313,7 +314,7 @@ void LLToolBar::updateCommunicateList()  			}  			itemp = communicate_button->addElement(im_sd, ADD_TOP);  		} -	} +	}*/  	communicate_button->setValue(selected);  } @@ -337,7 +338,7 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)  	}  	else if (selected_option.asString() == "redock")  	{ -		LLFloaterChatterBox* chatterbox_instance = LLFloaterChatterBox::getInstance(); +		/*LLFloaterChatterBox* chatterbox_instance = LLFloaterChatterBox::getInstance();  		if(chatterbox_instance)  		{  			chatterbox_instance->addFloater(LLFloaterMyFriends::getInstance(), FALSE); @@ -358,7 +359,7 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)  				}  			}  			LLFloaterReg::showInstance("communicate", session_to_show); -		} +		}*/  	}  	else if (selected_option.asString() == "mute list")  	{ @@ -366,11 +367,11 @@ void LLToolBar::onClickCommunicate(LLUICtrl* ctrl, const LLSD& user_data)  	}  	else if (selected_option.isUndefined()) // user just clicked the communicate button, treat as toggle  	{ -		LLFloaterReg::toggleInstance("communicate"); +		/*LLFloaterReg::toggleInstance("communicate");*/  		}  	else // otherwise selection_option is undifined or a specific IM session id  	{ -		LLFloaterReg::showInstance("communicate", selected_option); +		/*LLFloaterReg::showInstance("communicate", selected_option);*/  	}  } diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 4420b046d8..125c62474e 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -1404,18 +1404,6 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,  	gFloaterTools->dirty();  } -struct LLGiveInventoryInfo -{ -	LLUUID mToAgentID; -	LLUUID mInventoryObjectID; -	LLUUID mIMSessionID; -	LLGiveInventoryInfo(const LLUUID& to_agent, const LLUUID& obj_id, const LLUUID &im_session_id = LLUUID::null) : -		mToAgentID(to_agent),  -		mInventoryObjectID(obj_id), -		mIMSessionID(im_session_id) -	{} -}; -  void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,  									  LLInventoryItem* item,  									  const LLUUID& im_session_id) @@ -1584,8 +1572,6 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,  		}  		else   		{ -			LLGiveInventoryInfo* info = NULL; -			info = new LLGiveInventoryInfo(to_agent, cat->getUUID(), im_session_id);  			LLSD args;  			args["COUNT"] = llformat("%d",giveable.countNoCopy());  			LLSD payload; diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp index 26dbe6a489..d837a334f1 100644 --- a/indra/newview/lltoolgrab.cpp +++ b/indra/newview/lltoolgrab.cpp @@ -78,9 +78,15 @@ LLToolGrab::LLToolGrab( LLToolComposite* composite )  :	LLTool( std::string("Grab"), composite ),  	mMode( GRAB_INACTIVE ),  	mVerticalDragging( FALSE ), +	mHitLand(FALSE), +	mLastMouseX(0), +	mLastMouseY(0), +	mAccumDeltaX(0), +	mAccumDeltaY(0),	  	mHasMoved( FALSE ),  	mOutsideSlop(FALSE),  	mDeselectedThisClick(FALSE), +	mLastFace(0),  	mSpinGrabbing( FALSE ),  	mSpinRotation(),  	mHideBuildHighlight(FALSE) diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index c79a66892d..39e71974fd 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -922,7 +922,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l  				const LLMediaEntry* mep = tep->hasMedia() ? tep->getMediaData() : NULL;  				if (mep)  				{ -					viewer_media_t media_impl = mep ? LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID()) : NULL; +					viewer_media_t media_impl = LLViewerMedia::getMediaImplFromTextureID(mep->getMediaID());  					LLPluginClassMedia* media_plugin = NULL;  					if (media_impl.notNull() && (media_impl->hasMedia())) diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 57434bd1e4..64eabe65cf 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -63,7 +63,6 @@  #include "llviewerjoystick.h"  #include "llviewerparcelmgr.h"  #include "llparcel.h" -#include "lloverlaybar.h"  #include "llkeyboard.h"  #include "llerrorcontrol.h"  #include "llappviewer.h" @@ -257,35 +256,6 @@ static bool handleJoystickChanged(const LLSD& newvalue)  	return true;  } -static bool handleAudioStreamMusicChanged(const LLSD& newvalue) -{ -	if (gAudiop) -	{ -		if ( newvalue.asBoolean() ) -		{ -			if (LLViewerParcelMgr::getInstance()->getAgentParcel() -				&& !LLViewerParcelMgr::getInstance()->getAgentParcel()->getMusicURL().empty()) -			{ -				// if music isn't playing, start it -				if (gOverlayBar && !gOverlayBar->musicPlaying()) -				{ -					LLOverlayBar::toggleMusicPlay(NULL); -				} -			} -		} -		else -		{ -			// if music is playing, stop it. -			if (gOverlayBar && gOverlayBar->musicPlaying()) -				{ -					LLOverlayBar::toggleMusicPlay(NULL); -				} - -		} -	} -	return true; -} -  static bool handleUseOcclusionChanged(const LLSD& newvalue)  {  	LLPipeline::sUseOcclusion = (newvalue.asBoolean() && gGLManager.mHasOcclusionQuery  @@ -592,7 +562,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2)); -	gSavedSettings.getControl("AudioStreamingMusic")->getSignal()->connect(boost::bind(&handleAudioStreamMusicChanged, _2));  	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2)); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index e87d380e4d..658d1c9ddd 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -54,7 +54,6 @@  #include "llfloaterbulkpermission.h"  #include "llfloaterbump.h"  #include "llfloatercamera.h" -#include "llfloaterchatterbox.h"  #include "llfloaterdaycycle.h"  #include "llfloatersearch.h"  #include "llfloaterenvsettings.h" @@ -69,7 +68,6 @@  #include "llfloaterhud.h"  #include "llfloaterimagepreview.h"  #include "llimfloater.h" -#include "llimpanel.h"  #include "llfloaterinspect.h"  #include "llfloaterinventory.h"  #include "llfloaterjoystick.h" @@ -116,7 +114,6 @@  #include "llinspectobject.h"  #include "llinspectremoteobject.h"  #include "llinspecttoast.h" -#include "llmediaremotectrl.h"  #include "llmoveview.h"  #include "llnearbychat.h"  #include "llpanelblockedlist.h" @@ -155,9 +152,8 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);  	//LLFloaterReg::add("chat", "floater_chat_history.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChat>);  	LLFloaterReg::add("nearby_chat", "floater_nearby_chat.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLNearbyChat>); -	LLFloaterReg::add("communicate", "floater_chatterbox.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatterBox>); +  	LLFloaterReg::add("compile_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCompileQueue>); -	LLFloaterReg::add("contacts", "floater_my_friends.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMyFriends>);	  	LLFloaterReg::add("env_day_cycle", "floater_day_cycle_options.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDayCycle>);  	LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>); @@ -265,8 +261,5 @@ void LLViewerFloaterReg::registerFloaters()  	// *NOTE: Please keep these alphabetized for easier merges -	// debug use only -	LLFloaterReg::add("media_remote_ctrl", "floater_media_remote.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterMediaRemoteCtrl>); -  	LLFloaterReg::registerControlVariables(); // Make sure visibility and rect controls get preserved when saving  } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index b330c1ba83..3001992630 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -34,6 +34,7 @@  #include "llviewerinventory.h"  #include "llnotificationsutil.h" +#include "llsdserialize.h"  #include "message.h"  #include "indra_constants.h" @@ -1171,81 +1172,196 @@ const std::string& LLViewerInventoryItem::getName() const  		return linked_category->getName();  	} -	return getDisplayName(); +	return  LLInventoryItem::getName();  } -const std::string& LLViewerInventoryItem::getDisplayName() const +/** + * Class to store sorting order of favorites landmarks in a local file. EXT-3985. + * It replaced previously implemented solution to store sort index in landmark's name as a "<N>@" prefix. + * Data are stored in user home directory. + */ +class LLFavoritesOrderStorage : public LLSingleton<LLFavoritesOrderStorage> +	, public LLDestroyClass<LLFavoritesOrderStorage>  { -	std::string result; -	BOOL hasSortField = extractSortFieldAndDisplayName(0, &result); +public: +	/** +	 * Sets sort index for specified with LLUUID favorite landmark +	 */ +	void setSortIndex(const LLUUID& inv_item_id, S32 sort_index); + +	/** +	 * Gets sort index for specified with LLUUID favorite landmark +	 */ +	S32 getSortIndex(const LLUUID& inv_item_id); +	void removeSortIndex(const LLUUID& inv_item_id); + +	/** +	 * Implementation of LLDestroyClass. Calls cleanup() instance method. +	 * +	 * It is important this callback is called before gInventory is cleaned. +	 * For now it is called from LLAppViewer::cleanup() -> LLAppViewer::disconnectViewer(), +	 * Inventory is cleaned later from LLAppViewer::cleanup() after LLAppViewer::disconnectViewer() is called. +	 * @see cleanup() +	 */ +	static void destroyClass(); + +	const static S32 NO_INDEX; +private: +	friend class LLSingleton<LLFavoritesOrderStorage>; +	LLFavoritesOrderStorage() : mIsDirty(false) { load(); } +	~LLFavoritesOrderStorage() { save(); } + +	/** +	 * Removes sort indexes for items which are not in Favorites bar for now. +	 */ +	void cleanup(); + +	const static std::string SORTING_DATA_FILE_NAME; + +	void load(); +	void save(); + +	typedef std::map<LLUUID, S32> sort_index_map_t; +	sort_index_map_t mSortIndexes; + +	bool mIsDirty; + +	struct IsNotInFavorites +	{ +		IsNotInFavorites(const LLInventoryModel::item_array_t& items) +			: mFavoriteItems(items) +		{ -	return mDisplayName = hasSortField ? result : LLInventoryItem::getName(); -} +		} -// static -std::string LLViewerInventoryItem::getDisplayName(const std::string& name) -{ -	std::string result; -	BOOL hasSortField = extractSortFieldAndDisplayName(name, 0, &result); +		/** +		 * Returns true if specified item is not found among inventory items +		 */ +		bool operator()(const sort_index_map_t::value_type& id_index_pair) const +		{ +			LLPointer<LLViewerInventoryItem> item = gInventory.getItem(id_index_pair.first); +			if (item.isNull()) return true; -	return hasSortField ? result : name; -} +			LLInventoryModel::item_array_t::const_iterator found_it = +				std::find(mFavoriteItems.begin(), mFavoriteItems.end(), item); -S32 LLViewerInventoryItem::getSortField() const -{ -	S32 result; -	BOOL hasSortField = extractSortFieldAndDisplayName(&result, 0); +			return found_it == mFavoriteItems.end(); +		} +	private: +		LLInventoryModel::item_array_t mFavoriteItems; +	}; + +}; + +const std::string LLFavoritesOrderStorage::SORTING_DATA_FILE_NAME = "landmarks_sorting.xml"; +const S32 LLFavoritesOrderStorage::NO_INDEX = -1; -	return hasSortField ? result : -1; +void LLFavoritesOrderStorage::setSortIndex(const LLUUID& inv_item_id, S32 sort_index) +{ +	mSortIndexes[inv_item_id] = sort_index; +	mIsDirty = true;  } -void LLViewerInventoryItem::setSortField(S32 sortField) +S32 LLFavoritesOrderStorage::getSortIndex(const LLUUID& inv_item_id)  { -	using std::string; +	sort_index_map_t::const_iterator it = mSortIndexes.find(inv_item_id); +	if (it != mSortIndexes.end()) +	{ +		return it->second; +	} +	return NO_INDEX; +} -	std::stringstream ss; -	ss << sortField; +void LLFavoritesOrderStorage::removeSortIndex(const LLUUID& inv_item_id) +{ +	mSortIndexes.erase(inv_item_id); +	mIsDirty = true; +} -	string newSortField = ss.str(); +// static +void LLFavoritesOrderStorage::destroyClass() +{ +	LLFavoritesOrderStorage::instance().cleanup(); +} -	const char separator = getSeparator(); -	const string::size_type separatorPos = mName.find(separator, 0); +void LLFavoritesOrderStorage::load() +{ +	// load per-resident sorting information +	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); -	if (separatorPos < string::npos) +	LLSD settings_llsd; +	llifstream file; +	file.open(filename); +	if (file.is_open())  	{ -		// the name of the LLViewerInventoryItem already consists of sort field and display name. -		mName = newSortField + separator + mName.substr(separatorPos + 1, string::npos); +		LLSDSerialize::fromXML(settings_llsd, file);  	} -	else + +	for (LLSD::map_const_iterator iter = settings_llsd.beginMap(); +		iter != settings_llsd.endMap(); ++iter)  	{ -		// there is no sort field in the name of LLViewerInventoryItem, we should add it -		mName = newSortField + separator + mName; +		mSortIndexes.insert(std::make_pair(LLUUID(iter->first), (S32)iter->second.asInteger()));  	}  } -void LLViewerInventoryItem::rename(const std::string& n) +void LLFavoritesOrderStorage::save()  { -	using std::string; +	// nothing to save if clean +	if (!mIsDirty) return; -	string new_name(n); -	LLStringUtil::replaceNonstandardASCII(new_name, ' '); -	LLStringUtil::replaceChar(new_name, '|', ' '); -	LLStringUtil::trim(new_name); -	LLStringUtil::truncate(new_name, DB_INV_ITEM_NAME_STR_LEN); +	// If we quit from the login screen we will not have an SL account +	// name.  Don't try to save, otherwise we'll dump a file in +	// C:\Program Files\SecondLife\ or similar. JC +	std::string user_dir = gDirUtilp->getLindenUserDir(); +	if (!user_dir.empty()) +	{ +		std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, SORTING_DATA_FILE_NAME); +		LLSD settings_llsd; -	const char separator = getSeparator(); -	const string::size_type separatorPos = mName.find(separator, 0); +		for(sort_index_map_t::const_iterator iter = mSortIndexes.begin(); iter != mSortIndexes.end(); ++iter) +		{ +			settings_llsd[iter->first.asString()] = iter->second; +		} -	if (separatorPos < string::npos) -	{ -		mName.replace(separatorPos + 1, string::npos, new_name); -	} -	else -	{ -		mName = new_name; +		llofstream file; +		file.open(filename); +		LLSDSerialize::toPrettyXML(settings_llsd, file);  	}  } +void LLFavoritesOrderStorage::cleanup() +{ +	// nothing to clean +	if (!mIsDirty) return; + +	const LLUUID fav_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE); +	LLInventoryModel::cat_array_t cats; +	LLInventoryModel::item_array_t items; +	gInventory.collectDescendents(fav_id, cats, items, LLInventoryModel::EXCLUDE_TRASH); + +	IsNotInFavorites is_not_in_fav(items); + +	sort_index_map_t  aTempMap; +	//copy unremoved values from mSortIndexes to aTempMap +	std::remove_copy_if(mSortIndexes.begin(), mSortIndexes.end(),  +		inserter(aTempMap, aTempMap.begin()), +		is_not_in_fav); + +	//Swap the contents of mSortIndexes and aTempMap +	mSortIndexes.swap(aTempMap); +} + + +S32 LLViewerInventoryItem::getSortField() const +{ +	return LLFavoritesOrderStorage::instance().getSortIndex(mUUID); +} + +void LLViewerInventoryItem::setSortField(S32 sortField) +{ +	LLFavoritesOrderStorage::instance().setSortIndex(mUUID, sortField); +} +  const LLPermissions& LLViewerInventoryItem::getPermissions() const  {  	// Use the actual permissions of the symlink, not its parent. @@ -1334,6 +1450,8 @@ U32 LLViewerInventoryItem::getCRC32() const  	return LLInventoryItem::getCRC32();	  } +// *TODO: mantipov: should be removed with LMSortPrefix patch in llinventorymodel.cpp, EXT-3985 +static char getSeparator() { return '@'; }  BOOL LLViewerInventoryItem::extractSortFieldAndDisplayName(const std::string& name, S32* sortField, std::string* displayName)  {  	using std::string; @@ -1369,12 +1487,6 @@ BOOL LLViewerInventoryItem::extractSortFieldAndDisplayName(const std::string& na  	return result;  } -void LLViewerInventoryItem::insertDefaultSortField(std::string& name) -{ -	name.insert(0, std::string("1") + getSeparator()); -} - -  // This returns true if the item that this item points to   // doesn't exist in memory (i.e. LLInventoryModel).  The baseitem  // might still be in the database but just not loaded yet. diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 7f3f019b07..c24f76c87a 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -64,12 +64,8 @@ public:  	virtual LLAssetType::EType getType() const;  	virtual const LLUUID& getAssetUUID() const;  	virtual const std::string& getName() const; -	virtual const std::string& getDisplayName() const; -	static std::string getDisplayName(const std::string& name); -	static char getSeparator() { return '@'; }  	virtual S32 getSortField() const;  	virtual void setSortField(S32 sortField); -	virtual void rename(const std::string& new_name);  	virtual const LLPermissions& getPermissions() const;  	virtual const LLUUID& getCreatorUUID() const;  	virtual const std::string& getDescription() const; @@ -82,7 +78,6 @@ public:  	virtual U32 getCRC32() const; // really more of a checksum.  	static BOOL extractSortFieldAndDisplayName(const std::string& name, S32* sortField, std::string* displayName); -	static void insertDefaultSortField(std::string& name);  	// construct a complete viewer inventory item  	LLViewerInventoryItem(const LLUUID& uuid, const LLUUID& parent_uuid, diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp index c2591ac8d7..95f05b5f5f 100644 --- a/indra/newview/llviewerjoint.cpp +++ b/indra/newview/llviewerjoint.cpp @@ -59,13 +59,9 @@ BOOL					LLViewerJoint::sDisableLOD = FALSE;  // Class Constructor  //-----------------------------------------------------------------------------  LLViewerJoint::LLViewerJoint() +	:       LLJoint()  { -	mUpdateXform = TRUE; -	mValid = FALSE; -	mComponents = SC_JOINT | SC_BONE | SC_AXES; -	mMinPixelArea = DEFAULT_LOD; -	mPickName = PN_DEFAULT; -	mVisible = TRUE; +	init();  } @@ -73,13 +69,21 @@ LLViewerJoint::LLViewerJoint()  // LLViewerJoint()  // Class Constructor  //----------------------------------------------------------------------------- -LLViewerJoint::LLViewerJoint(const std::string &name, LLJoint *parent) : -	LLJoint(name, parent) +LLViewerJoint::LLViewerJoint(const std::string &name, LLJoint *parent) +	:	LLJoint(name, parent) +{ +	init(); +} + + +void LLViewerJoint::init()  {  	mValid = FALSE;  	mComponents = SC_JOINT | SC_BONE | SC_AXES;  	mMinPixelArea = DEFAULT_LOD;  	mPickName = PN_DEFAULT; +	mVisible = TRUE; +	mMeshID = 0;  } diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h index 08c4ec36fd..0d3092a044 100644 --- a/indra/newview/llviewerjoint.h +++ b/indra/newview/llviewerjoint.h @@ -142,6 +142,8 @@ public:  	void setMeshID( S32 id ) {mMeshID = id;}  protected: +	void init(); +  	BOOL		mValid;  	U32			mComponents;  	F32			mMinPixelArea; diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 5b8902dec4..1a67fc0966 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -147,6 +147,7 @@ LLViewerJointMesh::LLViewerJointMesh()  	mTexture( NULL ),  	mLayerSet( NULL ),  	mTestImageName( 0 ), +	mFaceIndexCount(0),  	mIsTransparent(FALSE)  { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 96251f7571..f7f30a5136 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -53,7 +53,6 @@  #include "llfloaterbuycontents.h"  #include "llfloaterbuycurrency.h"  #include "llfloatercustomize.h" -#include "llfloaterchatterbox.h"  #include "llfloatergodtools.h"  #include "llfloaterinventory.h"  #include "llfloaterland.h" @@ -82,7 +81,6 @@  #include "llsidetray.h"  #include "llstatusbar.h"  #include "lltextureview.h" -#include "lltoolbar.h"  #include "lltoolcomp.h"  #include "lltoolmgr.h"  #include "lltoolpie.h" diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 36710e7532..9240833632 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -630,7 +630,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)  			delete_context_data = FALSE;  			LLSD args;  			args["NAME"] = name; -			args["INVITE"] = message;  			LLNotificationsUtil::add("JoinedTooManyGroupsMember", args, notification["payload"]);  		}  	} @@ -1435,31 +1434,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const  	return false;  } -std::string get_display_name(const std::string& name) -{ -	// We receive landmark name as \'<n>@name\' where <n> is a number -	// LLViewerInventoryItem::getDisplayName will remove \'<n>@ though we need the \' -	// Lets save all chars preceding @ and insert them back after <n>@ was removed - -	std::string saved; - -	if(std::string::npos != name.find(LLViewerInventoryItem::getSeparator())) -	{ -		int n = 0; -		while(!isdigit(name[n]) && LLViewerInventoryItem::getSeparator() != name[n]) -		{ -			++n; -		} -		saved = name.substr(0, n); -	} - -	std::string d_name = LLViewerInventoryItem::getDisplayName(name); -	d_name.insert(0, saved); -	LLStringUtil::trim(d_name); - -	return d_name; -} -  void inventory_offer_handler(LLOfferInfo* info)  {  	//Until throttling is implmented, busy mode should reject inventory instead of silently @@ -1497,11 +1471,6 @@ void inventory_offer_handler(LLOfferInfo* info)  		LLStringUtil::truncate(msg, indx);  	} -	if(LLAssetType::AT_LANDMARK == info->mType) -	{ -		msg = get_display_name(msg); -	} -  	LLSD args;  	args["[OBJECTNAME]"] = msg; @@ -1933,7 +1902,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			if (has_inventory)  			{ -				info = new LLOfferInfo; +				info = new LLOfferInfo();  				info->mIM = IM_GROUP_NOTICE;  				info->mFromID = from_id; @@ -1987,6 +1956,10 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				LLPanelGroup::showNotice(subj,mes,group_id,has_inventory,item_name,info);  			} +			else +			{ +				delete info; +			}  		}  		break;  	case IM_GROUP_INVITATION: @@ -2047,6 +2020,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				if (sizeof(offer_agent_bucket_t) != binary_bucket_size)  				{  					LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL; +					delete info;  					break;  				}  				bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; @@ -2058,6 +2032,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  				if (sizeof(S8) != binary_bucket_size)  				{  					LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL; +					delete info;  					break;  				}  				info->mType = (LLAssetType::EType) binary_bucket[0]; @@ -2237,7 +2212,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			payload["SESSION_NAME"] = session_name;  			if (from_group)  			{ -				payload["groupowned"] = "true"; +				payload["group_owned"] = "true";  			}  			LLNotificationsUtil::add("ServerObjectMessage", substitutions, payload);  		} @@ -2539,7 +2514,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  	// Object owner for objects  	msg->getUUID("ChatData", "OwnerID", owner_id); -	 +  	msg->getU8Fast(_PREHASH_ChatData, _PREHASH_SourceType, source_temp);  	chat.mSourceType = (EChatSourceType)source_temp; @@ -2568,7 +2543,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  	if (chatter)  	{  		chat.mPosAgent = chatter->getPositionAgent(); -		 +  		// Make swirly things only for talking objects. (not script debug messages, though)  		if (chat.mSourceType == CHAT_SOURCE_OBJECT   			&& chat.mChatType != CHAT_TYPE_DEBUG_MSG) @@ -2713,8 +2688,13 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  		chat.mMuted = is_muted && !is_linden; -		LLNotificationsUI::LLNotificationManager::instance().onChat( -					chat, LLNotificationsUI::NT_NEARBYCHAT); +		// pass owner_id to chat so that we can display the remote +		// object inspect for an object that is chatting with you +		LLSD args; +		args["type"] = LLNotificationsUI::NT_NEARBYCHAT; +		args["owner_id"] = owner_id; + +		LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);  	}  } diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index 8404d6fde0..1415c16090 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -205,7 +205,9 @@ void open_inventory_offer(const std::vector<LLUUID>& items, const std::string& f  struct LLOfferInfo  { -	LLOfferInfo() {}; +        LLOfferInfo() +	:	mFromGroup(FALSE), mFromObject(FALSE), +		mIM(IM_NOTHING_SPECIAL), mType(LLAssetType::AT_NONE) {};  	LLOfferInfo(const LLSD& sd);  	void forceResponse(InventoryOfferResponse response); diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp index d7b55d7e97..987d23630a 100644 --- a/indra/newview/llviewernetwork.cpp +++ b/indra/newview/llviewernetwork.cpp @@ -169,6 +169,7 @@ void LLViewerLogin::setGridChoice(EGridInfo grid)  	if(grid < 0 || grid >= GRID_INFO_COUNT)  	{  		llerrs << "Invalid grid index specified." << llendl; +		return;  	}  	if(mGridChoice != grid || gSavedSettings.getS32("ServerChoice") != grid) diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 3c79045cc5..886f1d9ef5 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -861,6 +861,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));  					((LLVOAvatar*)this)->setFootPlane(collision_plane);  					count += sizeof(LLVector4); +					// fall through  				case 60:  					this_update_precision = 32;  					// this is a terse update @@ -900,6 +901,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));  					((LLVOAvatar*)this)->setFootPlane(collision_plane);  					count += sizeof(LLVector4); +					// fall through  				case 32:  					this_update_precision = 16;  					test_pos_parent.quantize16(-0.5f*size, 1.5f*size, MIN_HEIGHT, MAX_HEIGHT); @@ -1172,6 +1174,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));  					((LLVOAvatar*)this)->setFootPlane(collision_plane);  					count += sizeof(LLVector4); +					// fall through  				case 60:  					// this is a terse 32 update  					// pos @@ -1211,6 +1214,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  					htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));  					((LLVOAvatar*)this)->setFootPlane(collision_plane);  					count += sizeof(LLVector4); +					// fall through  				case 32:  					// this is a terse 16 update  					this_update_precision = 16; diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 10a95443f1..c537865937 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -69,7 +69,6 @@  #include "llviewerparceloverlay.h"  #include "llviewerregion.h"  #include "llworld.h" -#include "lloverlaybar.h"  #include "roles_constants.h"  #include "llweb.h" @@ -706,8 +705,8 @@ bool LLViewerParcelMgr::allowAgentScripts() const  bool LLViewerParcelMgr::allowAgentDamage() const  {  	LLViewerRegion* region = gAgent.getRegion(); -	return region && region->getAllowDamage() -		&& mAgentParcel && mAgentParcel->getAllowDamage(); +	return (region && region->getAllowDamage()) +		|| (mAgentParcel && mAgentParcel->getAllowDamage());  }  BOOL LLViewerParcelMgr::isOwnedAt(const LLVector3d& pos_global) const diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 841a7ccc5e..6b480ccf8e 100644 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -81,6 +81,7 @@ F32 calc_desired_size(LLViewerCamera* camera, LLVector3 pos, LLVector2 scale)  LLViewerPart::LLViewerPart() :  	mPartID(0),  	mLastUpdateTime(0.f), +	mSkipOffset(0.f),  	mVPCallback(NULL),  	mImagep(NULL)  { diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 6dc9f5c465..86b1a8c910 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -135,7 +135,8 @@ LLGLSLShader			gLuminanceGatherProgram;  GLint				gAvatarMatrixParam;  LLViewerShaderMgr::LLViewerShaderMgr() : -	mVertexShaderLevel(SHADER_COUNT, 0) +	mVertexShaderLevel(SHADER_COUNT, 0), +	mMaxAvatarShaderLevel(0)  {	  	/// Make sure WL Sky is the first program  	mShaderList.push_back(&gWLSkyProgram); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index b80dc7d902..0ad269392d 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1029,6 +1029,8 @@ void LLViewerFetchedTexture::init(bool firstinit)  	// does not contain this image.  	mIsMissingAsset = FALSE; +	mLoadedCallbackDesiredDiscardLevel = 0; +  	mNeedsCreateTexture = FALSE;  	mIsRawImageValid = FALSE; @@ -1041,6 +1043,7 @@ void LLViewerFetchedTexture::init(bool firstinit)  	mFetchPriority = 0;  	mDownloadProgress = 0.f;  	mFetchDeltaTime = 999999.f; +	mRequestDeltaTime = 0.f;  	mForSculpt = FALSE ;  	mIsFetched = FALSE ; diff --git a/indra/newview/llviewervisualparam.cpp b/indra/newview/llviewervisualparam.cpp index b088ef0730..fad398e00b 100644 --- a/indra/newview/llviewervisualparam.cpp +++ b/indra/newview/llviewervisualparam.cpp @@ -46,6 +46,7 @@  LLViewerVisualParamInfo::LLViewerVisualParamInfo()  	:  	mWearableType( WT_INVALID ), +	mCrossWearable(FALSE),  	mCamDist( 0.5f ),  	mCamAngle( 0.f ),  	mCamElevation( 0.f ), diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c1817496b1..cd6b9e2c50 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -101,7 +101,6 @@  #include "llfloaterbuildoptions.h"  #include "llfloaterbuyland.h"  #include "llfloatercamera.h" -#include "llfloaterchatterbox.h"  #include "llfloatercustomize.h"  #include "llfloaterland.h"  #include "llfloaterinspect.h" @@ -128,7 +127,6 @@  #include "llmorphview.h"  #include "llmoveview.h"  #include "llnavigationbar.h" -#include "lloverlaybar.h"  #include "llpreviewtexture.h"  #include "llprogressview.h"  #include "llresmgr.h" @@ -147,7 +145,6 @@  #include "lltexturefetch.h"  #include "lltextureview.h"  #include "lltool.h" -#include "lltoolbar.h"  #include "lltoolcomp.h"  #include "lltooldraganddrop.h"  #include "lltoolface.h" @@ -1463,10 +1460,6 @@ void LLViewerWindow::initWorldUI()  	bottom_tray_container->addChild(bottom_tray);  	bottom_tray_container->setVisible(TRUE); -	// Pre initialize instance communicate instance; -	//  currently needs to happen before initializing chat or IM -	LLFloaterReg::getInstance("communicate"); -  	LLRect morph_view_rect = full_window;  	morph_view_rect.stretch( -STATUS_BAR_HEIGHT );  	morph_view_rect.mTop = full_window.mTop - 32; @@ -1659,6 +1652,9 @@ LLViewerWindow::~LLViewerWindow()  {  	llinfos << "Destroying Window" << llendl;  	destroyWindow(); + +	delete mDebugText; +	mDebugText = NULL;  } @@ -2266,15 +2262,18 @@ void LLViewerWindow::handleScrollWheel(S32 clicks)  void LLViewerWindow::moveCursorToCenter()  { -	S32 x = getWorldViewWidthScaled() / 2; -	S32 y = getWorldViewHeightScaled() / 2; +	if (! gSavedSettings.getBOOL("DisableMouseWarp")) +	{ +		S32 x = getWorldViewWidthScaled() / 2; +		S32 y = getWorldViewHeightScaled() / 2; -	//on a forced move, all deltas get zeroed out to prevent jumping -	mCurrentMousePoint.set(x,y); -	mLastMousePoint.set(x,y); -	mCurrentMouseDelta.set(0,0);	 +		//on a forced move, all deltas get zeroed out to prevent jumping +		mCurrentMousePoint.set(x,y); +		mLastMousePoint.set(x,y); +		mCurrentMouseDelta.set(0,0);	 -	LLUI::setMousePositionScreen(x, y);	 +		LLUI::setMousePositionScreen(x, y);	 +	}  } @@ -4846,10 +4845,10 @@ LLPickInfo::LLPickInfo()  }  LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,  -						MASK keyboard_mask,  -						BOOL pick_transparent, -						BOOL pick_uv_coords, -						void (*pick_callback)(const LLPickInfo& pick_info)) +		       MASK keyboard_mask,  +		       BOOL pick_transparent, +		       BOOL pick_uv_coords, +		       void (*pick_callback)(const LLPickInfo& pick_info))  	: mMousePt(mouse_pos),  	  mKeyMask(keyboard_mask),  	  mPickCallback(pick_callback), diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index b488276a18..c0a9180b53 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -126,9 +126,6 @@ private:  	void			updateXYCoords();  	BOOL			mWantSurfaceInfo;   // do we populate mUVCoord, mNormal, mBinormal? -	U8				mPickBuffer[PICK_DIAMETER * PICK_DIAMETER * 4]; -	F32				mPickDepthBuffer[PICK_DIAMETER * PICK_DIAMETER]; -	BOOL			mPickParcelWall;  }; diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp index de57788271..fae98cf49a 100644 --- a/indra/newview/llviewerwindowlistener.cpp +++ b/indra/newview/llviewerwindowlistener.cpp @@ -77,6 +77,7 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const          {              LL_ERRS("LLViewerWindowListener") << "LLViewerWindowListener::saveSnapshot(): "                                                << "unrecognized type " << event["type"] << LL_ENDL; +	    return;          }          type = found->second;      } diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 589999c026..9d49fb69d6 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -698,7 +698,11 @@ void LLVoiceChannelProximal::handleStatusChange(EStatusType status)  		// do not notify user when leaving proximal channel  		return;  	case STATUS_VOICE_DISABLED: -		LLCallInfoDialog::show("unavailable", mNotifyArgs); +		//skip showing "Voice not available at your current location" when agent voice is disabled (EXT-4749) +		if(LLVoiceClient::voiceEnabled() && gVoiceClient->voiceWorking()) +		{ +			LLCallInfoDialog::show("unavailable", mNotifyArgs); +		}  		return;  	default:  		break; diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 8ca0fd6ef6..560c2ab469 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -72,8 +72,6 @@  #include "llvoavatarself.h"  #include "llvoicechannel.h" -#include "llfloaterfriends.h"  //VIVOX, inorder to refresh communicate panel -  // for base64 decoding  #include "apr_base64.h" @@ -296,8 +294,14 @@ void LLVivoxProtocolParser::reset()  	ignoringTags = false;  	accumulateText = false;  	energy = 0.f; +	hasText = false; +	hasAudio = false; +	hasVideo = false; +	terminated = false;  	ignoreDepth = 0;  	isChannel = false; +	incoming = false; +	enabled = false;  	isEvent = false;  	isLocallyMuted = false;  	isModeratorMuted = false; @@ -6408,6 +6412,7 @@ void LLVoiceClient::filePlaybackSetMode(bool vox, float speed)  }  LLVoiceClient::sessionState::sessionState() : +	mErrorStatusCode(0),  	mMediaStreamState(streamStateUnknown),  	mTextStreamState(streamStateUnknown),  	mCreateInProgress(false), diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 5ff8f0d267..0550ed770b 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -343,7 +343,6 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)  	cloud_pos_density1 = LLColor3();  	cloud_pos_density2 = LLColor3(); -  	mInitialized = FALSE;  	mbCanSelect = FALSE;  	mUpdateTimer.reset(); @@ -385,6 +384,10 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)  	mBloomTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);  	mHeavenlyBodyUpdated = FALSE ; + +	mDrawRefl = 0; +	mHazeConcentration = 0.f; +	mInterpVal = 0.f;  } @@ -1072,10 +1075,10 @@ BOOL LLVOSky::updateSky()  		++next_frame;  		next_frame = next_frame % cycle_frame_no; -		sInterpVal = (!mInitialized) ? 1 : (F32)next_frame / cycle_frame_no; +		mInterpVal = (!mInitialized) ? 1 : (F32)next_frame / cycle_frame_no;  		// sInterpVal = (F32)next_frame / cycle_frame_no; -		LLSkyTex::setInterpVal( sInterpVal ); -		LLHeavenBody::setInterpVal( sInterpVal ); +		LLSkyTex::setInterpVal( mInterpVal ); +		LLHeavenBody::setInterpVal( mInterpVal );  		calcAtmospherics();  		if (mForceUpdate || total_no_tiles == frame) diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index ef74324e58..8366909755 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -613,7 +613,7 @@ protected:  	LLColor3			mLastTotalAmbient;  	F32					mAmbientScale;  	LLColor3			mNightColorShift; -	F32					sInterpVal; +	F32					mInterpVal;  	LLColor4			mFogColor;  	LLColor4			mGLFogCol; @@ -636,8 +636,8 @@ protected:  public:  	//by bao  	//fake vertex buffer updating -	//to guaranttee at least updating one VBO buffer every frame -	//to walk around the bug caused by ATI card --> DEV-3855 +	//to guarantee at least updating one VBO buffer every frame +	//to work around the bug caused by ATI card --> DEV-3855  	//  	void createDummyVertexBuffer() ;  	void updateDummyVertexBuffer() ; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 295c0c8010..bfe38c14ba 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -180,8 +180,10 @@ LLVOVolume::LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *re  	mRelativeXform.setIdentity();  	mRelativeXformInvTrans.setIdentity(); +	mFaceMappingChanged = FALSE;  	mLOD = MIN_LOD;  	mTextureAnimp = NULL; +	mVolumeChanged = FALSE;  	mVObjRadius = LLVector3(1,1,0.5f).length();  	mNumFaces = 0;  	mLODChanged = FALSE; diff --git a/indra/newview/llwearable.cpp b/indra/newview/llwearable.cpp index b789bd3650..d093031bea 100644 --- a/indra/newview/llwearable.cpp +++ b/indra/newview/llwearable.cpp @@ -818,16 +818,13 @@ const LLLocalTextureObject* LLWearable::getConstLocalTextureObject(S32 index) co  	return NULL;  } -void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject *lto) +void LLWearable::setLocalTextureObject(S32 index, LLLocalTextureObject <o)  {  	if( mTEMap.find(index) != mTEMap.end() )  	{  		mTEMap.erase(index);  	} -	if( lto ) -	{ -		mTEMap[index] = new LLLocalTextureObject(*lto); -	} +	mTEMap[index] = new LLLocalTextureObject(lto);  } diff --git a/indra/newview/llwearable.h b/indra/newview/llwearable.h index 7a579b248e..dae983bcf3 100644 --- a/indra/newview/llwearable.h +++ b/indra/newview/llwearable.h @@ -114,7 +114,7 @@ public:  	LLLocalTextureObject* getLocalTextureObject(S32 index);  	const LLLocalTextureObject* getConstLocalTextureObject(S32 index) const; -	void				setLocalTextureObject(S32 index, LLLocalTextureObject *lto); +	void				setLocalTextureObject(S32 index, LLLocalTextureObject <o);  	void				addVisualParam(LLVisualParam *param);  	void				setVisualParams();  	void 				setVisualParamWeight(S32 index, F32 value, BOOL upload_bake); diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp index 5636256856..d6a9837b86 100644 --- a/indra/newview/llwearablelist.cpp +++ b/indra/newview/llwearablelist.cpp @@ -38,7 +38,6 @@  #include "llassetstorage.h"  #include "llagent.h"  #include "llvoavatar.h" -#include "llviewerinventory.h"  #include "llviewerstats.h"  #include "llnotificationsutil.h"  #include "llinventorymodel.h" diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index d2e5473157..9aaa660574 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -12,7 +12,7 @@   can_minimize="true"   can_close="true"   visible="false" - width="360" + width="440"   can_resize="true"   min_width="250"   min_height="190"> @@ -20,7 +20,7 @@     animate="false"     follows="all"    height="320" -  width="360" +  width="440"    layout="topleft"    orientation="horizontal"    name="im_panels" @@ -38,7 +38,7 @@         left="0"         top="0"         height="200" -	     width="245" +	     width="325"         user_resize="true">          <button            height="20" @@ -65,7 +65,7 @@           parse_highlights="true"           allow_html="true"          left="1" -         width="240"> +         width="320">          </chat_history>          <line_editor           bottom="0" @@ -75,7 +75,7 @@           label="To"           layout="bottomleft"           name="chat_editor" -         width="240"> +         width="320">          </line_editor>      </layout_panel>    </layout_stack> diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml index d96f3c5494..649f0edff7 100644 --- a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml @@ -62,14 +62,4 @@           function="Gesture.EnableAction"           parameter="edit_gesture" />      </menu_item_call> -    <menu_item_call -     label="Inspect" -     layout="topleft" -     name="inspect"> -        <on_click -         function="Gesture.Action.ShowPreview" /> -        <on_enable -         function="Gesture.EnableAction" -         parameter="inspect" /> -    </menu_item_call>  </menu> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 41f4621d66..2adee19ef6 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -2941,7 +2941,6 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo     type="alert">  You have reached your maximum number of groups. Please leave another group before joining this one, or decline the offer.  [NAME] has invited you to join a group as a member. -[INVITE]      <usetemplate       name="okcancelbuttons"       notext="Decline" @@ -3851,7 +3850,7 @@ Are you sure you want to quit?     type="alertmodal">  Use this tool to report violations of the [http://secondlife.com/corporate/tos.php Terms of Service] and [http://secondlife.com/corporate/cs.php Community Standards]. -All reported abuses are investigated and resolved. You can view the resolution by reading the [http://secondlife.com/support/incidentreport.php Incident Report]. +All reported abuses are investigated and resolved.     <unique/>    </notification> @@ -5157,7 +5156,7 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th    <notification     icon="notify.tga"     name="OfferFriendship" -   type="alertmodal"> +   type="offer">  [NAME] is offering friendship.  [MESSAGE] @@ -5172,10 +5171,6 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you th         index="1"         name="Decline"         text="Decline"/> -      <button -       index="2" -       name="Send IM" -       text="Send IM"/>      </form>    </notification> diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml index 39170b90ca..072ea882e6 100644 --- a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml +++ b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml @@ -29,7 +29,7 @@       text_color="white"       top="5"       width="250"> -        Blocked List +        Block List       </text>      <scroll_list       follows="all" diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml index 65ccd10cf0..7489988722 100644 --- a/indra/newview/skins/default/xui/en/panel_pick_info.xml +++ b/indra/newview/skins/default/xui/en/panel_pick_info.xml @@ -88,6 +88,7 @@           follows="all"           height="100"           width="280" +         allow_html="true"	           hide_scrollbar="false"           layout="topleft"           left="10" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml index 0aaeb6114e..f7e3ede93c 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml @@ -174,8 +174,7 @@      </text>          <line_editor       bottom="366" -     control_name="InstantMessageLogFolder" -     enabled="false" +     control_name="InstantMessageLogPath"       follows="top|left|right"       halign="right"       height="23" diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 1c0a8ba7c5..70a58b8e03 100644 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -96,7 +96,7 @@      name="damage_icon"      width="14"      height="13" -    top="25" +    top="21"      left="2"      follows="right|top"      image_name="Parcel_Damage_Dark" | 
