diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llcommon/llstring.cpp | 15 | ||||
| -rw-r--r-- | indra/llui/llmenugl.cpp | 6 | ||||
| -rw-r--r-- | indra/llui/llmenugl.h | 1 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llappearancemgr.h | 5 | ||||
| -rw-r--r-- | indra/newview/llfolderview.h | 1 | ||||
| -rw-r--r-- | indra/newview/llgroupmgr.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/lloutfitslist.cpp | 39 | ||||
| -rw-r--r-- | indra/newview/lloutfitslist.h | 5 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouplandmoney.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitedit.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llpaneloutfitsinventory.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/lltexturectrl.cpp | 30 | ||||
| -rw-r--r-- | indra/newview/llviewerinventory.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 84 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_attachment_self.xml | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 3 | ||||
| -rw-r--r-- | indra/newview/tests/lllogininstance_test.cpp | 10 | 
19 files changed, 198 insertions, 46 deletions
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 804c00fd60..671b0a108c 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -672,16 +672,23 @@ std::string ll_convert_wide_to_string(const wchar_t* in, unsigned int code_page)  wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page)  { -	int output_str_len = MultiByteToWideChar(code_page, 0, in.c_str(), in.length(), NULL, 0); +	// From review: +	// We can preallocate a wide char buffer that is the same length (in wchar_t elements) as the utf8 input,
 +	// plus one for a null terminator, and be guaranteed to not overflow.
 +
 +	//	Normally, I'd call that sort of thing premature optimization, +	// but we *are* seeing string operations taking a bunch of time, especially when constructing widgets. +//	int output_str_len = MultiByteToWideChar(code_page, 0, in.c_str(), in.length(), NULL, 0);  	// reserve place to NULL terminator +	int output_str_len = in.length();  	wchar_t* w_out = new wchar_t[output_str_len + 1];  	memset(w_out, 0, output_str_len + 1); -	MultiByteToWideChar (code_page, 0, in.c_str(), in.length(), w_out, output_str_len); +	int real_output_str_len = MultiByteToWideChar (code_page, 0, in.c_str(), in.length(), w_out, output_str_len);  	//looks like MultiByteToWideChar didn't add null terminator to converted string, see EXT-4858. -	w_out[output_str_len] = 0; +	w_out[real_output_str_len] = 0;  	return w_out;  } @@ -689,7 +696,7 @@ wchar_t* ll_convert_string_to_wide(const std::string& in, unsigned int code_page  std::string ll_convert_string_to_utf8_string(const std::string& in)  {  	wchar_t* w_mesg = ll_convert_string_to_wide(in, CP_ACP); -	std::string out_utf8 = ll_convert_wide_to_string(w_mesg, CP_UTF8); +	std::string out_utf8(ll_convert_wide_to_string(w_mesg, CP_UTF8));  	delete[] w_mesg;  	return out_utf8; diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index b4a1bcb7c5..8610d79142 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -218,6 +218,12 @@ void LLMenuItemGL::setValue(const LLSD& value)  }  //virtual +LLSD LLMenuItemGL::getValue() const +{ +	return getLabel(); +} + +//virtual  BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)  {  	if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) ) diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 7668f301ea..a484405eaa 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -95,6 +95,7 @@ public:  	// LLUICtrl overrides  	/*virtual*/ void setValue(const LLSD& value); +	/*virtual*/ LLSD getValue() const;  	virtual BOOL handleAcceleratorKey(KEY key, MASK mask); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index c04c2e271f..b64007aa75 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2699,6 +2699,21 @@ BOOL LLAppearanceMgr::getIsInCOF(const LLUUID& obj_id) const  	return gInventory.isObjectDescendentOf(obj_id, getCOF());  } +// static +bool LLAppearanceMgr::isLinkInCOF(const LLUUID& obj_id) +{ +	 LLInventoryModel::cat_array_t cats; +	 LLInventoryModel::item_array_t items; +	 LLLinkedItemIDMatches find_links(gInventory.getLinkedItemID(obj_id)); +	 gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(), +	 cats, +	 items, +	 LLInventoryModel::EXCLUDE_TRASH, +	 find_links); + +	 return !items.empty(); +} +  BOOL LLAppearanceMgr::getIsProtectedCOFItem(const LLUUID& obj_id) const  {  	if (!getIsInCOF(obj_id)) return FALSE; diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index ca57d62446..9f554dbdef 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -223,6 +223,11 @@ public:  	BOOL getIsInCOF(const LLUUID& obj_id) const;  	// Is this in the COF and can the user delete it from the COF?  	BOOL getIsProtectedCOFItem(const LLUUID& obj_id) const; + +	/** +	 * Checks if COF contains link to specified object. +	 */ +	static bool isLinkInCOF(const LLUUID& obj_id);  };  class LLUpdateAppearanceOnDestroy: public LLInventoryCallback diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index 3944fa53c9..03e1bb9eee 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -263,6 +263,7 @@ public:  	BOOL needsAutoRename() { return mNeedsAutoRename; }  	void setNeedsAutoRename(BOOL val) { mNeedsAutoRename = val; }  	void setAutoSelectOverride(BOOL val) { mAutoSelectOverride = val; } +	void setPinningSelectedItem(BOOL val) { mPinningSelectedItem = val; }  	void setCallbackRegistrar(LLUICtrl::CommitCallbackRegistry::ScopedRegistrar* registrar) { mCallbackRegistrar = registrar; } diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp index 996553ccf7..d464b67105 100644 --- a/indra/newview/llgroupmgr.cpp +++ b/indra/newview/llgroupmgr.cpp @@ -903,7 +903,15 @@ void LLGroupMgr::processGroupMembersReply(LLMessageSystem* msg, void** data)  			if (member_id.notNull())  			{ -				formatDateString(online_status); // reformat for sorting, e.g. 12/25/2008 -> 2008/12/25 +				if (online_status == "Online") +				{ +					static std::string localized_online(LLTrans::getString("group_member_status_online")); +					online_status = localized_online; +				} +				else +				{ +					formatDateString(online_status); // reformat for sorting, e.g. 12/25/2008 -> 2008/12/25 +				}  				//llinfos << "Member " << member_id << " has powers " << std::hex << agent_powers << std::dec << llendl;  				LLGroupMemberData* newdata = new LLGroupMemberData(member_id,  diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp index 63ffb80ff2..c3eee1d1ad 100644 --- a/indra/newview/lloutfitslist.cpp +++ b/indra/newview/lloutfitslist.cpp @@ -665,7 +665,18 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	}  	if (command_name == "wear")  	{ -		return !gAgentWearables.isCOFChangeInProgress(); +		if (gAgentWearables.isCOFChangeInProgress()) +		{ +			return false; +		} + +		if (hasItemSelected()) +		{ +			return canWearSelected(); +		} + +		// outfit selected +		return LLAppearanceMgr::getCanAddToCOF(mSelectedOutfitUUID);  	}  	if (command_name == "take_off")  	{ @@ -677,6 +688,7 @@ bool LLOutfitsList::isActionEnabled(const LLSD& userdata)  	if (command_name == "wear_add")  	{ +		// *TODO: do we ever get here?  		if (gAgentWearables.isCOFChangeInProgress())  		{  			return false; @@ -984,6 +996,31 @@ bool LLOutfitsList::canTakeOffSelected()  	return false;  } +bool LLOutfitsList::canWearSelected() +{ +	uuid_vec_t selected_items; +	getSelectedItemsUUIDs(selected_items); + +	for (uuid_vec_t::const_iterator it = selected_items.begin(); it != selected_items.end(); ++it) +	{ +		const LLUUID& id = *it; + +		if (LLAppearanceMgr::isLinkInCOF(id)) +		{ +			return false; +		} + +		// Check whether the item is worn. +		if (!get_can_item_be_worn(id)) +		{ +			return false; +		} +	} + +	// All selected items can be worn. +	return true; +} +  void LLOutfitsList::onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id)  {  	LLAccordionCtrlTab* tab = dynamic_cast<LLAccordionCtrlTab*>(ctrl); diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h index d7cf8a8c08..206854b232 100644 --- a/indra/newview/lloutfitslist.h +++ b/indra/newview/lloutfitslist.h @@ -183,6 +183,11 @@ private:  	 */  	bool canTakeOffSelected(); +	/** +	 * Returns true if all selected items can be worn. +	 */ +	bool canWearSelected(); +  	void onAccordionTabRightClick(LLUICtrl* ctrl, S32 x, S32 y, const LLUUID& cat_id);  	void onWearableItemsListRightClick(LLUICtrl* ctrl, S32 x, S32 y);  	void onCOFChanged(); diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index 65fe7165c2..b7d6b65ce5 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -1432,10 +1432,10 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,  // 	text.append(llformat( "%-24s %6d      %6d \n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits, (S32)floor((F32)total_debits/(F32)non_exempt_members)));  // 	text.append(llformat( "%-24s %6d      %6d \n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits,  (S32)floor((F32)(total_credits + total_debits)/(F32)non_exempt_members))); -	text.append( "                      Group\n"); -	text.append(llformat( "%-24s %6d\n", "Credits", total_credits)); -	text.append(llformat( "%-24s %6d\n", "Debits", total_debits)); -	text.append(llformat( "%-24s %6d\n", "Total", total_credits + total_debits)); +	text.append(llformat( "%s\n", LLTrans::getString("GroupColumn").c_str())); +	text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyCredits").c_str(), total_credits)); +	text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyDebits").c_str(), total_debits)); +	text.append(llformat( "%-24s %6d\n", LLTrans::getString("GroupMoneyTotal").c_str(), total_credits + total_debits));  	if ( mImplementationp->mTextEditorp )  	{ diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp index c09aff44da..38f637cabf 100644 --- a/indra/newview/llpaneloutfitedit.cpp +++ b/indra/newview/llpaneloutfitedit.cpp @@ -779,7 +779,9 @@ void LLPanelOutfitEdit::updatePlusButton()  	}  	// If any of the selected items are not wearable (due to already being worn OR being of the wrong type), disable the add button. -	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1)); +	uuid_vec_t::iterator unwearable_item = std::find_if(selected_items.begin(), selected_items.end(), !boost::bind(& get_can_item_be_worn, _1) +		// since item can be not worn but in wearing process at that time - we need to check is link to item presents in COF +		|| boost::bind(&LLAppearanceMgr::isLinkInCOF, _1));  	bool can_add = ( unwearable_item == selected_items.end() );  	mPlusBtn->setEnabled(can_add); diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp index ca5679d5b0..16ef7998b3 100644 --- a/indra/newview/llpaneloutfitsinventory.cpp +++ b/indra/newview/llpaneloutfitsinventory.cpp @@ -337,7 +337,7 @@ bool LLPanelOutfitsInventory::isCOFPanelActive() const  void LLPanelOutfitsInventory::setWearablesLoading(bool val)  { -	mListCommands->childSetEnabled("wear_btn", !val); +	updateVerbs();  }  void LLPanelOutfitsInventory::onWearablesLoaded() diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 0b02861b75..c0518b705b 100644 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -175,6 +175,8 @@ protected:  	BOOL				mNoCopyTextureSelected;  	F32					mContextConeOpacity;  	LLSaveFolderState	mSavedFolderState; + +	BOOL				mSelectedItemPinned;  };  LLFloaterTexturePicker::LLFloaterTexturePicker(	 @@ -197,7 +199,8 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(  	mFilterEdit(NULL),  	mImmediateFilterPermMask(immediate_filter_perm_mask),  	mNonImmediateFilterPermMask(non_immediate_filter_perm_mask), -	mContextConeOpacity(0.f) +	mContextConeOpacity(0.f), +	mSelectedItemPinned( FALSE )  {  	mCanApplyImmediately = can_apply_immediately;  	LLUICtrlFactory::getInstance()->buildFloater(this,"floater_texture_ctrl.xml",NULL); @@ -597,6 +600,31 @@ void LLFloaterTexturePicker::draw()  			mTentativeLabel->setVisible( TRUE );  			drawChild(mTentativeLabel);  		} + +		if (mSelectedItemPinned) return; + +		LLFolderView* folder_view = mInventoryPanel->getRootFolder(); +		if (!folder_view) return; + +		LLInventoryFilter* filter = folder_view->getFilter(); +		if (!filter) return; + +		bool is_filter_active = folder_view->getCompletedFilterGeneration() < filter->getCurrentGeneration() && +				filter->isNotDefault(); + +		// After inventory panel filter is applied we have to update +		// constraint rect for the selected item because of folder view +		// AutoSelectOverride set to TRUE. We force PinningSelectedItem +		// flag to FALSE state and setting filter "dirty" to update +		// scroll container to show selected item (see LLFolderView::doIdle()). +		if (!is_filter_active && !mSelectedItemPinned) +		{ +			folder_view->setPinningSelectedItem(mSelectedItemPinned); +			folder_view->dirtyFilter(); +			folder_view->arrangeFromRoot(); + +			mSelectedItemPinned = TRUE; +		}  	}  } diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 3b56183dfe..9926c8d15f 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -96,6 +96,7 @@ public:  		mInventoryItemsDict["New Gesture"]		= LLTrans::getString("New Gesture");  		mInventoryItemsDict["New Script"]		= LLTrans::getString("New Script");  		mInventoryItemsDict["New Folder"]		= LLTrans::getString("New Folder"); +		mInventoryItemsDict["New Note"]			= LLTrans::getString("New Note");  		mInventoryItemsDict["Contents"]			= LLTrans::getString("Contents");  		mInventoryItemsDict["Gesture"]			= LLTrans::getString("Gesture"); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7cca118392..df8e127b1f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -108,9 +108,12 @@  #include "llappearancemgr.h"  #include "lltrans.h"  #include "lleconomy.h" +#include "boost/unordered_map.hpp"  using namespace LLVOAvatarDefines; +static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels; +  BOOL enable_land_build(void*);  BOOL enable_object_build(void*); @@ -2403,31 +2406,53 @@ void handle_object_touch()  		msg->sendMessage(object->getRegion()->getHost());  } -// One object must have touch sensor -class LLObjectEnableTouch : public view_listener_t +static void init_default_item_label(const std::string& item_name)  { -	bool handleEvent(const LLSD& userdata) +	boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name); +	if (it == sDefaultItemLabels.end())  	{ -		LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); -		 -		bool new_value = obj && obj->flagHandleTouch(); - -		// Update label based on the node touch name if available. -		std::string touch_text; -		LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); -		if (node && node->mValid && !node->mTouchName.empty()) -		{ -			touch_text = node->mTouchName; -		} -		else +		LLStringExplicit default_label = gMenuHolder->childGetValue(item_name).asString(); +		if (!default_label.empty())  		{ -			touch_text = userdata.asString(); +			sDefaultItemLabels.insert(std::pair<std::string, LLStringExplicit>(item_name, default_label));  		} -		gMenuHolder->childSetText("Object Touch", touch_text); -		gMenuHolder->childSetText("Attachment Object Touch", touch_text); +	} +} -		return new_value; +static LLStringExplicit get_default_item_label(const std::string& item_name) +{ +	LLStringExplicit res(""); +	boost::unordered_map<std::string, LLStringExplicit>::iterator it = sDefaultItemLabels.find(item_name); +	if (it != sDefaultItemLabels.end()) +	{ +		res = it->second; +	} + +	return res; +} + + +bool enable_object_touch(LLUICtrl* ctrl) +{ +	LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject(); + +	bool new_value = obj && obj->flagHandleTouch(); + +	std::string item_name = ctrl->getName(); +	init_default_item_label(item_name); + +	// Update label based on the node touch name if available. +	LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode(); +	if (node && node->mValid && !node->mTouchName.empty()) +	{ +		gMenuHolder->childSetText(item_name, node->mTouchName); +	} +	else +	{ +		gMenuHolder->childSetText(item_name, get_default_item_label(item_name));  	} + +	return new_value;  };  //void label_touch(std::string& label, void*) @@ -5519,27 +5544,27 @@ bool enable_object_stand_up()  	return sitting_on_selection();  } -bool enable_object_sit() +bool enable_object_sit(LLUICtrl* ctrl)  {  	// 'Object Sit' menu item is enabled when agent is not sitting on selection  	bool sitting_on_sel = sitting_on_selection();  	if (!sitting_on_sel)  	{ -		LLMenuItemGL* sit_menu_item = gMenuHolder->getChild<LLMenuItemGL>("Object Sit"); -		// Init default 'Object Sit' menu item label -		static const LLStringExplicit sit_text(sit_menu_item->getLabel()); +		std::string item_name = ctrl->getName(); + +		// init default labels +		init_default_item_label(item_name); +  		// Update label -		std::string label;  		LLSelectNode* node = LLSelectMgr::getInstance()->getSelection()->getFirstRootNode();  		if (node && node->mValid && !node->mSitName.empty())  		{ -			label.assign(node->mSitName); +			gMenuHolder->childSetText(item_name, node->mSitName);  		}  		else  		{ -			label = sit_text; +			gMenuHolder->childSetText(item_name, get_default_item_label(item_name));  		} -		sit_menu_item->setLabel(label);  	}  	return !sitting_on_sel && is_object_sittable();  } @@ -8048,7 +8073,6 @@ void initialize_menus()  	view_listener_t::addMenu(new LLObjectBuild(), "Object.Build");  	commit.add("Object.Touch", boost::bind(&handle_object_touch));  	commit.add("Object.SitOrStand", boost::bind(&handle_object_sit_or_stand)); -	enable.add("Object.EnableGearSit", boost::bind(&is_object_sittable));  	commit.add("Object.Delete", boost::bind(&handle_object_delete));  	view_listener_t::addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar");  	view_listener_t::addMenu(new LLObjectReturn(), "Object.Return"); @@ -8064,12 +8088,12 @@ void initialize_menus()  	commit.add("Object.Open", boost::bind(&handle_object_open));  	commit.add("Object.Take", boost::bind(&handle_take));  	enable.add("Object.EnableOpen", boost::bind(&enable_object_open)); -	view_listener_t::addMenu(new LLObjectEnableTouch(), "Object.EnableTouch"); +	enable.add("Object.EnableTouch", boost::bind(&enable_object_touch, _1));  	enable.add("Object.EnableDelete", boost::bind(&enable_object_delete));  	enable.add("Object.EnableWear", boost::bind(&object_selected_and_point_valid));  	enable.add("Object.EnableStandUp", boost::bind(&enable_object_stand_up)); -	enable.add("Object.EnableSit", boost::bind(&enable_object_sit)); +	enable.add("Object.EnableSit", boost::bind(&enable_object_sit, _1));  	view_listener_t::addMenu(new LLObjectEnableReturn(), "Object.EnableReturn");  	view_listener_t::addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse"); diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index 7239b13466..e2348375d5 100644 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -11,8 +11,7 @@           function="Object.Touch" />          <menu_item_call.on_enable           function="Object.EnableTouch" -         name="EnableTouch" -         parameter="Touch" /> +         name="EnableTouch"/>      </menu_item_call>      <!--menu_item_call       label="Stand Up" diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml index b6f00ef6d1..8ec7689819 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml @@ -22,7 +22,7 @@      <menu_item_call.on_click       function="InspectObject.Sit"/>      <menu_item_call.on_visible -     function="Object.EnableGearSit" /> +     function="Object.EnableSit"/>    </menu_item_call>    <menu_item_call     label="Pay" diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3d8ceb9912..a0c67e3612 100644 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2103,6 +2103,7 @@ Clears (deletes) the media and all params from the given face.  	<string name="SummaryForTheWeek"    value="Summary for this week, beginning on " />  	<string name="NextStipendDay"       value="The next stipend day is " />  	<string name="GroupIndividualShare" value="                      Group       Individual Share" /> +	<string name="GroupColumn"          value="                      Group" />  	<string name="Balance">Balance</string>  	<string name="Credits">Credits</string>  	<string name="Debits">Debits</string> @@ -3142,6 +3143,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].    <string name="group_role_everyone">Everyone</string>    <string name="group_role_officers">Officers</string>    <string name="group_role_owners">Owners</string> +  <string name="group_member_status_online">Online</string>    <string name="uploading_abuse_report">Uploading... @@ -3166,6 +3168,7 @@ Abuse Report</string>    <string name="Invalid Wearable">Invalid Wearable</string>    <string name="New Gesture">New Gesture</string>    <string name="New Script">New Script</string> +  <string name="New Note">New Note</string>    <string name="New Folder">New Folder</string>    <string name="Contents">Contents</string>    <string name="Gesture">Gesture</string> diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp index 1c29feec5f..347a5e8ab8 100644 --- a/indra/newview/tests/lllogininstance_test.cpp +++ b/indra/newview/tests/lllogininstance_test.cpp @@ -226,6 +226,16 @@ S32 LLNotification::getSelectedOption(const LLSD& notification, const LLSD& resp  	return response.asInteger();  } +//----------------------------------------------------------------------------- +#include "../llmachineid.h" +unsigned char gMACAddress[MAC_ADDRESS_BYTES] = {77,21,46,31,89,2}; + +S32 LLMachineID::getUniqueID(unsigned char *unique_id, size_t len) +{ +	memcpy(unique_id, gMACAddress, len); +	return 1; +} +//-----------------------------------------------------------------------------  // misc  std::string xml_escape_string(const std::string& in)  {  | 
