diff options
53 files changed, 374 insertions, 139 deletions
| diff --git a/BuildParams b/BuildParams index 4cf1fa75d8..8e4164d5ca 100644 --- a/BuildParams +++ b/BuildParams @@ -14,6 +14,9 @@ public_build = true  # Update Public Inworld Build Status Indicators  email_status_this_is_os = true +# Limit extent of codeticket updates to revisions after... +codeticket_since = 2.2.0-release +  # ========================================  # Viewer Development  # ======================================== diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp index 148aaf8aed..49d05ef411 100644 --- a/indra/llcommon/llthread.cpp +++ b/indra/llcommon/llthread.cpp @@ -63,9 +63,6 @@ void *APR_THREAD_FUNC LLThread::staticRun(apr_thread_t *apr_threadp, void *datap  {  	LLThread *threadp = (LLThread *)datap; -	// Set thread state to running -	threadp->mStatus = RUNNING; -  	// Run the user supplied function  	threadp->run(); @@ -167,10 +164,25 @@ void LLThread::shutdown()  void LLThread::start()  { -	apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp);	 +	llassert(isStopped()); +	 +	// Set thread state to running +	mStatus = RUNNING; -	// We won't bother joining -	apr_thread_detach(mAPRThreadp); +	apr_status_t status = +		apr_thread_create(&mAPRThreadp, NULL, staticRun, (void *)this, mAPRPoolp); +	 +	if(status == APR_SUCCESS) +	{	 +		// We won't bother joining +		apr_thread_detach(mAPRThreadp); +	} +	else +	{ +		mStatus = STOPPED; +		llwarns << "failed to start thread " << mName << llendl; +		ll_apr_warn_status(status); +	}  }  //============================================================================ diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index 2dabbc7767..a268ee5d75 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -769,7 +769,7 @@ BOOL LLComboBox::handleKeyHere(KEY key, MASK mask)  			return FALSE;  		}  		// if selection has changed, pop open list -		else if (mList->getLastSelectedItem() != last_selected_item) +		else  		{  			showList();  		} diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index d48674f306..f6f5a0beb3 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -220,10 +220,15 @@ void LLDockControl::moveDockable()  	case TOP:  		x = dockRect.getCenterX() - dockableRect.getWidth() / 2;  		y = dockRect.mTop + dockableRect.getHeight(); -		// unique docking used with dock tongue, so add tongue height o the Y coordinate +		// unique docking used with dock tongue, so add tongue height to the Y coordinate  		if (use_tongue)  		{  			y += mDockTongue->getHeight(); + +			if ( y > rootRect.mTop) +			{ +				y = rootRect.mTop; +			}  		}  		// check is dockable inside root view rect @@ -257,7 +262,7 @@ void LLDockControl::moveDockable()  	case BOTTOM:  		x = dockRect.getCenterX() - dockableRect.getWidth() / 2;  		y = dockRect.mBottom; -		// unique docking used with dock tongue, so add tongue height o the Y coordinate +		// unique docking used with dock tongue, so add tongue height to the Y coordinate  		if (use_tongue)  		{  			y -= mDockTongue->getHeight(); @@ -292,9 +297,21 @@ void LLDockControl::moveDockable()  		break;  	} -	// move dockable -	dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), -			dockableRect.getHeight()); +	S32 max_available_height = rootRect.getHeight() - mDockTongueY - mDockTongue->getHeight(); + +	// A floater should be shrunk so it doesn't cover a part of its docking tongue and +	// there is a space between a dockable floater and a control to which it is docked. +	if (use_tongue && dockableRect.getHeight() >= max_available_height) +	{ +		dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), max_available_height); +		mDockableFloater->reshape(dockableRect.getWidth(), dockableRect.getHeight()); +	} +	else +	{ +		// move dockable +		dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), +				dockableRect.getHeight()); +	}  	LLRect localDocableParentRect;  	mDockableFloater->getParent()->screenRectToLocal(dockableRect,  			&localDocableParentRect); diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp index ac568a83e4..eed0085273 100644 --- a/indra/llui/llmenubutton.cpp +++ b/indra/llui/llmenubutton.cpp @@ -175,6 +175,13 @@ void LLMenuButton::updateMenuOrigin()  			mY = rect.mTop + mMenuHandle.get()->getRect().getHeight();  			break;  		} +		case MP_TOP_RIGHT: +		{ +			const LLRect& menu_rect = mMenuHandle.get()->getRect(); +			mX = rect.mRight - menu_rect.getWidth(); +			mY = rect.mTop + menu_rect.getHeight(); +			break; +		}  		case MP_BOTTOM_LEFT:  		{  			mX = rect.mLeft; diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h index 9e91b9e99d..7b657595da 100644 --- a/indra/llui/llmenubutton.h +++ b/indra/llui/llmenubutton.h @@ -47,6 +47,7 @@ public:  	typedef enum e_menu_position  	{  		MP_TOP_LEFT, +		MP_TOP_RIGHT,  		MP_BOTTOM_LEFT  	} EMenuPosition; diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index 2a4c1ca44c..696e4a2bb1 100644 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -83,7 +83,14 @@ void LLScrollColumnHeader::draw()  			&& (sort_column == mColumn->mSortingColumn || sort_column == mColumn->mName);  	BOOL is_ascending = mColumn->mParentCtrl->getSortAscending(); -	setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, draw_arrow ? LLColor4::white : LLColor4::transparent); +	if (draw_arrow) +	{ +		setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, LLColor4::white); +	} +	else +	{ +		setImageOverlay(LLUUID::null); +	}  	// Draw children  	LLButton::draw(); diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index fa49c1ac4c..679637caf6 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1877,6 +1877,7 @@ if (LL_TESTS)      lldateutil.cpp      llmediadataclient.cpp      lllogininstance.cpp +    llremoteparcelrequest.cpp      llviewerhelputil.cpp      llversioninfo.cpp    ) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0f946b0f0b..7dbb375a20 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -11121,7 +11121,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://update.secondlife.com</string> +      <string>https://update.secondlife.com</string>      </map>      <key>UpdaterServicePath</key>      <map> diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 6c598d5d71..aebebad96a 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -33,6 +33,7 @@  #include "llagentconstants.h"  #include "llagentdata.h" 			// gAgentID, gAgentSessionID  #include "llcharacter.h" 			// LLAnimPauseRequest +#include "llcoordframe.h"			// for mFrameAgent  #include "llpointer.h"  #include "lluicolor.h"  #include "llvoavatardefines.h" diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 29c2b7565e..6ccb5aaf54 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -1365,20 +1365,33 @@ void LLBottomTray::processExtendButtons(S32& available_width)  		processExtendButton(*it, available_width);  	} +	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth(); +	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth(); +	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width; +  	// then try to extend Speak button -	if (available_width > 0) +	if (available_width > 0 || available_width_chiclet > 0)  	{  		S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];  		S32 panel_width = mSpeakPanel->getRect().getWidth();  		S32 possible_extend_width = panel_max_width - panel_width; -		if (possible_extend_width >= 0 && possible_extend_width <= available_width)  // HACK: this button doesn't change size so possible_extend_width will be 0 + +		if (possible_extend_width >= 0 && possible_extend_width <= available_width + available_width_chiclet)  // HACK: this button doesn't change size so possible_extend_width will be 0  		{  			mSpeakBtn->setLabelVisible(true);  			mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());  			log(mSpeakBtn, "speak button is extended"); -			available_width -= possible_extend_width; - +			if( available_width > possible_extend_width) +			{ +				available_width -= possible_extend_width; +			} +			else +			{ +				S32 required_width = possible_extend_width - available_width; +				available_width = 0; +				mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_width, mChicletPanel->getParent()->getRect().getHeight()); +			}  			lldebugs << "Extending Speak button panel: " << mSpeakPanel->getName()  				<< ", extended width: " << possible_extend_width  				<< ", rest width to process: " << available_width diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 2922a4d654..f5f59d5973 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -573,7 +573,12 @@ void LLIMModel::LLIMSession::buildHistoryFileName()  	//ad-hoc requires sophisticated chat history saving schemes  	if (isAdHoc())  	{ -		//in case of outgoing ad-hoc sessions +		/* in case of outgoing ad-hoc sessions we need to make specilized names +		* if this naming system is ever changed then the filtering definitions in  +		* lllogchat.cpp need to be change acordingly so that the filtering for the +		* date stamp code introduced in STORM-102 will work properly and not add +		* a date stamp to the Ad-hoc conferences. +		*/  		if (mInitialTargetIDs.size())  		{  			std::set<LLUUID> sorted_uuids(mInitialTargetIDs.begin(), mInitialTargetIDs.end()); diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 2fb5ba82ba..0121bbb1ed 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -89,6 +89,16 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+   */  const static boost::regex NAME_AND_TEXT("([^:]+[:]{1})?(\\s*)(.*)"); +/**
 + * These are recognizers for matching the names of ad-hoc conferences when generating the log file name
 + * On invited side, an ad-hoc is named like "<first name> <last name> Conference 2010/11/19 03:43 f0f4"
 + * On initiating side, an ad-hoc is named like Ad-hoc Conference hash<hash>"
 + * If the naming system for ad-hoc conferences are change in LLIMModel::LLIMSession::buildHistoryFileName()
 + * then these definition need to be adjusted as well.
 + */
 +const static boost::regex INBOUND_CONFERENCE("^[a-zA-Z]{1,31} [a-zA-Z]{1,31} Conference [0-9]{4}/[0-9]{2}/[0-9]{2} [0-9]{2}:[0-9]{2} [0-9a-f]{4}");
 +const static boost::regex OUTBOUND_CONFERENCE("^Ad-hoc Conference hash[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
 +  //is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st"  const static std::string NAME_TEXT_DIVIDER(": "); @@ -182,25 +192,37 @@ private:  //static  std::string LLLogChat::makeLogFileName(std::string filename)  { -    if( gSavedPerAccountSettings.getBOOL("LogFileNamewithDate") ) +	/** +	* Testing for in bound and out bound ad-hoc file names +	* if it is then skip date stamping. +	**/ +	//LL_INFOS("") << "Befor:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */ +    boost::match_results<std::string::const_iterator> matches; +	bool inboundConf = boost::regex_match(filename, matches, INBOUND_CONFERENCE); +	bool outboundConf = boost::regex_match(filename, matches, OUTBOUND_CONFERENCE); +	if (!(inboundConf || outboundConf))  	{ -		time_t now; -		time(&now); -		char dbuffer[20];		/* Flawfinder: ignore */ -		if (filename == "chat") +		if( gSavedPerAccountSettings.getBOOL("LogFileNamewithDate") )  		{ -			strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&now)); -		} -		else -		{ -			strftime(dbuffer, 20, "-%Y-%m", localtime(&now)); +			time_t now; +			time(&now); +			char dbuffer[20];		/* Flawfinder: ignore */ +			if (filename == "chat") +			{ +				strftime(dbuffer, 20, "-%Y-%m-%d", localtime(&now)); +			} +			else +			{ +				strftime(dbuffer, 20, "-%Y-%m", localtime(&now)); +			} +			filename += dbuffer;  		} -		filename += dbuffer;  	} +	//LL_INFOS("") << "After:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */  	filename = cleanFileName(filename);  	filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_ACCOUNT_CHAT_LOGS,filename);  	filename += ".txt"; -	//LL_INFOS("") << "Current:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */ +	//LL_INFOS("") << "Full:" << filename << LL_ENDL;/* uncomment if you want to verify step, delete on commit */  	return filename;  } diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 57180f63b5..1249d5d856 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -34,6 +34,7 @@  #include "llcombobox.h"  #include "lldateutil.h"			// ageFromDate()  #include "llimview.h" +#include "llmenubutton.h"  #include "llnotificationsutil.h"  #include "lltexteditor.h"  #include "lltexturectrl.h" @@ -479,7 +480,6 @@ BOOL LLPanelAvatarProfile::postBuild()  	childSetCommitCallback("im",(boost::bind(&LLPanelAvatarProfile::onIMButtonClick,this)),NULL);  	childSetCommitCallback("call",(boost::bind(&LLPanelAvatarProfile::onCallButtonClick,this)),NULL);  	childSetCommitCallback("teleport",(boost::bind(&LLPanelAvatarProfile::onTeleportButtonClick,this)),NULL); -	childSetCommitCallback("overflow_btn", boost::bind(&LLPanelAvatarProfile::onOverflowButtonClicked, this), NULL);  	childSetCommitCallback("share",(boost::bind(&LLPanelAvatarProfile::onShareButtonClick,this)),NULL);  	childSetCommitCallback("show_on_map_btn", (boost::bind(  			&LLPanelAvatarProfile::onMapButtonClick, this)), NULL); @@ -500,7 +500,8 @@ BOOL LLPanelAvatarProfile::postBuild()  	enable.add("Profile.EnableBlock", boost::bind(&LLPanelAvatarProfile::enableBlock, this));  	enable.add("Profile.EnableUnblock", boost::bind(&LLPanelAvatarProfile::enableUnblock, this)); -	mProfileMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	LLToggleableMenu* profile_menu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_profile_overflow.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	getChild<LLMenuButton>("overflow_btn")->setMenu(profile_menu, LLMenuButton::MP_TOP_RIGHT);  	LLVoiceClient::getInstance()->addObserver((LLVoiceClientStatusObserver*)this); @@ -752,23 +753,6 @@ void LLPanelAvatarProfile::onShareButtonClick()  	//*TODO not implemented  } -void LLPanelAvatarProfile::onOverflowButtonClicked() -{ -	if (!mProfileMenu->toggleVisibility()) -		return; - -	LLView* btn = getChild<LLView>("overflow_btn"); - -	if (mProfileMenu->getButtonRect().isEmpty()) -	{ -		mProfileMenu->setButtonRect(btn); -	} -	mProfileMenu->updateParent(LLMenuGL::sMenuContainer); - -	LLRect rect = btn->getRect(); -	LLMenuGL::showPopup(this, mProfileMenu, rect.mRight, rect.mTop); -} -  LLPanelAvatarProfile::~LLPanelAvatarProfile()  {  	if(getAvatarId().notNull()) diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h index 11c7716322..71d9d0a95a 100644 --- a/indra/newview/llpanelavatar.h +++ b/indra/newview/llpanelavatar.h @@ -34,7 +34,6 @@  class LLComboBox;  class LLLineEditor; -class LLToggleableMenu;  enum EOnlineStatus  { @@ -207,14 +206,11 @@ protected:  	void onCallButtonClick();  	void onTeleportButtonClick();  	void onShareButtonClick(); -	void onOverflowButtonClicked();  private:  	typedef std::map< std::string,LLUUID>	group_map_t;  	group_map_t 			mGroups; - -	LLToggleableMenu*		mProfileMenu;  };  /** diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index d25b8e0e02..e8c8273a9d 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -520,9 +520,6 @@ void LLLandmarksPanel::setParcelID(const LLUUID& parcel_id)  {  	if (!parcel_id.isNull())  	{ -        //ext-4655, defensive. remove now incase this gets called twice without a remove -        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(parcel_id, this); -          		LLRemoteParcelInfoProcessor::getInstance()->addObserver(parcel_id, this);  		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(parcel_id);  	} diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 71c812efe2..9e9bc5fc1a 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1367,9 +1367,6 @@ void LLPanelPeople::onMoreButtonClicked()  void	LLPanelPeople::onOpen(const LLSD& key)  {  	std::string tab_name = key["people_panel_tab_name"]; -	mFilterEditor -> clear(); -	onFilterEdit(""); -	  	if (!tab_name.empty())  		mTabContainer->selectTabByName(tab_name);  } diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 271728220c..44cca21a76 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -204,9 +204,6 @@ void LLPanelPickInfo::sendParcelInfoRequest()  {  	if (mParcelId != mRequestedId)  	{ -        //ext-4655, remove now incase this gets called twice without a remove -        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedId, this); -          		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelId, this);  		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelId); diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 9cbb512e70..4ae0c0eb12 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -128,10 +128,6 @@ void LLPanelPlaceInfo::sendParcelInfoRequest()  {  	if (mParcelID != mRequestedID)  	{ -        //ext-4655, defensive. remove now incase this gets called twice without a remove -        //as panel never closes its ok atm (but wrong :)  -        LLRemoteParcelInfoProcessor::getInstance()->removeObserver(mRequestedID, this); -  		LLRemoteParcelInfoProcessor::getInstance()->addObserver(mParcelID, this);  		LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(mParcelID); diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index f0e60386b6..c524fd7059 100644 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -39,6 +39,7 @@  #include "llfiltereditor.h"  #include "llfirstuse.h"  #include "llfloaterreg.h" +#include "llmenubutton.h"  #include "llnotificationsutil.h"  #include "lltabcontainer.h"  #include "lltexteditor.h" @@ -282,8 +283,8 @@ BOOL LLPanelPlaces::postBuild()  	mCloseBtn = getChild<LLButton>("close_btn");  	mCloseBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onBackButtonClicked, this)); -	mOverflowBtn = getChild<LLButton>("overflow_btn"); -	mOverflowBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this)); +	mOverflowBtn = getChild<LLMenuButton>("overflow_btn"); +	mOverflowBtn->setMouseDownCallback(boost::bind(&LLPanelPlaces::onOverflowButtonClicked, this));  	mPlaceInfoBtn = getChild<LLButton>("profile_btn");  	mPlaceInfoBtn->setClickedCallback(boost::bind(&LLPanelPlaces::onProfileButtonClicked, this)); @@ -783,16 +784,7 @@ void LLPanelPlaces::onOverflowButtonClicked()  		return;  	} -	if (!menu->toggleVisibility()) -		return; - -	if (menu->getButtonRect().isEmpty()) -	{ -		menu->setButtonRect(mOverflowBtn); -	} -	menu->updateParent(LLMenuGL::sMenuContainer); -	LLRect rect = mOverflowBtn->getRect(); -	LLMenuGL::showPopup(this, menu, rect.mRight, rect.mTop); +	mOverflowBtn->setMenu(menu, LLMenuButton::MP_TOP_RIGHT);  }  void LLPanelPlaces::onProfileButtonClicked() diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h index c3b2ab806f..5523122a0f 100644 --- a/indra/newview/llpanelplaces.h +++ b/indra/newview/llpanelplaces.h @@ -47,6 +47,7 @@ class LLPlacesParcelObserver;  class LLRemoteParcelInfoObserver;  class LLTabContainer;  class LLToggleableMenu; +class LLMenuButton;  typedef std::pair<LLUUID, std::string>	folder_pair_t; @@ -123,7 +124,7 @@ private:  	LLButton*					mSaveBtn;  	LLButton*					mCancelBtn;  	LLButton*					mCloseBtn; -	LLButton*					mOverflowBtn; +	LLMenuButton*				mOverflowBtn;  	LLButton*					mPlaceInfoBtn;  	LLPlacesInventoryObserver*	mInventoryObserver; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index fff8ccb912..9b35e78134 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -181,9 +181,11 @@ void LLTeleportHistoryFlatItem::setRegionName(const std::string& name)  void LLTeleportHistoryFlatItem::updateTitle()  { +	static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", LLColor4U(255, 255, 255)); +  	LLTextUtil::textboxSetHighlightedVal(  		mTitle, -		LLStyle::Params(), +		LLStyle::Params().color(sFgColor),  		mRegionName,  		mHighlight);  } diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp index d63a48647d..10d4452ed2 100644 --- a/indra/newview/llremoteparcelrequest.cpp +++ b/indra/newview/llremoteparcelrequest.cpp @@ -77,23 +77,19 @@ void LLRemoteParcelRequestResponder::error(U32 status, const std::string& reason  void LLRemoteParcelInfoProcessor::addObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer)  { -	// Check if the observer is already in observers list for this UUID  	observer_multimap_t::iterator it; +	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id); -	it = mObservers.find(parcel_id); -	while (it != mObservers.end()) +	// Check if the observer is already in observers list for this UUID +	for(it = mObservers.find(parcel_id); it != end; ++it)  	{ -		if (it->second == observer) +		if (it->second.get() == observer)  		{  			return;  		} -		else -		{ -			++it; -		}  	} -	mObservers.insert(std::pair<LLUUID, LLRemoteParcelInfoObserver*>(parcel_id, observer)); +	mObservers.insert(std::make_pair(parcel_id, observer->getObserverHandle()));  }  void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemoteParcelInfoObserver* observer) @@ -104,19 +100,15 @@ void LLRemoteParcelInfoProcessor::removeObserver(const LLUUID& parcel_id, LLRemo  	}  	observer_multimap_t::iterator it; +	observer_multimap_t::iterator end = mObservers.upper_bound(parcel_id); -	it = mObservers.find(parcel_id); -	while (it != mObservers.end()) +	for(it = mObservers.find(parcel_id); it != end; ++it)  	{ -		if (it->second == observer) +		if (it->second.get() == observer)  		{  			mObservers.erase(it);  			break;  		} -		else -		{ -			++it; -		}  	}  } @@ -141,13 +133,34 @@ void LLRemoteParcelInfoProcessor::processParcelInfoReply(LLMessageSystem* msg, v  	msg->getS32		("Data", "SalePrice", parcel_data.sale_price);  	msg->getS32		("Data", "AuctionID", parcel_data.auction_id); -	LLRemoteParcelInfoProcessor::observer_multimap_t observers = LLRemoteParcelInfoProcessor::getInstance()->mObservers; +	LLRemoteParcelInfoProcessor::observer_multimap_t & observers = LLRemoteParcelInfoProcessor::getInstance()->mObservers; + +	typedef std::vector<observer_multimap_t::iterator> deadlist_t; +	deadlist_t dead_iters; -	observer_multimap_t::iterator oi = observers.find(parcel_data.parcel_id); +	observer_multimap_t::iterator oi;  	observer_multimap_t::iterator end = observers.upper_bound(parcel_data.parcel_id); -	for (; oi != end; ++oi) + +	for (oi = observers.find(parcel_data.parcel_id); oi != end; ++oi) +	{ +		LLRemoteParcelInfoObserver * observer = oi->second.get(); +		if(observer) +		{ +			observer->processParcelInfo(parcel_data); +		} +		else +		{ +			// the handle points to an expired observer, so don't keep it +			// around anymore +			dead_iters.push_back(oi); +		} +	} + +	deadlist_t::iterator i; +	deadlist_t::iterator end_dead = dead_iters.end(); +	for(i = dead_iters.begin(); i != end_dead; ++i)  	{ -		oi->second->processParcelInfo(parcel_data); +		observers.erase(*i);  	}  } diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h index a6c62995a9..74cf1616df 100644 --- a/indra/newview/llremoteparcelrequest.h +++ b/indra/newview/llremoteparcelrequest.h @@ -98,7 +98,7 @@ public:  	static void processParcelInfoReply(LLMessageSystem* msg, void**);  private: -	typedef std::multimap<LLUUID, LLRemoteParcelInfoObserver*> observer_multimap_t; +	typedef std::multimap<LLUUID, LLHandle<LLRemoteParcelInfoObserver> > observer_multimap_t;  	observer_multimap_t mObservers;  }; diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 1999f14828..b316171604 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -183,12 +183,15 @@ void LLSidepanelAppearance::onOpen(const LLSD& key)  void LLSidepanelAppearance::onVisibilityChange(const LLSD &new_visibility)  { -	updateToVisibility(new_visibility); +	LLSD visibility; +	visibility["visible"] = new_visibility.asBoolean(); +	visibility["reset_accordion"] = true; +	updateToVisibility(visibility);  }  void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)  { -	if (new_visibility.asBoolean()) +	if (new_visibility["visible"].asBoolean())  	{  		bool is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible();  		bool is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible(); @@ -209,7 +212,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)  				}  			} -			if (is_outfit_edit_visible) +			if (is_outfit_edit_visible && new_visibility["reset_accordion"].asBoolean())  			{  				mOutfitEdit->resetAccordionState();  			} diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index a4f855f279..2905e369f1 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -298,7 +298,11 @@ static void on_minimize(LLSidepanelAppearance* panel, LLSD minimized)  {  	if (!panel) return;  	bool visible = !minimized.asBoolean(); -	panel->updateToVisibility(LLSD(visible));	 +	LLSD visibility; +	visibility["visible"] = visible; +	// Do not reset accordion state on minimize (STORM-375) +	visibility["reset_accordion"] = false; +	panel->updateToVisibility(visibility);  }  void LLSideTrayTab::undock(LLFloater* floater_tab) diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 0250627d1b..5f9e343907 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -783,11 +783,19 @@ void LLVOAvatarSelf::removeMissingBakedTextures()  	for (U32 i = 0; i < mBakedTextureDatas.size(); i++)  	{  		const S32 te = mBakedTextureDatas[i].mTextureIndex; -		LLViewerTexture* tex = getTEImage(te) ; +		const LLViewerTexture* tex = getTEImage(te); + +		// Replace with default if we can't find the asset, assuming the +		// default is actually valid (which it should be unless something +		// is seriously wrong).  		if (!tex || tex->isMissingAsset())  		{ -			setTEImage(te, LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR)); -			removed = TRUE; +			LLViewerTexture *imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR); +			if (imagep) +			{ +				setTEImage(te, imagep); +				removed = TRUE; +			}  		}  	} @@ -823,7 +831,6 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)  		//	<< llendl;  	} -  	if (!regionp || (regionp->getHandle() != mLastRegionHandle))  	{  		if (mLastRegionHandle != 0) diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index aeea2306f7..be94b40065 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -140,7 +140,7 @@       reference="AvatarListItemIconOfflineColor" />      <color       name="BackgroundChatColor" -     reference="DkGray_66" /> +     reference="White" />      <color       name="ButtonBorderColor"       reference="Unused?" /> diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 1ca5fff2ca..63c06ec27e 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -849,7 +849,7 @@ For at få adgang til voksen regioner, skal beboere være alders-checket, enten  		<usetemplate ignoretext="Start min browser for at se min konto historik" name="okcancelignore" notext="Cancel" yestext="Go to page"/>  	</notification>  	<notification name="ConfirmQuit"> -		Are you sure you want to quit? +		Er du sikker på at du vil afslutte?  		<usetemplate ignoretext="Bekræft før jeg afslutter" name="okcancelignore" notext="Afslut ikke" yestext="Quit"/>  	</notification>  	<notification name="DeleteItems"> diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml index ca3d7c71bb..fe8ca69f34 100644 --- a/indra/newview/skins/default/xui/da/panel_places.xml +++ b/indra/newview/skins/default/xui/da/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Redigér" name="edit_btn" tool_tip="Redigér landemærke information"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/da/panel_profile.xml b/indra/newview/skins/default/xui/da/panel_profile.xml index b2d1e9791a..b8b99a9c21 100644 --- a/indra/newview/skins/default/xui/da/panel_profile.xml +++ b/indra/newview/skins/default/xui/da/panel_profile.xml @@ -42,7 +42,7 @@  					<button label="Teleportér" name="teleport" tool_tip="Tilbyd teleport"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Betal eller del beholdning med denne beboer"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Betal eller del beholdning med denne beboer"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml index 0e85829a0b..36c77d4fe1 100644 --- a/indra/newview/skins/default/xui/de/panel_places.xml +++ b/indra/newview/skins/default/xui/de/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Bearbeiten" name="edit_btn" tool_tip="Landmarken-Info bearbeiten"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml index 40fa2f922a..938631f65d 100644 --- a/indra/newview/skins/default/xui/de/panel_profile.xml +++ b/indra/newview/skins/default/xui/de/panel_profile.xml @@ -57,7 +57,7 @@  					<button label="Teleportieren" name="teleport" tool_tip="Teleport anbieten"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Dem Einwohner Geld geben oder Inventar an den Einwohner schicken"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml index 36108442f3..8eee8f44b5 100644 --- a/indra/newview/skins/default/xui/en/floater_preferences.xml +++ b/indra/newview/skins/default/xui/en/floater_preferences.xml @@ -83,7 +83,7 @@           label="Move & View"           layout="topleft"           help_topic="preferences_move_tab" -         name="audio" /> +         name="move" />          <panel  		 class="panel_preference"           filename="panel_preferences_alerts.xml" diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml index 7bcd4962d2..813aa5d7a9 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml @@ -8,6 +8,17 @@  	 name="edit_alpha_panel"  	 top_pad="10"  	 width="333" > +   <scroll_container +    color="DkGray2" +    follows="all" +    height="400" +    layout="topleft" +    left="10" +    top_pad="0" +    name="avatar_alpha_color_panel_scroll" +    reserve_scroll_corner="false" +    opaque="true" +    width="313">     <panel        border="false"        bg_alpha_color="DkGray2" @@ -16,14 +27,14 @@        background_opaque="true"        follows="top|left|right"        height="400"  -      left="10"  +      left="0"         layout="topleft"         name="avatar_alpha_color_panel"        top="0"        width="313" >         <check_box          control_name="LowerAlphaTextureInvisible" -        follows="left" +        follows="left|top"          height="16"          layout="topleft"          left="5" @@ -48,7 +59,7 @@         <check_box          control_name="UpperAlphaTextureInvisible" -        follows="left" +        follows="left|top"          height="16"          layout="topleft"          left_pad="20" @@ -73,7 +84,7 @@         <check_box          control_name="HeadAlphaTextureInvisible" -        follows="left" +        follows="left|top"          height="16"          layout="topleft"          left="5" @@ -98,7 +109,7 @@         <check_box          control_name="Eye AlphaTextureInvisible" -        follows="left" +        follows="left|top"          height="16"          layout="topleft"          left_pad="20" @@ -123,7 +134,7 @@         <check_box          control_name="HairAlphaTextureInvisible" -        follows="left" +        follows="left|top"          height="16"          layout="topleft"          left="5" @@ -147,5 +158,6 @@         </texture_picker>  	 </panel> +	 </scroll_container>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml index 23a08344ea..97f1a1a658 100644 --- a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml +++ b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml @@ -14,7 +14,7 @@        bg_opaque_color="DkGray2"        background_visible="true"        background_opaque="true" -	  follows="top|left|right" +	  follows="all"  	  height="400"   	  left="10"   	  layout="topleft"  diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index 21314703b0..d9c357f277 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -211,7 +211,7 @@ background_visible="true"  				    user_resize="false"   				    auto_resize="true"  					width="24"> -						<button +						<menu_button  				         follows="bottom|left|right"  				         height="23"  				         label="▼" diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 3ceee60927..6573822d1a 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -181,7 +181,7 @@  		 label="Transparent Water"  		 layout="topleft"  		 left_delta="0" -		 name="BumpShiny" +		 name="TransparentWater"  		 top_pad="7"  		 width="256" />  		<check_box diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index efc37c2127..7caf425058 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -432,7 +432,7 @@  			    user_resize="false"   			    auto_resize="false"  				width="24"> -					<button +					<menu_button  			         follows="bottom|left|right"  			         height="23"  			         label="▼" diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml index 2e349c7fe2..4c90a7e6b4 100644 --- a/indra/newview/skins/default/xui/es/panel_places.xml +++ b/indra/newview/skins/default/xui/es/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Editar" name="edit_btn" tool_tip="Editar la información del hito"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml index 5cfe83cd61..339a1f236b 100644 --- a/indra/newview/skins/default/xui/es/panel_profile.xml +++ b/indra/newview/skins/default/xui/es/panel_profile.xml @@ -53,7 +53,7 @@  					<button label="Teleporte" name="teleport" tool_tip="Ofrecer teleporte"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Pagar dinero al Residente o compartir algo del inventario con él"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index 7f3601b90d..e252c224f8 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Modifier" name="edit_btn" tool_tip="Modifier les informations du repère"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml index 4606f5a0c6..6b611923af 100644 --- a/indra/newview/skins/default/xui/fr/panel_profile.xml +++ b/indra/newview/skins/default/xui/fr/panel_profile.xml @@ -57,7 +57,7 @@  					<button label="Téléporter" name="teleport" tool_tip="Proposer une téléportation"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Payer le résident ou partager l'inventaire avec lui"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Payer le résident ou partager l'inventaire avec lui"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml index e33f8190eb..61830f186f 100644 --- a/indra/newview/skins/default/xui/it/panel_places.xml +++ b/indra/newview/skins/default/xui/it/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Modifica" name="edit_btn" tool_tip="Modifica le informazioni del punto di riferimento"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/it/panel_profile.xml b/indra/newview/skins/default/xui/it/panel_profile.xml index 8a8d8f5846..c11adeda3d 100644 --- a/indra/newview/skins/default/xui/it/panel_profile.xml +++ b/indra/newview/skins/default/xui/it/panel_profile.xml @@ -53,7 +53,7 @@  					<button label="Teleport" name="teleport" tool_tip="Offri teleport"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall'inventario con il residente"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Paga del denaro o condividi qualcosa dall'inventario con il residente"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml index 3e364c9b3a..e19b86e552 100644 --- a/indra/newview/skins/default/xui/ja/panel_places.xml +++ b/indra/newview/skins/default/xui/ja/panel_places.xml @@ -21,7 +21,7 @@  						<button label="編集" name="edit_btn" tool_tip="ランドマークの情報を編集します"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/ja/panel_profile.xml b/indra/newview/skins/default/xui/ja/panel_profile.xml index 860020c87c..c2ffd74ec0 100644 --- a/indra/newview/skins/default/xui/ja/panel_profile.xml +++ b/indra/newview/skins/default/xui/ja/panel_profile.xml @@ -57,7 +57,7 @@  					<button label="テレポート" name="teleport" tool_tip="テレポートを送ります"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="住人にお金を渡すか持ち物を共有します"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml index e0a0cfd96a..34c105225d 100644 --- a/indra/newview/skins/default/xui/pl/panel_places.xml +++ b/indra/newview/skins/default/xui/pl/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Edytuj" name="edit_btn" tool_tip="Edytuj informacje landmarka"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/pl/panel_profile.xml b/indra/newview/skins/default/xui/pl/panel_profile.xml index f4a5699f8d..4152c00386 100644 --- a/indra/newview/skins/default/xui/pl/panel_profile.xml +++ b/indra/newview/skins/default/xui/pl/panel_profile.xml @@ -42,7 +42,7 @@  					<button label="Teleportuj" name="teleport" tool_tip="Teleportuj"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekt Rezydentowi"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Zapłać lub udostępnij obiekt Rezydentowi"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml index 2e443bc057..828ef3e469 100644 --- a/indra/newview/skins/default/xui/pt/panel_places.xml +++ b/indra/newview/skins/default/xui/pt/panel_places.xml @@ -21,7 +21,7 @@  						<button label="Editar" name="edit_btn" tool_tip="Editar dados do marco"/>  					</layout_panel>  					<layout_panel name="overflow_btn_lp"> -						<button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/> +						<menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>  					</layout_panel>  				</layout_stack>  				<layout_stack name="bottom_bar_ls3"> diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml index e4200ae5da..f984ed6a7b 100644 --- a/indra/newview/skins/default/xui/pt/panel_profile.xml +++ b/indra/newview/skins/default/xui/pt/panel_profile.xml @@ -53,7 +53,7 @@  					<button label="Teletransportar" name="teleport" tool_tip="Oferecer teletransporte"/>  				</layout_panel>  				<layout_panel name="overflow_btn_lp"> -					<button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/> +					<menu_button label="▼" name="overflow_btn" tool_tip="Pagar ou compartilhar inventário com o residente"/>  				</layout_panel>  			</layout_stack>  		</layout_panel> diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp new file mode 100644 index 0000000000..a6c1f69c82 --- /dev/null +++ b/indra/newview/tests/llremoteparcelrequest_test.cpp @@ -0,0 +1,134 @@ +/** 
 + * @file llremoteparcelrequest_test.cpp
 + * @author Brad Kittenbrink <brad@lindenlab.com>
 + *
 + * $LicenseInfo:firstyear=2010&license=viewerlgpl$
 + * Second Life Viewer Source Code
 + * Copyright (C) 2010, Linden Research, Inc.
 + * 
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation;
 + * version 2.1 of the License only.
 + * 
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + * 
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + * 
 + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
 + * $/LicenseInfo$
 + */
 +
 +#include "linden_common.h"
 +
 +#include "../test/lltut.h"
 +
 +#include "../llremoteparcelrequest.h"
 +
 +#include "../llagent.h"
 +#include "message.h"
 +
 +namespace {
 +	LLControlGroup s_saved_settings("dummy_settings");
 +	const LLUUID TEST_PARCEL_ID("11111111-1111-1111-1111-111111111111");
 +}
 +
 +LLCurl::Responder::Responder() { }
 +LLCurl::Responder::~Responder() { }
 +void LLCurl::Responder::error(U32,std::string const &) { }
 +void LLCurl::Responder::result(LLSD const &) { }
 +void LLCurl::Responder::errorWithContent(U32 status,std::string const &,LLSD const &) { }
 +void LLCurl::Responder::completedRaw(U32 status, std::string const &, LLChannelDescriptors const &,boost::shared_ptr<LLBufferArray> const &) { }
 +void LLCurl::Responder::completed(U32 status, std::string const &, LLSD const &) { }
 +void LLCurl::Responder::completedHeader(U32 status, std::string const &, LLSD const &) { }
 +void LLMessageSystem::getF32(char const *,char const *,F32 &,S32) { }
 +void LLMessageSystem::getU8(char const *,char const *,U8 &,S32) { }
 +void LLMessageSystem::getS32(char const *,char const *,S32 &,S32) { }
 +void LLMessageSystem::getString(char const *,char const *, std::string &,S32) { }
 +void LLMessageSystem::getUUID(char const *,char const *, LLUUID & out_id,S32)
 +{
 +	out_id = TEST_PARCEL_ID;
 +}
 +void LLMessageSystem::nextBlock(char const *) { }
 +void LLMessageSystem::addUUID(char const *,LLUUID const &) { }
 +void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { }
 +void LLMessageSystem::nextBlockFast(char const *) { }
 +void LLMessageSystem::newMessage(char const *) { }
 +LLMessageSystem * gMessageSystem;
 +char * _PREHASH_AgentID;
 +char * _PREHASH_AgentData;
 +LLAgent gAgent;
 +LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { }
 +LLAgent::~LLAgent() { }
 +void LLAgent::sendReliableMessage(void) { }
 +LLUUID gAgentSessionID;
 +LLUUID gAgentID;
 +LLUIColor::LLUIColor(void) { }
 +LLAgentAccess::LLAgentAccess(LLControlGroup & settings) : mSavedSettings(settings) { }
 +LLControlGroup::LLControlGroup(std::string const & name) : LLInstanceTracker<LLControlGroup, std::string>(name) { }
 +LLControlGroup::~LLControlGroup(void) { }
 +
 +namespace tut
 +{
 +	struct TestObserver : public LLRemoteParcelInfoObserver {
 +		TestObserver() : mProcessed(false) { }
 +
 +		virtual void processParcelInfo(const LLParcelData& parcel_data)
 +		{
 +			mProcessed = true;
 +		}
 +
 +		virtual void setParcelID(const LLUUID& parcel_id) { }
 +
 +		virtual void setErrorStatus(U32 status, const std::string& reason) { }
 +
 +		bool mProcessed;
 +	};
 +
 +    struct RemoteParcelRequestData
 +    {
 +		RemoteParcelRequestData()
 +		{
 +		}
 +    };
 +    
 +	typedef test_group<RemoteParcelRequestData> remoteparcelrequest_t;
 +	typedef remoteparcelrequest_t::object remoteparcelrequest_object_t;
 +	tut::remoteparcelrequest_t tut_remoteparcelrequest("LLRemoteParcelRequest");
 +
 +	template<> template<>
 +	void remoteparcelrequest_object_t::test<1>()
 +	{
 +		set_test_name("observer pointer");
 +
 +		boost::scoped_ptr<TestObserver> observer(new TestObserver());
 +
 +		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
 +		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer.get());
 +
 +		processor.processParcelInfoReply(gMessageSystem, NULL);
 +
 +		ensure(observer->mProcessed);
 +	}
 +
 +	template<> template<>
 +	void remoteparcelrequest_object_t::test<2>()
 +	{
 +		set_test_name("CHOP-220: dangling observer pointer");
 +
 +		LLRemoteParcelInfoObserver * observer = new TestObserver();
 +
 +		LLRemoteParcelInfoProcessor & processor = LLRemoteParcelInfoProcessor::instance();
 +		processor.addObserver(LLUUID(TEST_PARCEL_ID), observer);
 +
 +		delete observer;
 +		observer = NULL;
 +
 +		processor.processParcelInfoReply(gMessageSystem, NULL);
 +	}
 +}
 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 1bc118139f..6c77f8ec38 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -711,6 +711,11 @@ class DarwinManifest(ViewerManifest):              self.run_command('strip -S %(viewer_binary)r' %                               { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')}) +    def copy_finish(self): +        # Force executable permissions to be set for scripts +        # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802 +        for script in 'Contents/MacOS/update_install',: +            self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))      def package_finish(self):          channel_standin = 'Second Life Viewer 2'  # hah, our default channel is not usable on its own @@ -866,6 +871,12 @@ class LinuxManifest(ViewerManifest):          self.path("featuretable_linux.txt") +    def copy_finish(self): +        # Force executable permissions to be set for scripts +        # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802 +        for script in 'secondlife', 'bin/update_install': +            self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script)) +      def package_finish(self):          if 'installer_name' in self.args:              installer_name = self.args['installer_name'] | 
