diff options
| author | Debi King (Dessie) <dessie@lindenlab.com> | 2011-09-02 10:23:46 -0400 | 
|---|---|---|
| committer | Debi King (Dessie) <dessie@lindenlab.com> | 2011-09-02 10:23:46 -0400 | 
| commit | 1f149a432b8dfe71d2386a2b36adeb287affd9ae (patch) | |
| tree | 9f8d5103b856939297a7e90d710442247b244a87 | |
| parent | deddcfb8c566511b67c367c8d5d26e51a12db88e (diff) | |
| parent | 21ad5e0a0ef7d467d08c0488b6469a0ee42ca6ff (diff) | |
merged .hgtags
| -rw-r--r-- | .hgtags | 1 | ||||
| -rw-r--r-- | doc/contributions.txt | 5 | ||||
| -rw-r--r-- | doc/translations.txt | 7 | ||||
| -rwxr-xr-x | indra/llcommon/llversionviewer.h | 2 | ||||
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 2 | ||||
| -rw-r--r-- | indra/newview/llsidetray.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/lltoastnotifypanel.cpp | 25 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 128 | ||||
| -rw-r--r-- | indra/newview/llviewermessage.cpp | 27 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_login.xml | 3 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_region_terrain.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_status_bar.xml | 5 | 
13 files changed, 170 insertions, 58 deletions
| @@ -186,3 +186,4 @@ e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2  b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start  6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1  6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1 +586907287be581817b2422b5137971b22d54ea48 3.0.4-start diff --git a/doc/contributions.txt b/doc/contributions.txt index 55a3aaf1f4..016aa0064a 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -476,6 +476,7 @@ Identity Euler  Ima Mechanique  	OPEN-50  	OPEN-61 +	OPEN-76  	STORM-1175  Imnotgoing Sideways  Inma Rau @@ -566,6 +567,10 @@ Jonathan Yap  	STORM-1276  	STORM-1462  	STORM-1459 +	STORM-1522 +	STORM-1567 +	STORM-1572 +	STORM-1574  Kadah Coba      STORM-1060  Jondan Lundquist diff --git a/doc/translations.txt b/doc/translations.txt index c9cfc1cdeb..9b7f2d6292 100644 --- a/doc/translations.txt +++ b/doc/translations.txt @@ -1,7 +1,9 @@ -#List of translators who contribute to SL Viewer 2.0+ and SL web translation by language +#List of translators who contribute to SL Viewer 2.0+ by language  	Danish  Flemming Congrejo +	German +Torben Trautman  	French  Valerie Linden  	Polish @@ -21,6 +23,7 @@ Lunita Savira  Minerva Memel  Polo Gufler  Xiki Luik -Perez Linden +Shinya Tandino +Catwise Yoshikawa  	Traditional Chinese  gefeit Dufaux diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index 64225b859b..324507fe7a 100755 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 3;  const S32 LL_VERSION_MINOR = 0; -const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_PATCH = 4;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 43aa67e949..65628b0573 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -25,7 +25,7 @@        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <real>300</real> +      <real>0</real>      </map>      <key>AdminMenu</key>      <map> diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 651897a217..a7c4057846 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -496,7 +496,7 @@ public:  		LLSideTray* side_tray = LLSideTray::getInstance();  		// Check if the tab we are dragging is docked. -		if (!side_tray->isTabAttached(getName())) return FALSE; +		if (!side_tray->isTabAttached(mTabName)) return FALSE;  		// Same value is hardcoded in LLDragHandle::handleHover().  		const S32 undock_threshold = 12; @@ -505,7 +505,7 @@ public:  		if (delta_x <= -undock_threshold ||	delta_x >= undock_threshold	||  			delta_y <= -undock_threshold ||	delta_y >= undock_threshold)  		{ -			LLSideTrayTab* tab = side_tray->getTab(getName()); +			LLSideTrayTab* tab = side_tray->getTab(mTabName);  			if (!tab) return FALSE;  			tab->setDocked(false); @@ -544,7 +544,12 @@ protected:  		, mDragLastScreenX(0)  		, mDragLastScreenY(0)  		, mBadgeDriver(NULL) -	{} +	{ +		// Find out the tab name to use in handleHover(). +		size_t pos = getName().find("_button"); +		llassert(pos != std::string::npos); +		mTabName = getName().substr(0, pos); +	}  	friend class LLUICtrlFactory; @@ -562,6 +567,7 @@ private:  	S32		mDragLastScreenX;  	S32		mDragLastScreenY; +	std::string					mTabName;  	LLSideTrayTabBadgeDriver*	mBadgeDriver;  }; @@ -679,6 +685,7 @@ LLSideTrayTab* LLSideTray::getTab(const std::string& name)  bool LLSideTray::isTabAttached(const std::string& name)  {  	LLSideTrayTab* tab = getTab(name); +	llassert(tab);  	if (!tab) return false;  	return std::find(mTabs.begin(), mTabs.end(), tab) != mTabs.end(); diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index fa91f129b8..6873cf058a 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -307,8 +307,14 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair  	S32 bottom_offset = mIsScriptDialog ? (BTN_HEIGHT + IGNORE_BTN_TOP_DELTA + BOTTOM_PAD) : BOTTOM_PAD;  	S32 max_width = mControlPanel->getRect().getWidth();  	LLButton* ignore_btn = NULL; +	LLButton* mute_btn = NULL;  	for (std::vector<index_button_pair_t>::const_iterator it = buttons.begin(); it != buttons.end(); it++)  	{ +		if (-2 == it->first) +		{ +			mute_btn = it->second; +			continue; +		}  		if (it->first == -1)  		{  			ignore_btn = it->second; @@ -328,6 +334,8 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair  		left = btn_rect.mLeft + btn_rect.getWidth() + h_pad;  		mControlPanel->addChild(btn, -1);  	} + +	U32 ignore_btn_width = 0;  	if (mIsScriptDialog && ignore_btn != NULL)  	{  		LLRect ignore_btn_rect(ignore_btn->getRect()); @@ -340,8 +348,25 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vector<index_button_pair  		ignore_btn_rect.setOriginAndSize(ignore_btn_left, BOTTOM_PAD,// always move ignore button at the bottom  				ignore_btn_rect.getWidth(), ignore_btn_rect.getHeight());  		ignore_btn->setRect(ignore_btn_rect); +		ignore_btn_width = ignore_btn_rect.getWidth();  		mControlPanel->addChild(ignore_btn, -1);  	} + +	if (mIsScriptDialog && mute_btn != NULL) +	{ +		LLRect mute_btn_rect(mute_btn->getRect()); +		S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH +		// Place mute (Block) button to the left of the ignore button. +		S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row	- 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2); +		if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel +		{ +			mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD; +		} +		mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom +				mute_btn_rect.getWidth(), mute_btn_rect.getHeight()); +		mute_btn->setRect(mute_btn_rect); +		mControlPanel->addChild(mute_btn); +	}  }  void LLToastNotifyPanel::adjustPanelForScriptNotice(S32 button_panel_width, S32 button_panel_height) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b29821479b..26599f557e 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -116,6 +116,8 @@  using namespace LLVOAvatarDefines; +typedef LLPointer<LLViewerObject> LLViewerObjectPtr; +  static boost::unordered_map<std::string, LLStringExplicit> sDefaultItemLabels;  BOOL enable_land_build(void*); @@ -4010,23 +4012,21 @@ void handle_god_request_avatar_geometry(void *)  	}  } - -void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) +static bool get_derezzable_objects( +	EDeRezDestination dest, +	std::string& error, +	LLViewerRegion*& first_region, +	LLDynamicArray<LLViewerObjectPtr>* derez_objectsp, +	bool only_check = false)  { -	if(gAgentCamera.cameraMouselook()) -	{ -		gAgentCamera.changeCameraToDefault(); -	} -	//gInventoryView->setPanelOpen(TRUE); +	bool found = false; -	std::string error; -	LLDynamicArray<LLViewerObject*> derez_objects; +	LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();  	// Check conditions that we can't deal with, building a list of  	// everything that we'll actually be derezzing. -	LLViewerRegion* first_region = NULL; -	for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin(); -		 iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++) +	for (LLObjectSelection::valid_root_iterator iter = selection->valid_root_begin(); +		 iter != selection->valid_root_end(); iter++)  	{  		LLSelectNode* node = *iter;  		LLViewerObject* object = node->getObject(); @@ -4093,8 +4093,53 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)  		}  		if(can_derez_current)  		{ -			derez_objects.put(object); +			found = true; + +			if (only_check) +				// one found, no need to traverse to the end +				break; + +			if (derez_objectsp) +				derez_objectsp->put(object); + +		} +	} + +	return found; +} + +static bool can_derez(EDeRezDestination dest) +{ +	LLViewerRegion* first_region = NULL; +	std::string error; +	return get_derezzable_objects(dest, error, first_region, NULL, true); +} + +static void derez_objects( +	EDeRezDestination dest, +	const LLUUID& dest_id, +	LLViewerRegion*& first_region, +	std::string& error, +	LLDynamicArray<LLViewerObjectPtr>* objectsp) +{ +	LLDynamicArray<LLViewerObjectPtr> derez_objects; + +	if (!objectsp) // if objects to derez not specified +	{ +		// get them from selection +		if (!get_derezzable_objects(dest, error, first_region, &derez_objects, false)) +		{ +			llwarns << "No objects to derez" << llendl; +			return;  		} + +		objectsp = &derez_objects; +	} + + +	if(gAgentCamera.cameraMouselook()) +	{ +		gAgentCamera.changeCameraToDefault();  	}  	// This constant is based on (1200 - HEADER_SIZE) / 4 bytes per @@ -4104,13 +4149,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)  	// satisfy anybody.  	const S32 MAX_ROOTS_PER_PACKET = 250;  	const S32 MAX_PACKET_COUNT = 254; -	F32 packets = ceil((F32)derez_objects.count() / (F32)MAX_ROOTS_PER_PACKET); +	F32 packets = ceil((F32)objectsp->count() / (F32)MAX_ROOTS_PER_PACKET);  	if(packets > (F32)MAX_PACKET_COUNT)  	{  		error = "AcquireErrorTooManyObjects";  	} -	if(error.empty() && derez_objects.count() > 0) +	if(error.empty() && objectsp->count() > 0)  	{  		U8 d = (U8)dest;  		LLUUID tid; @@ -4135,11 +4180,11 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)  			msg->addU8Fast(_PREHASH_PacketCount, packet_count);  			msg->addU8Fast(_PREHASH_PacketNumber, packet_number);  			objects_in_packet = 0; -			while((object_index < derez_objects.count()) +			while((object_index < objectsp->count())  				  && (objects_in_packet++ < MAX_ROOTS_PER_PACKET))  			{ -				LLViewerObject* object = derez_objects.get(object_index++); +				LLViewerObject* object = objectsp->get(object_index++);  				msg->nextBlockFast(_PREHASH_ObjectData);  				msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID());  				// VEFFECT: DerezObject @@ -4164,6 +4209,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id)  	}  } +static void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) +{ +	LLViewerRegion* first_region = NULL; +	std::string error; +	derez_objects(dest, dest_id, first_region, error, NULL); +} +  void handle_take_copy()  {  	if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; @@ -4175,12 +4227,19 @@ void handle_take_copy()  // You can return an object to its owner if it is on your land.  class LLObjectReturn : public view_listener_t  { +public: +	LLObjectReturn() : mFirstRegion(NULL) {} + +private:  	bool handleEvent(const LLSD& userdata)  	{  		if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true;  		mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); +		// Save selected objects, so that we still know what to return after the confirmation dialog resets selection. +		get_derezzable_objects(DRD_RETURN_TO_OWNER, mError, mFirstRegion, &mReturnableObjects); +  		LLNotificationsUtil::add("ReturnToOwner", LLSD(), LLSD(), boost::bind(&LLObjectReturn::onReturnToOwner, this, _1, _2));  		return true;  	} @@ -4191,16 +4250,23 @@ class LLObjectReturn : public view_listener_t  		if (0 == option)  		{  			// Ignore category ID for this derez destination. -			derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null); +			derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null, mFirstRegion, mError, &mReturnableObjects);  		} +		mReturnableObjects.clear(); +		mError.clear(); +		mFirstRegion = NULL; +  		// drop reference to current selection  		mObjectSelection = NULL;  		return false;  	} -protected:  	LLObjectSelectionHandle mObjectSelection; + +	LLDynamicArray<LLViewerObjectPtr> mReturnableObjects; +	std::string mError; +	LLViewerRegion* mFirstRegion;  }; @@ -4225,29 +4291,7 @@ class LLObjectEnableReturn : public view_listener_t  		}  		else  		{ -			LLViewerRegion* region = gAgent.getRegion(); -			if (region) -			{ -				// Estate owners and managers can always return objects. -				if (region->canManageEstate()) -				{ -					new_value = true; -				} -				else -				{ -					struct f : public LLSelectedObjectFunctor -					{ -						virtual bool apply(LLViewerObject* obj) -						{ -							return  -								obj->permModify() || -								obj->isReturnable(); -						} -					} func; -					const bool firstonly = true; -					new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly); -				} -			} +			new_value = can_derez(DRD_RETURN_TO_OWNER);  		}  #endif  		return new_value; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 64aeb750c6..68745d5aeb 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6516,8 +6516,24 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response)  		rtn_text = LLNotification::getSelectedOptionName(response);  	} -	// Didn't click "Ignore" -	if (button_idx != -1) +	// Button -2 = Mute +	// Button -1 = Ignore - no processing needed for this button +	// Buttons 0 and above = dialog choices + +	if (-2 == button_idx) +	{ +		std::string object_name = notification["payload"]["object_name"].asString(); +		LLUUID object_id = notification["payload"]["object_id"].asUUID(); +		LLMute mute(object_id, object_name, LLMute::OBJECT); +		if (LLMuteList::getInstance()->add(mute)) +		{ +			// This call opens the sidebar, displays the block list, and highlights the newly blocked +			// object in the list so the user can see that their block click has taken effect. +			LLPanelBlockedList::showPanelAndSelect(object_id); +		} +	} + +	if (0 <= button_idx)  	{  		LLMessageSystem* msg = gMessageSystem;  		msg->newMessage("ScriptDialogReply"); @@ -6560,12 +6576,12 @@ void process_script_dialog(LLMessageSystem* msg, void**)  	std::string message;   	std::string first_name;  	std::string last_name; -	std::string title; +	std::string object_name;  	S32 chat_channel;  	msg->getString("Data", "FirstName", first_name);  	msg->getString("Data", "LastName", last_name); -	msg->getString("Data", "ObjectName", title); +	msg->getString("Data", "ObjectName", object_name);  	msg->getString("Data", "Message", message);  	msg->getS32("Data", "ChatChannel", chat_channel); @@ -6576,6 +6592,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)  	payload["sender"] = msg->getSender().getIPandPort();  	payload["object_id"] = object_id;  	payload["chat_channel"] = chat_channel; +	payload["object_name"] = object_name;  	// build up custom form  	S32 button_count = msg->getNumberOfBlocks("Buttons"); @@ -6594,7 +6611,7 @@ void process_script_dialog(LLMessageSystem* msg, void**)  	}  	LLSD args; -	args["TITLE"] = title; +	args["TITLE"] = object_name;  	args["MESSAGE"] = message;  	LLNotificationPtr notification;  	if (!first_name.empty()) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 104bcaf7d0..251fce2333 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6261,6 +6261,10 @@ Grant this request?  [MESSAGE]      <form name="form">        <button +       index="-2" +       name="Mute" +       text="Block"/> +      <button         index="-1"         name="Ignore"         text="Ignore"/> @@ -6276,6 +6280,10 @@ Grant this request?  [MESSAGE]      <form name="form">        <button +       index="-2" +       name="Mute" +       text="Block"/> +      <button         index="-1"         name="Ignore"         text="Ignore"/> diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml index 0bc1be666e..83f1bff91f 100644 --- a/indra/newview/skins/default/xui/en/panel_login.xml +++ b/indra/newview/skins/default/xui/en/panel_login.xml @@ -117,12 +117,13 @@ label="Remember password"    name="connect_btn"    top="35"    width="90" /> +  <!-- Utf code in label is a filled up-pointing triangle -->    <menu_button    left_pad="5"    top="35"    width="80"    height="23" -  label="Mode ▲" +  label="Mode ▲"    name="mode_menu"      tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."    menu_filename="menu_mode_change.xml" diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml index bbb8b40594..5d060c0a0d 100644 --- a/indra/newview/skins/default/xui/en/panel_region_terrain.xml +++ b/indra/newview/skins/default/xui/en/panel_region_terrain.xml @@ -193,7 +193,7 @@      </text>      <text         follows="left|top" -       height="20" +       height="60"         layout="topleft"         left_delta="0"         name="height_text_lbl11" diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 23ad0e9528..f25a73da38 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -77,15 +77,16 @@       top="0"       width="55" />    </panel> +  <!-- UTF 9660 code in label below is a down-pointing filled-in triangle -->    <menu_button       follows="right|top"          image_color="0 0 0 0"      hover_glow_amount="0"      left_pad="5" -    top="0" +    top="2"      width="55"      height="18" -    label="Mode ▼" +    label="Mode ▼"      tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."      menu_filename="menu_mode_change.xml"      /> | 
