diff options
Diffstat (limited to 'indra/newview')
41 files changed, 294 insertions, 236 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 33f5482e50..7172f0359a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3863,7 +3863,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://search.secondlife.com/viewer/[CATEGORY]?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string> +      <string>http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&g=[GODLIKE]&sid=[SESSION_ID]&rid=[REGION_ID]&pid=[PARCEL_ID]&channel=[CHANNEL]&version=[VERSION]&major=[VERSION_MAJOR]&minor=[VERSION_MINOR]&patch=[VERSION_PATCH]&build=[VERSION_BUILD]</string>      </map>      <key>HighResSnapshot</key>      <map> @@ -12145,5 +12145,16 @@        <key>Value</key>        <real>300.0</real>      </map> +    <key>GroupMembersSortOrder</key> +    <map> +      <key>Comment</key> +      <string>The order by which group members will be sorted (name|donated|online)</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>String</string> +      <key>Value</key> +      <string>name</string> +    </map>  </map>  </llsd> diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index ba14c248aa..931b9fd2f3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -30,6 +30,7 @@  // Viewer includes  #include "llversioninfo.h" +#include "llversionviewer.h"  #include "llfeaturemanager.h"  #include "lluictrlfactory.h"  #include "lltexteditor.h" @@ -4513,6 +4514,8 @@ void LLAppViewer::launchUpdater()  	LLAppViewer::sUpdaterInfo->mUpdateExePath += update_url.asString();  	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -name \"";  	LLAppViewer::sUpdaterInfo->mUpdateExePath += LLAppViewer::instance()->getSecondLifeTitle(); +	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" -bundleid \""; +	LLAppViewer::sUpdaterInfo->mUpdateExePath += LL_VERSION_BUNDLE_ID;  	LLAppViewer::sUpdaterInfo->mUpdateExePath += "\" &";  	LL_DEBUGS("AppInit") << "Calling updater: " << LLAppViewer::sUpdaterInfo->mUpdateExePath << LL_ENDL; diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index ababa71348..d353c809ca 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -31,6 +31,7 @@  #include "llchatmsgbox.h"  #include "llavatariconctrl.h" +#include "llcommandhandler.h"  #include "llfloaterreg.h"  #include "lllocalcliprect.h"  #include "lltrans.h" @@ -45,6 +46,40 @@ static const S32 msg_right_offset = 10;  static const S32 msg_height_pad = 5;  //******************************************************************************************************************* +// LLObjectHandler +//******************************************************************************************************************* + +// handle secondlife:///app/object/<ID>/inspect SLURLs +class LLObjectHandler : public LLCommandHandler +{ +public: +	LLObjectHandler() : LLCommandHandler("object", UNTRUSTED_BLOCK) { } + +	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) +	{ +		if (params.size() < 2) return false; + +		LLUUID object_id; +		if (!object_id.set(params[0], FALSE)) +		{ +			return false; +		} + +		const std::string verb = params[1].asString(); + +		if (verb == "inspect") +		{ +			LLFloaterReg::showInstance("inspect_object", LLSD().with("object_id", object_id)); +			return true; +		} + +		return false; +	} +}; + +LLObjectHandler gObjectHandler; + +//*******************************************************************************************************************  //LLNearbyChatToastPanel  //******************************************************************************************************************* @@ -169,17 +204,26 @@ void LLNearbyChatToastPanel::init(LLSD& notification)  	{  		std::string str_sender; -		str_sender = "<nolink>"; // disable parsing URLs in object names (STORM-358) -		str_sender += fromName; -		str_sender += "</nolink>"; +		str_sender = fromName;  		str_sender+=" "; -		//append user name +		//append sender name +		if (mSourceType == CHAT_SOURCE_AGENT || mSourceType == CHAT_SOURCE_OBJECT)  		{  			LLStyle::Params style_params_name;  			LLColor4 userNameColor = LLUIColorTable::instance().getColor("ChatToastAgentNameColor"); +			std::string href; + +			if (mSourceType == CHAT_SOURCE_AGENT) +			{ +				href = LLSLURL("agent", mFromID, "about").getSLURLString(); +			} +			else +			{ +				href = LLSLURL("object", mFromID, "inspect").getSLURLString(); +			}  			style_params_name.color(userNameColor); @@ -188,11 +232,16 @@ void LLNearbyChatToastPanel::init(LLSD& notification)  			style_params_name.font.name(font_name);  			style_params_name.font.size(font_style_size); -			style_params_name.link_href = LLSLURL("agent",mFromID,"about").getSLURLString(); +			style_params_name.link_href = href; +			style_params_name.is_link = true;  			msg_text->appendText(str_sender, FALSE, style_params_name);  		} +		else +		{ +			msg_text->appendText(str_sender, false); +		}  	}  	//append text diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp index ee8646aad0..f31ff14df6 100644 --- a/indra/newview/llcommandlineparser.cpp +++ b/indra/newview/llcommandlineparser.cpp @@ -267,7 +267,11 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)      {          clp.options(gOptionsDesc);          clp.positional(gPositionalOptions); -        clp.style(po::command_line_style::default_style  +		// SNOW-626: Boost 1.42 erroneously added allow_guessing to the default style +		// (see http://groups.google.com/group/boost-list/browse_thread/thread/545d7bf98ff9bb16?fwc=2&pli=1) +		// Remove allow_guessing from the default style, because that is not allowed +		// when we have options that are a prefix of other options (aka, --help and --helperuri). +        clp.style((po::command_line_style::default_style & ~po::command_line_style::allow_guessing)                    | po::command_line_style::allow_long_disguise);  		if(mExtraParser)  		{ diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 349ef8185f..914e7a3df0 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1068,17 +1068,27 @@ void LLIMModel::sendMessage(const std::string& utf8_text,  		if( session == 0)//??? shouldn't really happen  		{  			LLRecentPeople::instance().add(other_participant_id); +			return;  		} -		else +		// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat +		//		(it can be also Group chat but it is checked above) +		// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added +		// to Recent People to prevent showing of an item with (???)(???). See EXT-8246. +		// Concrete participants will be added into this list once they sent message in chat. +		if (IM_SESSION_INVITE == dialog) return; +			 +		if (IM_SESSION_CONFERENCE_START == dialog) // outgoing ad-hoc session  		{ -			// IM_SESSION_INVITE means that this is an Ad-hoc incoming chat -			//		(it can be also Group chat but it is checked above) -			// In this case mInitialTargetIDs contains Ad-hoc session ID and it should not be added -			// to Recent People to prevent showing of an item with (???)(???). See EXT-8246. -			// Concrete participants will be added into this list once they sent message in chat. -			if (IM_SESSION_INVITE == dialog) return; -			// Add only online members to recent (EXT-8658) -			addSpeakersToRecent(im_session_id);			 +			// Add only online members of conference to recent list (EXT-8658) +			addSpeakersToRecent(im_session_id); +		} +		else // outgoing P2P session +		{ +			// Add the recepient of the session. +			if (!session->mInitialTargetIDs.empty()) +			{ +				LLRecentPeople::instance().add(*(session->mInitialTargetIDs.begin())); +			}  		}  	}  } diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index db9d386b6b..33c968bf00 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -38,6 +38,7 @@  #include "llinventoryfunctions.h"  #include "llinventorymodel.h"  #include "lllistcontextmenu.h" +#include "llmenubutton.h"  #include "llnotificationsutil.h"  #include "lloutfitobserver.h"  #include "llsidetray.h" @@ -126,18 +127,6 @@ public:  		llassert(mMenu);  	} -	void show(LLView* spawning_view) -	{ -		if (!mMenu) return; - -		updateItemsVisibility(); -		mMenu->buildDrawLabels(); -		mMenu->updateParent(LLMenuGL::sMenuContainer); -		S32 menu_x = 0; -		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); -		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); -	} -  	void updateItemsVisibility()  	{  		if (!mMenu) return; @@ -148,6 +137,8 @@ public:  		mMenu->arrangeAndClear(); // update menu height  	} +	LLMenuGL* getMenu() { return mMenu; } +  private:  	const LLUUID& getSelectedOutfitID()  	{ @@ -386,6 +377,11 @@ BOOL LLOutfitsList::postBuild()  	mAccordion = getChild<LLAccordionCtrl>("outfits_accordion");  	mAccordion->setComparator(&OUTFIT_TAB_NAME_COMPARATOR); +	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn"); + +	menu_gear_btn->setMouseDownCallback(boost::bind(&LLOutfitListGearMenu::updateItemsVisibility, mGearMenu)); +	menu_gear_btn->setMenu(mGearMenu->getMenu()); +  	return TRUE;  } @@ -727,13 +723,6 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	return false;  } -// virtual -void LLOutfitsList::showGearMenu(LLView* spawning_view) -{ -	if (!mGearMenu) return; -	mGearMenu->show(spawning_view); -} -  void LLOutfitsList::getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const  {  	// Collect selected items from all selected lists. diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index f73ae5bef2..5fecbb83e7 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -94,8 +94,6 @@ public:  	/*virtual*/ bool isActionEnabled(const LLSD& userdata); -	/*virtual*/ void showGearMenu(LLView* spawning_view); -  	const LLUUID& getSelectedOutfitUUID() const { return mSelectedOutfitUUID; }  	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const; diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h index 81366c5db4..2ed6b00497 100644 --- a/indra/newview/llpanelappearancetab.h +++ b/indra/newview/llpanelappearancetab.h @@ -39,8 +39,6 @@ public:  	virtual bool isActionEnabled(const LLSD& userdata) = 0; -	virtual void showGearMenu(LLView* spawning_view) = 0; -  	virtual void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const {}  	static const std::string& getFilterSubString() { return sFilterSubString; } diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 35f898bfa6..0d1d96eae6 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -49,6 +49,7 @@  #include "llviewertexturelist.h"  #include "llviewerwindow.h"  #include "llfocusmgr.h" +#include "llviewercontrol.h"  #include "roles_constants.h" @@ -742,10 +743,12 @@ LLPanelGroupMembersSubTab::LLPanelGroupMembersSubTab()  	mHasMatch(FALSE),  	mNumOwnerAdditions(0)  { +	mUdpateSessionID = LLUUID::null;  }  LLPanelGroupMembersSubTab::~LLPanelGroupMembersSubTab()  { +	gSavedSettings.setString("GroupMembersSortOrder", mMembersList->getSortColumnName());  }  BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root) @@ -772,6 +775,17 @@ BOOL LLPanelGroupMembersSubTab::postBuildSubTab(LLView* root)  	// Show the member's profile on double click.  	mMembersList->setDoubleClickCallback(onMemberDoubleClick, this);  	mMembersList->setContextMenu(LLScrollListCtrl::MENU_AVATAR); +	 +	LLSD row; +	row["columns"][0]["column"] = "name"; +	row["columns"][1]["column"] = "donated"; +	row["columns"][2]["column"] = "online"; +	mMembersList->addElement(row); +	std::string order_by = gSavedSettings.getString("GroupMembersSortOrder"); +	if(!order_by.empty()) +	{ +		mMembersList->sortByColumn(order_by, TRUE); +	}	  	LLButton* button = parent->getChild<LLButton>("member_invite", recurse);  	if ( button ) @@ -1529,6 +1543,10 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)  		mMemberProgress = gdatap->mMembers.begin();  		mPendingMemberUpdate = TRUE;  		mHasMatch = FALSE; +		// Generate unique ID for current updateMembers()- see onNameCache for details. +		// Using unique UUID is perhaps an overkill but this way we are perfectly safe +		// from coincidences. +		mUdpateSessionID.generate();  	}  	else  	{ @@ -1556,6 +1574,59 @@ void LLPanelGroupMembersSubTab::update(LLGroupChange gc)  	}  } +void LLPanelGroupMembersSubTab::addMemberToList(LLUUID id, LLGroupMemberData* data) +{ +	LLUIString donated = getString("donation_area"); +	donated.setArg("[AREA]", llformat("%d", data->getContribution())); + +	LLSD row; +	row["id"] = id; + +	row["columns"][0]["column"] = "name"; +	// value is filled in by name list control + +	row["columns"][1]["column"] = "donated"; +	row["columns"][1]["value"] = donated.getString(); + +	row["columns"][2]["column"] = "online"; +	row["columns"][2]["value"] = data->getOnlineStatus(); +	row["columns"][2]["font"] = "SANSSERIF_SMALL"; + +	mMembersList->addElement(row); + +	mHasMatch = TRUE; +} + +void LLPanelGroupMembersSubTab::onNameCache(const LLUUID& update_id, const LLUUID& id) +{ +	// Update ID is used to determine whether member whose id is passed +	// into onNameCache() was passed after current or previous user-initiated update. +	// This is needed to avoid probable duplication of members in list after changing filter +	// or adding of members of another group if gets for their names were called on +	// previous update. If this id is from get() called from older update, +	// we do nothing. +	if (mUdpateSessionID != update_id) return; +	 +	LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); +		if (!gdatap)  +	{ +		llwarns << "LLPanelGroupMembersSubTab::updateMembers() -- No group data!" << llendl; +		return; +	} +	 +	std::string fullname; +	gCacheName->getFullName(id, fullname); +	if (matchesSearchFilter(fullname)) +	{ +		addMemberToList(id, gdatap->mMembers[id]); +		if(!mMembersList->getEnabled()) +		{ +			mMembersList->setEnabled(TRUE); +		} +	} +	 +} +  void LLPanelGroupMembersSubTab::updateMembers()  {  	mPendingMemberUpdate = FALSE; @@ -1580,12 +1651,13 @@ void LLPanelGroupMembersSubTab::updateMembers()  	//cleanup list only for first iretation  	if(mMemberProgress == gdatap->mMembers.begin()) +	{  		mMembersList->deleteAllItems(); +	}  	LLGroupMgrGroupData::member_list_t::iterator end = gdatap->mMembers.end(); -	LLUIString donated = getString("donation_area"); - +	  	S32 i = 0;  	for( ; mMemberProgress != end && i<UPDATE_MEMBERS_PER_FRAME;   			++mMemberProgress, ++i) @@ -1593,38 +1665,19 @@ void LLPanelGroupMembersSubTab::updateMembers()  		if (!mMemberProgress->second)  			continue;  		// Do filtering on name if it is already in the cache. -		bool add_member = true; -  		std::string fullname;  		if (gCacheName->getFullName(mMemberProgress->first, fullname))  		{ -			if ( !matchesSearchFilter(fullname) ) +			if (matchesSearchFilter(fullname))  			{ -				add_member = false; +				addMemberToList(mMemberProgress->first, mMemberProgress->second);  			}  		} - -		if (add_member) +		else  		{ -			donated.setArg("[AREA]", llformat("%d", mMemberProgress->second->getContribution())); - -			LLSD row; -			row["id"] = (*mMemberProgress).first; - -			row["columns"][0]["column"] = "name"; -			// value is filled in by name list control - -			row["columns"][1]["column"] = "donated"; -			row["columns"][1]["value"] = donated.getString(); - -			row["columns"][2]["column"] = "online"; -			row["columns"][2]["value"] = mMemberProgress->second->getOnlineStatus(); -			row["columns"][2]["font"] = "SANSSERIF_SMALL"; - -			LLScrollListItem* member = mMembersList->addElement(row); - -			LLUUID id = member->getUUID(); -			mHasMatch = TRUE; +			// If name is not cached, onNameCache() should be called when it is cached and add this member to list. +			gCacheName->get(mMemberProgress->first, FALSE, boost::bind(&LLPanelGroupMembersSubTab::onNameCache, +																	   this, mUdpateSessionID, _1));  		}  	} diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index 6a773f1ebb..270259c16f 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -187,6 +187,9 @@ public:  	virtual void setGroupID(const LLUUID& id); +	void addMemberToList(LLUUID id, LLGroupMemberData* data); +	void onNameCache(const LLUUID& update_id, const LLUUID& id); +  protected:  	typedef std::map<LLUUID, LLRoleMemberChangeType> role_change_data_map_t;  	typedef std::map<LLUUID, role_change_data_map_t*> member_role_changes_map_t; @@ -207,6 +210,9 @@ protected:  	BOOL mPendingMemberUpdate;  	BOOL mHasMatch; +	// This id is generated after each user initiated member list update(opening Roles or changing filter) +	LLUUID mUdpateSessionID; +  	member_role_changes_map_t mMemberRoleChangeData;  	U32 mNumOwnerAdditions; diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp index c4a484d368..e5695f420a 100644 --- a/indra/newview/llpanellandmarks.cpp +++ b/indra/newview/llpanellandmarks.cpp @@ -47,6 +47,7 @@  #include "llinventorymodelbackgroundfetch.h"  #include "llinventorypanel.h"  #include "lllandmarkactions.h" +#include "llmenubutton.h"  #include "llplacesinventorybridge.h"  #include "llplacesinventorypanel.h"  #include "llsidetray.h" @@ -191,6 +192,7 @@ LLLandmarksPanel::LLLandmarksPanel()  	,	mLibraryInventoryPanel(NULL)  	,	mCurrentSelectedList(NULL)  	,	mListCommands(NULL) +	,	mGearButton(NULL)  	,	mGearFolderMenu(NULL)  	,	mGearLandmarkMenu(NULL)  { @@ -685,7 +687,9 @@ void LLLandmarksPanel::initListCommandsHandlers()  {  	mListCommands = getChild<LLPanel>("bottom_panel"); -	mListCommands->childSetAction(OPTIONS_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onActionsButtonClick, this)); +	mGearButton = getChild<LLMenuButton>(OPTIONS_BUTTON_NAME); +	mGearButton->setMouseDownCallback(boost::bind(&LLLandmarksPanel::onActionsButtonClick, this)); +  	mListCommands->childSetAction(TRASH_BUTTON_NAME, boost::bind(&LLLandmarksPanel::onTrashButtonClick, this));  	LLDragAndDropButton* trash_btn = mListCommands->getChild<LLDragAndDropButton>(TRASH_BUTTON_NAME); @@ -741,7 +745,7 @@ void LLLandmarksPanel::onActionsButtonClick()  		}  	} -	showActionMenu(menu,OPTIONS_BUTTON_NAME); +	mGearButton->setMenu(menu);  }  void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_name) @@ -750,7 +754,10 @@ void LLLandmarksPanel::showActionMenu(LLMenuGL* menu, std::string spawning_view_  	{  		menu->buildDrawLabels();  		menu->updateParent(LLMenuGL::sMenuContainer); -		LLView* spawning_view = getChild<LLView> (spawning_view_name); +		menu->arrangeAndClear(); + +		LLView* spawning_view = getChild<LLView>(spawning_view_name); +  		S32 menu_x, menu_y;  		//show menu in co-ordinates of panel  		spawning_view->localPointToOtherView(0, spawning_view->getRect().getHeight(), &menu_x, &menu_y, this); diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h index 0d4402d8cb..28c19d3e5f 100644 --- a/indra/newview/llpanellandmarks.h +++ b/indra/newview/llpanellandmarks.h @@ -39,6 +39,7 @@  class LLAccordionCtrlTab;  class LLFolderViewItem; +class LLMenuButton;  class LLMenuGL;  class LLInventoryPanel;  class LLPlacesInventoryPanel; @@ -155,6 +156,7 @@ private:  	LLPlacesInventoryPanel*		mLandmarksInventoryPanel;  	LLPlacesInventoryPanel*		mMyInventoryPanel;  	LLPlacesInventoryPanel*		mLibraryInventoryPanel; +	LLMenuButton*				mGearButton;  	LLMenuGL*					mGearLandmarkMenu;  	LLMenuGL*					mGearFolderMenu;  	LLMenuGL*					mMenuAdd; diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 5b07e4863b..cc69dbd9d4 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -39,6 +39,7 @@  #include "llinventorypanel.h"  #include "llfiltereditor.h"  #include "llfloaterreg.h" +#include "llmenubutton.h"  #include "lloutfitobserver.h"  #include "llpreviewtexture.h"  #include "llresmgr.h" @@ -192,6 +193,8 @@ BOOL LLPanelMainInventory::postBuild()  		mFilterEditor->setCommitCallback(boost::bind(&LLPanelMainInventory::onFilterEdit, this, _2));  	} +	mGearMenuButton = getChild<LLMenuButton>("options_gear_btn"); +  	initListCommandsHandlers();  	// *TODO:Get the cost info from the server @@ -900,7 +903,6 @@ void LLFloaterInventoryFinder::selectNoTypes(void* user_data)  void LLPanelMainInventory::initListCommandsHandlers()  { -	childSetAction("options_gear_btn", boost::bind(&LLPanelMainInventory::onGearButtonClick, this));  	childSetAction("trash_btn", boost::bind(&LLPanelMainInventory::onTrashButtonClick, this));  	childSetAction("add_btn", boost::bind(&LLPanelMainInventory::onAddButtonClick, this)); @@ -914,6 +916,7 @@ void LLPanelMainInventory::initListCommandsHandlers()  	mCommitCallbackRegistrar.add("Inventory.GearDefault.Custom.Action", boost::bind(&LLPanelMainInventory::onCustomAction, this, _2));  	mEnableCallbackRegistrar.add("Inventory.GearDefault.Enable", boost::bind(&LLPanelMainInventory::isActionEnabled, this, _2));  	mMenuGearDefault = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	mGearMenuButton->setMenu(mMenuGearDefault);  	mMenuAdd = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_inventory_add.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	// Update the trash button when selected item(s) get worn or taken off. @@ -927,11 +930,6 @@ void LLPanelMainInventory::updateListCommands()  	mTrashButton->setEnabled(trash_enabled);  } -void LLPanelMainInventory::onGearButtonClick() -{ -	showActionMenu(mMenuGearDefault,"options_gear_btn"); -} -  void LLPanelMainInventory::onAddButtonClick()  {  	setUploadCostIfNeeded(); diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index cf2cc14531..f95a99157d 100644 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -40,6 +40,7 @@ class LLSaveFolderState;  class LLFilterEditor;  class LLTabContainer;  class LLFloaterInventoryFinder; +class LLMenuButton;  class LLMenuGL;  class LLFloater; @@ -129,7 +130,6 @@ private:  protected:  	void initListCommandsHandlers();  	void updateListCommands(); -	void onGearButtonClick();  	void onAddButtonClick();  	void showActionMenu(LLMenuGL* menu, std::string spawning_view_name);  	void onTrashButtonClick(); @@ -145,6 +145,7 @@ private:  	LLDragAndDropButton*		mTrashButton;  	LLMenuGL*					mMenuGearDefault;  	LLMenuGL*					mMenuAdd; +	LLMenuButton*				mGearMenuButton;  	bool						mNeedUploadCost;  	// List Commands                                                              // diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index 494db01f77..5638374178 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -56,6 +56,7 @@  #include "llinventorymodel.h"  #include "llinventorymodelbackgroundfetch.h"  #include "llloadingindicator.h" +#include "llmenubutton.h"  #include "llpaneloutfitsinventory.h"  #include "lluiconstants.h"  #include "llsaveoutfitcombobtn.h" @@ -403,7 +404,9 @@ LLPanelOutfitEdit::LLPanelOutfitEdit()  	mAddWearablesPanel(NULL),  	mFolderViewFilterCmbBox(NULL),  	mListViewFilterCmbBox(NULL), -	mPlusBtn(NULL) +	mPlusBtn(NULL), +	mWearablesGearMenuBtn(NULL), +	mGearMenuBtn(NULL)  {  	mSavedFolderState = new LLSaveFolderState();  	mSavedFolderState->setApply(FALSE); @@ -478,13 +481,14 @@ BOOL LLPanelOutfitEdit::postBuild()  	childSetCommitCallback("folder_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL);  	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::showWearablesListView, this), NULL);  	childSetCommitCallback("list_view_btn", boost::bind(&LLPanelOutfitEdit::saveListSelection, this), NULL); -	childSetCommitCallback("wearables_gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL); -	childSetCommitCallback("gear_menu_btn", boost::bind(&LLPanelOutfitEdit::onGearButtonClick, this, _1), NULL);  	childSetCommitCallback("shop_btn_1", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);  	childSetCommitCallback("shop_btn_2", boost::bind(&LLPanelOutfitEdit::onShopButtonClicked, this), NULL);  	setVisibleCallback(boost::bind(&LLPanelOutfitEdit::onVisibilityChange, this, _2)); +	mWearablesGearMenuBtn = getChild<LLMenuButton>("wearables_gear_menu_btn"); +	mGearMenuBtn = getChild<LLMenuButton>("gear_menu_btn"); +  	mCOFWearables = findChild<LLCOFWearables>("cof_wearables_list");  	mCOFWearables->setCommitCallback(boost::bind(&LLPanelOutfitEdit::filterWearablesBySelectedItem, this)); @@ -557,6 +561,13 @@ BOOL LLPanelOutfitEdit::postBuild()  	mWearableItemsList->setComparator(mWearableListViewItemsComparator); +	// Creating "Add Wearables" panel gear menu after initialization of mWearableItemsList and mInventoryItemsPanel. +	mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel); +	mWearablesGearMenuBtn->setMenu(mAddWearablesGearMenu); + +	mGearMenu = LLPanelOutfitEditGearMenu::create(); +	mGearMenuBtn->setMenu(mGearMenu); +  	mSaveComboBtn.reset(new LLSaveOutfitComboBtn(this));  	return TRUE;  } @@ -1256,37 +1267,6 @@ void LLPanelOutfitEdit::resetAccordionState()  	}  } -void LLPanelOutfitEdit::onGearButtonClick(LLUICtrl* clicked_button) -{ -	LLMenuGL* menu = NULL; - -	if (mAddWearablesPanel->getVisible()) -	{ -		if (!mAddWearablesGearMenu) -		{ -			mAddWearablesGearMenu = LLAddWearablesGearMenu::create(mWearableItemsList, mInventoryItemsPanel); -		} - -		menu = mAddWearablesGearMenu; -	} -	else -	{ -		if (!mGearMenu) -		{ -			mGearMenu = LLPanelOutfitEditGearMenu::create(); -		} - -		menu = mGearMenu; -	} - -	if (!menu) return; - -	menu->arrangeAndClear(); // update menu height -	S32 menu_y = menu->getRect().getHeight() + clicked_button->getRect().getHeight(); -	menu->buildDrawLabels(); -	LLMenuGL::showPopup(clicked_button, menu, 0, menu_y); -} -  void LLPanelOutfitEdit::onAddMoreButtonClicked()  {  	toggleAddWearablesPanel(); diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h index 2dca986e33..963db84503 100644 --- a/indra/newview/llpaneloutfitedit.h +++ b/indra/newview/llpaneloutfitedit.h @@ -54,6 +54,7 @@ class LLScrollListCtrl;  class LLToggleableMenu;  class LLFilterEditor;  class LLFilteredWearableListManager; +class LLMenuButton;  class LLMenuGL;  class LLFindNonLinksByMask;  class LLFindWearablesOfType; @@ -186,8 +187,6 @@ public:  									  std::string& tooltip_msg);  private: - -	void onGearButtonClick(LLUICtrl* clicked_button);  	void onAddMoreButtonClicked();  	void showFilteredWearablesListView(LLWearableType::EType type);  	void onOutfitChanging(bool started); @@ -238,8 +237,8 @@ private:  	LLMenuGL*			mAddWearablesGearMenu;  	bool				mInitialized;  	std::auto_ptr<LLSaveOutfitComboBtn> mSaveComboBtn; - - +	LLMenuButton*		mWearablesGearMenuBtn; +	LLMenuButton*		mGearMenuBtn;  }; diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index d6d8a38ebe..4f2cfa2bbc 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -232,9 +232,7 @@ void LLPanelOutfitsInventory::initListCommandsHandlers()  {  	mListCommands = getChild<LLPanel>("bottom_panel");  	mListCommands->childSetAction("wear_btn", boost::bind(&LLPanelOutfitsInventory::onWearButtonClick, this)); -	mMyOutfitsPanel->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));  	mMyOutfitsPanel->childSetAction("trash_btn", boost::bind(&LLPanelOutfitsInventory::onTrashButtonClick, this)); -	mCurrentOutfitPanel->childSetAction("options_gear_btn", boost::bind(&LLPanelOutfitsInventory::showGearMenu, this));  }  void LLPanelOutfitsInventory::updateListCommands() @@ -258,14 +256,6 @@ void LLPanelOutfitsInventory::updateListCommands()  	}  } -void LLPanelOutfitsInventory::showGearMenu() -{ -	if (!mActivePanel) return; - -	LLView* spawning_view = getChild<LLView>("options_gear_btn"); -	mActivePanel->showGearMenu(spawning_view); -} -  void LLPanelOutfitsInventory::onTrashButtonClick()  {  	LLNotificationsUtil::add("DeleteOutfits", LLSD(), LLSD(), boost::bind(&LLPanelOutfitsInventory::onOutfitsRemovalConfirmation, this, _1, _2)); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 040b5319b9..b79a2d3224 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -29,6 +29,7 @@  // libs  #include "llavatarname.h"  #include "llfloaterreg.h" +#include "llmenubutton.h"  #include "llmenugl.h"  #include "llnotificationsutil.h"  #include "lleventtimer.h" @@ -464,7 +465,11 @@ LLPanelPeople::LLPanelPeople()  		mAllFriendList(NULL),  		mNearbyList(NULL),  		mRecentList(NULL), -		mGroupList(NULL) +		mGroupList(NULL), +		mNearbyGearButton(NULL), +		mFriendsGearButton(NULL), +		mGroupsGearButton(NULL), +		mRecentGearButton(NULL)  {  	mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList,	this));  	mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList,	this)); @@ -600,11 +605,6 @@ BOOL LLPanelPeople::postBuild()  	buttonSetAction("teleport_btn",		boost::bind(&LLPanelPeople::onTeleportButtonClicked,	this));  	buttonSetAction("share_btn",		boost::bind(&LLPanelPeople::onShareButtonClicked,		this)); -	getChild<LLPanel>(NEARBY_TAB_NAME)->childSetAction("nearby_view_sort_btn",boost::bind(&LLPanelPeople::onNearbyViewSortButtonClicked,		this)); -	getChild<LLPanel>(RECENT_TAB_NAME)->childSetAction("recent_viewsort_btn",boost::bind(&LLPanelPeople::onRecentViewSortButtonClicked,			this)); -	getChild<LLPanel>(FRIENDS_TAB_NAME)->childSetAction("friends_viewsort_btn",boost::bind(&LLPanelPeople::onFriendsViewSortButtonClicked,		this)); -	getChild<LLPanel>(GROUP_TAB_NAME)->childSetAction("groups_viewsort_btn",boost::bind(&LLPanelPeople::onGroupsViewSortButtonClicked,		this)); -  	// Must go after setting commit callback and initializing all pointers to children.  	mTabContainer->selectTabByName(NEARBY_TAB_NAME); @@ -624,24 +624,41 @@ BOOL LLPanelPeople::postBuild()  	enable_registrar.add("People.Recent.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onRecentViewSortMenuItemCheck,	this, _2));  	enable_registrar.add("People.Nearby.ViewSort.CheckItem",	boost::bind(&LLPanelPeople::onNearbyViewSortMenuItemCheck,	this, _2)); +	mNearbyGearButton = getChild<LLMenuButton>("nearby_view_sort_btn"); +	mFriendsGearButton = getChild<LLMenuButton>("friends_viewsort_btn"); +	mGroupsGearButton = getChild<LLMenuButton>("groups_viewsort_btn"); +	mRecentGearButton = getChild<LLMenuButton>("recent_viewsort_btn"); +  	LLMenuGL* plus_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_group_plus.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	mGroupPlusMenuHandle  = plus_menu->getHandle();  	LLMenuGL* nearby_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_nearby_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	if(nearby_view_sort) +	{  		mNearbyViewSortMenuHandle  = nearby_view_sort->getHandle(); +		mNearbyGearButton->setMenu(nearby_view_sort); +	}  	LLMenuGL* friend_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_friends_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	if(friend_view_sort) +	{  		mFriendsViewSortMenuHandle  = friend_view_sort->getHandle(); +		mFriendsGearButton->setMenu(friend_view_sort); +	}  	LLMenuGL* group_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_groups_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	if(group_view_sort) +	{  		mGroupsViewSortMenuHandle  = group_view_sort->getHandle(); +		mGroupsGearButton->setMenu(group_view_sort); +	}  	LLMenuGL* recent_view_sort  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_people_recent_view_sort.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	if(recent_view_sort) +	{  		mRecentViewSortMenuHandle  = recent_view_sort->getHandle(); +		mRecentGearButton->setMenu(recent_view_sort); +	}  	LLVoiceClient::getInstance()->addObserver(this); @@ -911,7 +928,7 @@ void LLPanelPeople::showGroupMenu(LLMenuGL* menu)  	// Calculate its coordinates.  	// (assumes that groups panel is the current tab) -	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel");  +	LLPanel* bottom_panel = mTabContainer->getCurrentPanel()->getChild<LLPanel>("bottom_panel");  	LLPanel* parent_panel = mTabContainer->getCurrentPanel();  	menu->arrangeAndClear();  	S32 menu_height = menu->getRect().getHeight(); @@ -1346,38 +1363,6 @@ void LLPanelPeople::onMoreButtonClicked()  	// *TODO: not implemented yet  } -void LLPanelPeople::onFriendsViewSortButtonClicked() -{ -	LLMenuGL* menu = (LLMenuGL*)mFriendsViewSortMenuHandle.get(); -	if (!menu) -		return; -	showGroupMenu(menu); -} - -void LLPanelPeople::onGroupsViewSortButtonClicked() -{ -	LLMenuGL* menu = (LLMenuGL*)mGroupsViewSortMenuHandle.get(); -	if (!menu) -		return; -	showGroupMenu(menu); -} - -void LLPanelPeople::onRecentViewSortButtonClicked() -{ -	LLMenuGL* menu = (LLMenuGL*)mRecentViewSortMenuHandle.get(); -	if (!menu) -		return; -	showGroupMenu(menu); -} - -void LLPanelPeople::onNearbyViewSortButtonClicked() -{ -	LLMenuGL* menu = (LLMenuGL*)mNearbyViewSortMenuHandle.get(); -	if (!menu) -		return; -	showGroupMenu(menu); -} -  void	LLPanelPeople::onOpen(const LLSD& key)  {  	std::string tab_name = key["people_panel_tab_name"]; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index f5ff09b038..4412aed062 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -36,6 +36,7 @@ class LLAvatarList;  class LLAvatarName;  class LLFilterEditor;  class LLGroupList; +class LLMenuButton;  class LLTabContainer;  class LLPanelPeople  @@ -101,10 +102,6 @@ private:  	void					onShareButtonClicked();  	void					onMoreButtonClicked();  	void					onActivateButtonClicked(); -	void					onRecentViewSortButtonClicked(); -	void					onNearbyViewSortButtonClicked(); -	void					onFriendsViewSortButtonClicked(); -	void					onGroupsViewSortButtonClicked();  	void					onAvatarListDoubleClicked(LLUICtrl* ctrl);  	void					onAvatarListCommitted(LLAvatarList* list);  	void					onGroupPlusButtonClicked(); @@ -156,6 +153,11 @@ private:  	Updater*				mNearbyListUpdater;  	Updater*				mRecentListUpdater; +	LLMenuButton*			mNearbyGearButton; +	LLMenuButton*			mFriendsGearButton; +	LLMenuButton*			mGroupsGearButton; +	LLMenuButton*			mRecentGearButton; +  	std::string				mFilterSubString;  	std::string				mFilterSubStringOrig;  }; diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 9b8167b15a..766f93e0a5 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -27,6 +27,7 @@  #include "llviewerprecompiledheaders.h"  #include "llfloaterreg.h" +#include "llmenubutton.h"  #include "llfloaterworldmap.h"  #include "llpanelteleporthistory.h" @@ -375,7 +376,8 @@ LLTeleportHistoryPanel::LLTeleportHistoryPanel()  		mHistoryAccordion(NULL),  		mAccordionTabMenu(NULL),  		mLastSelectedFlatlList(NULL), -		mLastSelectedItemIndex(-1) +		mLastSelectedItemIndex(-1), +		mMenuGearButton(NULL)  {  	buildFromFile( "panel_teleport_history.xml");  } @@ -439,8 +441,6 @@ BOOL LLTeleportHistoryPanel::postBuild()  		}  	} -	getChild<LLPanel>("bottom_panel")->childSetAction("gear_btn",boost::bind(&LLTeleportHistoryPanel::onGearButtonClicked, this)); -  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;  	registrar.add("TeleportHistory.ExpandAllFolders",  boost::bind(&LLTeleportHistoryPanel::onExpandAllFolders,  this)); @@ -448,9 +448,14 @@ BOOL LLTeleportHistoryPanel::postBuild()  	registrar.add("TeleportHistory.ClearTeleportHistory",  boost::bind(&LLTeleportHistoryPanel::onClearTeleportHistory,  this));  	mEnableCallbackRegistrar.add("TeleportHistory.GearMenu.Enable", boost::bind(&LLTeleportHistoryPanel::isActionEnabled, this, _2)); -	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); +	mMenuGearButton = getChild<LLMenuButton>("gear_btn"); + +	LLMenuGL* gear_menu  = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_teleport_history_gear.xml",  gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());;  	if(gear_menu) +	{  		mGearMenuHandle  = gear_menu->getHandle(); +		mMenuGearButton->setMenu(gear_menu); +	}  	return TRUE;  } @@ -985,27 +990,6 @@ LLFlatListView* LLTeleportHistoryPanel::getFlatListViewFromTab(LLAccordionCtrlTa  	return NULL;  } -void LLTeleportHistoryPanel::onGearButtonClicked() -{ -	LLMenuGL* menu = (LLMenuGL*)mGearMenuHandle.get(); -	if (!menu) -		return; - -	// Shows the menu at the top of the button bar. - -	// Calculate its coordinates. -	LLPanel* bottom_panel = getChild<LLPanel>("bottom_panel"); -	menu->arrangeAndClear(); -	S32 menu_height = menu->getRect().getHeight(); -	S32 menu_x = -2; // *HACK: compensates HPAD in showPopup() -	S32 menu_y = bottom_panel->getRect().mTop + menu_height; - -	// Actually show the menu. -	menu->buildDrawLabels(); -	menu->updateParent(LLMenuGL::sMenuContainer); -	LLMenuGL::showPopup(this, menu, menu_x, menu_y); -} -  bool LLTeleportHistoryPanel::isActionEnabled(const LLSD& userdata) const  {  	S32 tabs_cnt = mItemContainers.size(); diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h index b5a025b39b..3d29454d15 100644 --- a/indra/newview/llpanelteleporthistory.h +++ b/indra/newview/llpanelteleporthistory.h @@ -38,6 +38,7 @@ class LLTeleportHistoryStorage;  class LLAccordionCtrl;  class LLAccordionCtrlTab;  class LLFlatListView; +class LLMenuButton;  class LLTeleportHistoryPanel : public LLPanelPlacesTab  { @@ -94,7 +95,6 @@ private:  	void showTeleportHistory();  	void handleItemSelect(LLFlatListView* );  	LLFlatListView* getFlatListViewFromTab(LLAccordionCtrlTab *); -	void onGearButtonClicked();  	bool isActionEnabled(const LLSD& userdata) const;  	void setAccordionCollapsedByUser(LLUICtrl* acc_tab, bool collapsed); @@ -118,6 +118,7 @@ private:  	ContextMenu mContextMenu;  	LLContextMenu*			mAccordionTabMenu;  	LLHandle<LLView>		mGearMenuHandle; +	LLMenuButton*			mMenuGearButton;  }; diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp index 860470cd73..3b3d0cdce5 100644 --- a/indra/newview/llpanelwearing.cpp +++ b/indra/newview/llpanelwearing.cpp @@ -32,6 +32,7 @@  #include "llinventoryfunctions.h"  #include "llinventorymodel.h"  #include "llinventoryobserver.h" +#include "llmenubutton.h"  #include "llsidetray.h"  #include "llviewermenu.h"  #include "llwearableitemslist.h" @@ -63,16 +64,7 @@ public:  		llassert(mMenu);  	} -	void show(LLView* spawning_view) -	{ -		if (!mMenu) return; - -		mMenu->buildDrawLabels(); -		mMenu->updateParent(LLMenuGL::sMenuContainer); -		S32 menu_x = 0; -		S32 menu_y = spawning_view->getRect().getHeight() + mMenu->getRect().getHeight(); -		LLMenuGL::showPopup(spawning_view, mMenu, menu_x, menu_y); -	} +	LLMenuGL* getMenu() { return mMenu; }  private: @@ -189,6 +181,10 @@ BOOL LLPanelWearing::postBuild()  	mCOFItemsList = getChild<LLWearableItemsList>("cof_items_list");  	mCOFItemsList->setRightMouseDownCallback(boost::bind(&LLPanelWearing::onWearableItemsListRightClick, this, _1, _2, _3)); +	LLMenuButton* menu_gear_btn = getChild<LLMenuButton>("options_gear_btn"); + +	menu_gear_btn->setMenu(mGearMenu->getMenu()); +  	return TRUE;  } @@ -253,13 +249,6 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)  	return false;  } -// virtual -void LLPanelWearing::showGearMenu(LLView* spawning_view) -{ -	if (!mGearMenu) return; -	mGearMenu->show(spawning_view); -} -  boost::signals2::connection LLPanelWearing::setSelectionChangeCallback(commit_callback_t cb)  {  	if (!mCOFItemsList) return boost::signals2::connection(); diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h index 1fa97735b1..157b2c4c5f 100644 --- a/indra/newview/llpanelwearing.h +++ b/indra/newview/llpanelwearing.h @@ -58,8 +58,6 @@ public:  	/*virtual*/ bool isActionEnabled(const LLSD& userdata); -	/*virtual*/ void showGearMenu(LLView* spawning_view); -  	/*virtual*/ void getSelectedItemsUUIDs(uuid_vec_t& selected_uuids) const;  	boost::signals2::connection setSelectionChangeCallback(commit_callback_t cb); diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index 0c17b5e297..8ef3a3b839 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -880,8 +880,10 @@ void LLWorldMapView::drawFrustum()  	F32 half_width_meters = far_clip_meters * tan( horiz_fov / 2 );  	F32 half_width_pixels = half_width_meters * meters_to_pixels; -	F32 ctr_x = getLocalRect().getWidth() * 0.5f + sPanX; -	F32 ctr_y = getLocalRect().getHeight() * 0.5f + sPanY; +	// Compute the frustum coordinates. Take the UI scale into account. +	F32 ui_scale_factor = gSavedSettings.getF32("UIScaleFactor"); +	F32 ctr_x = (getLocalRect().getWidth() * 0.5f + sPanX)  * ui_scale_factor; +	F32 ctr_y = (getLocalRect().getHeight() * 0.5f + sPanY) * ui_scale_factor;  	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml index 9f4119e73b..afd933c7fa 100644 --- a/indra/newview/skins/default/xui/da/strings.xml +++ b/indra/newview/skins/default/xui/da/strings.xml @@ -774,7 +774,7 @@  	<string name="xml_file">  		XML Fil  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		RAW Fil  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml index ae2991df45..afcb68f537 100644 --- a/indra/newview/skins/default/xui/de/strings.xml +++ b/indra/newview/skins/default/xui/de/strings.xml @@ -798,7 +798,7 @@  	<string name="xml_file">  		XML-Datei  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		RAW-Datei  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml index 2ae46f79a5..2a5933e3e9 100644 --- a/indra/newview/skins/default/xui/en/panel_landmarks.xml +++ b/indra/newview/skins/default/xui/en/panel_landmarks.xml @@ -115,7 +115,7 @@  		       layout="topleft"  		       name="options_gear_btn_panel"  		       width="32"> -		          <button +		          <menu_button  		           follows="bottom|left"  		           tool_tip="Show additional options"  		           height="25" diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml index 16529f4064..2b6e082542 100644 --- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml +++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml @@ -119,7 +119,7 @@         layout="topleft"         name="options_gear_btn_panel"         width="32"> -          <button +          <menu_button             follows="bottom|left"             tool_tip="Show additional options"             height="25" diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index bc050f9ad1..f4dee9cd55 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -378,7 +378,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap       name="no_add_wearables_button_bar"       top_pad="0"       width="313"> -        <button +        <menu_button           follows="bottom|left"           height="25"           image_hover_unselected="Toolbar_Left_Over" @@ -426,7 +426,7 @@ It is calculated as border_size + 2*UIResizeBarOverlap       top_delta="0"       visible="false"       width="313"> -        <button +        <menu_button           follows="bottom|left"           height="25"           image_hover_unselected="Toolbar_Left_Over" diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml index d18f0d57ca..9f98019c94 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_list.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_list.xml @@ -35,7 +35,7 @@  	 visible="true"  	 name="bottom_panel"  	 width="312"> -     <button +     <menu_button         follows="bottom|left"         tool_tip="Show additional options"         height="25" diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml index 2fbbf6610c..d85b778db2 100644 --- a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml +++ b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml @@ -29,7 +29,7 @@       name="bottom_panel"       top_pad="0"       width="312"> -        <button +        <menu_button           follows="bottom|left"           height="25"           image_hover_unselected="Toolbar_Left_Over" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index e7a0b768c6..d34c0c29a8 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -114,7 +114,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M               name="bottom_panel"               top_pad="0"               width="313"> -             <button +             <menu_button               follows="bottom|left"               height="25"               image_hover_unselected="Toolbar_Left_Over" @@ -242,7 +242,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M  				       layout="topleft"  				       name="options_gear_btn_panel"  				       width="32"> -				          <button +				          <menu_button  				           follows="bottom|left"  				           tool_tip="Show additional options"  				           height="25" @@ -407,7 +407,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M               name="bottom_panel"               top_pad="0"               width="313"> -               <button +               <menu_button                 follows="bottom|left"                 tool_tip="Options"                 height="25" @@ -490,7 +490,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M               name="bottom_panel"               top_pad="0"               width="313"> -               <button +               <menu_button                 follows="bottom|left"                 tool_tip="Options"                 height="25" @@ -499,7 +499,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M                 image_selected="Toolbar_Left_Selected"                 image_unselected="Toolbar_Left_Off"                 layout="topleft" -               left="3"                 name="recent_viewsort_btn"                 top="1"                 width="31" /> diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml index bf09836e87..768efc2f3f 100644 --- a/indra/newview/skins/default/xui/en/panel_teleport_history.xml +++ b/indra/newview/skins/default/xui/en/panel_teleport_history.xml @@ -157,7 +157,7 @@       left="3"       name="bottom_panel"       width="313"> -        <button +        <menu_button           follows="bottom|left"           tool_tip="Show additional options"           height="25" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index bee0e4fde6..403d976350 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -338,7 +338,7 @@  	<string name="avi_movie_file">AVI Movie File</string>  	<string name="xaf_animation_file">XAF Anim File</string>  	<string name="xml_file">XML File</string> -	<string name="dot_raw_file">RAW File</string> +	<string name="raw_file">RAW File</string>  	<string name="compressed_image_files">Compressed Images</string>  	<string name="load_files">Load Files</string>  	<string name="choose_the_directory">Choose Directory</string> diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml index ac12b700ee..5fa3d54de2 100644 --- a/indra/newview/skins/default/xui/es/strings.xml +++ b/indra/newview/skins/default/xui/es/strings.xml @@ -777,7 +777,7 @@  	<string name="xml_file">  		Archivo XML  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		Archivo RAW  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml index a7a766f6a6..af70048106 100644 --- a/indra/newview/skins/default/xui/fr/strings.xml +++ b/indra/newview/skins/default/xui/fr/strings.xml @@ -798,7 +798,7 @@  	<string name="xml_file">  		Fichier XML  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		Fichier RAW  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml index 4fc0d19199..9dbfc2b79c 100644 --- a/indra/newview/skins/default/xui/it/strings.xml +++ b/indra/newview/skins/default/xui/it/strings.xml @@ -783,7 +783,7 @@  	<string name="xml_file">  		File XML  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		File RAW  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml index 072ae6c630..92bbedaee5 100644 --- a/indra/newview/skins/default/xui/ja/strings.xml +++ b/indra/newview/skins/default/xui/ja/strings.xml @@ -798,7 +798,7 @@  	<string name="xml_file">  		XML ファイル  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		RAW ファイル  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/nl/strings.xml b/indra/newview/skins/default/xui/nl/strings.xml index 1ee26c3f24..844945913f 100644 --- a/indra/newview/skins/default/xui/nl/strings.xml +++ b/indra/newview/skins/default/xui/nl/strings.xml @@ -665,7 +665,7 @@  	<string name="xml_file">  		XML bestand  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		RAW bestand  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml index c9fe22f3c8..e355bdbb96 100644 --- a/indra/newview/skins/default/xui/pl/strings.xml +++ b/indra/newview/skins/default/xui/pl/strings.xml @@ -774,7 +774,7 @@  	<string name="xml_file">  		Plik XML  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		Plik RAW  	</string>  	<string name="compressed_image_files"> diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml index 2247b0a76b..800ad479fc 100644 --- a/indra/newview/skins/default/xui/pt/strings.xml +++ b/indra/newview/skins/default/xui/pt/strings.xml @@ -777,7 +777,7 @@  	<string name="xml_file">  		Arquivo XML  	</string> -	<string name="dot_raw_file"> +	<string name="raw_file">  		Arquivo RAW  	</string>  	<string name="compressed_image_files"> | 
