diff options
30 files changed, 396 insertions, 153 deletions
| diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake index f4706dd4f2..180504d286 100644 --- a/indra/cmake/APR.cmake +++ b/indra/cmake/APR.cmake @@ -54,7 +54,10 @@ else (STANDALONE)    endif (WINDOWS)    set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1) -  if (LINUX AND VIEWER) -    list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) -  endif (LINUX AND VIEWER) +  if (LINUX) +    if (VIEWER) +      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid) +    endif (VIEWER) +    list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt) +  endif (LINUX)  endif (STANDALONE) diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake index 0d334837d4..0ca432da18 100644 --- a/indra/cmake/GStreamer010Plugin.cmake +++ b/indra/cmake/GStreamer010Plugin.cmake @@ -24,7 +24,6 @@ elseif (LINUX)        gmodule-2.0        dl        gthread-2.0 -      rt        glib-2.0        )  endif (STANDALONE) diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt index 4b19e28066..ab62a0d0af 100644 --- a/indra/linux_crash_logger/CMakeLists.txt +++ b/indra/linux_crash_logger/CMakeLists.txt @@ -54,12 +54,5 @@ target_link_libraries(linux-crash-logger      ${DB_LIBRARIES}      ) -add_custom_command( -    OUTPUT linux-crash-logger-stripped -    COMMAND strip -    ARGS --strip-debug -o linux-crash-logger-stripped linux-crash-logger -    DEPENDS linux-crash-logger -    ) - -add_custom_target(linux-crash-logger-strip-target ALL -                  DEPENDS linux-crash-logger-stripped) +add_custom_target(linux-crash-logger-target ALL +                  DEPENDS linux-crash-logger) diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt index 9fe32ecb46..00a78b2a8f 100644 --- a/indra/linux_updater/CMakeLists.txt +++ b/indra/linux_updater/CMakeLists.txt @@ -47,12 +47,5 @@ target_link_libraries(linux-updater      ${LLCOMMON_LIBRARIES}      ) -add_custom_command( -    OUTPUT linux-updater-stripped -    COMMAND strip -    ARGS --strip-debug -o linux-updater-stripped linux-updater -    DEPENDS linux-updater -    ) - -add_custom_target(linux-updater-strip-target ALL -                  DEPENDS linux-updater-stripped) +add_custom_target(linux-updater-target ALL +                  DEPENDS linux-updater) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index a55915af35..0199fe3f57 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1565,25 +1565,13 @@ void LLFloater::draw()  	// draw background  	if( isBackgroundVisible() )  	{ +		drawShadow(this); +  		S32 left = LLPANEL_BORDER_WIDTH;  		S32 top = getRect().getHeight() - LLPANEL_BORDER_WIDTH;  		S32 right = getRect().getWidth() - LLPANEL_BORDER_WIDTH;  		S32 bottom = LLPANEL_BORDER_WIDTH; -		static LLUICachedControl<S32> shadow_offset_S32 ("DropShadowFloater", 0); -		static LLUIColor shadow_color_cached = LLUIColorTable::instance().getColor("ColorDropShadow"); -		LLColor4 shadow_color = shadow_color_cached; -		F32 shadow_offset = (F32)shadow_offset_S32; - -		if (!isBackgroundOpaque()) -		{ -			shadow_offset *= 0.2f; -			shadow_color.mV[VALPHA] *= 0.5f; -		} -		gl_drop_shadow(left, top, right, bottom,  -			shadow_color % alpha,  -			llround(shadow_offset)); -  		LLUIImage* image = NULL;  		LLColor4 color;  		if (isBackgroundOpaque()) @@ -1666,6 +1654,29 @@ void LLFloater::draw()  	}  } +void	LLFloater::drawShadow(LLPanel* panel) +{ +	F32 alpha = panel->getDrawContext().mAlpha; +	S32 left = LLPANEL_BORDER_WIDTH; +	S32 top = panel->getRect().getHeight() - LLPANEL_BORDER_WIDTH; +	S32 right = panel->getRect().getWidth() - LLPANEL_BORDER_WIDTH; +	S32 bottom = LLPANEL_BORDER_WIDTH; + +	static LLUICachedControl<S32> shadow_offset_S32 ("DropShadowFloater", 0); +	static LLUIColor shadow_color_cached = LLUIColorTable::instance().getColor("ColorDropShadow"); +	LLColor4 shadow_color = shadow_color_cached; +	F32 shadow_offset = (F32)shadow_offset_S32; + +	if (!panel->isBackgroundOpaque()) +	{ +		shadow_offset *= 0.2f; +		shadow_color.mV[VALPHA] *= 0.5f; +	} +	gl_drop_shadow(left, top, right, bottom,  +		shadow_color % alpha,  +		llround(shadow_offset)); +} +  void	LLFloater::setCanMinimize(BOOL can_minimize)  {  	// if removing minimize/restore button programmatically, diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 2166d8db8a..19e8288807 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -222,6 +222,7 @@ public:  	virtual BOOL	handleScrollWheel(S32 x, S32 y, S32 mask);  	virtual void	draw(); +	virtual void	drawShadow(LLPanel* panel);  	virtual void	onOpen(const LLSD& key) {}  	virtual void	onClose(bool app_quitting) {} diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ffb8e6bc6f..ea1ec80ae7 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1624,13 +1624,6 @@ set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH  if (LINUX) -  add_custom_command( -      OUTPUT secondlife-stripped -      COMMAND strip -      ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME} -      DEPENDS ${VIEWER_BINARY_NAME} -      ) -    set(product SecondLife-${ARCH}-${viewer_VERSION})    add_custom_command( @@ -1650,15 +1643,15 @@ if (LINUX)          --login_channel=${VIEWER_LOGIN_CHANNEL}          --source=${CMAKE_CURRENT_SOURCE_DIR}          --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched -      DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py +      DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py        )    add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit)    if (NOT INSTALL)      add_custom_target(package ALL DEPENDS ${product}.tar.bz2) -    add_dependencies(package linux-crash-logger-strip-target) -    add_dependencies(package linux-updater-strip-target) +    add_dependencies(package linux-crash-logger-target) +    add_dependencies(package linux-updater-target)      check_message_template(package)    endif (NOT INSTALL)  endif (LINUX) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index f58f4ac594..73c08c4867 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4,13 +4,13 @@      <key>AFKTimeout</key>      <map>        <key>Comment</key> -      <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string> +      <string>Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never)</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <real>300.0</real> +      <real>0</real>      </map>      <key>AdvanceSnapshot</key>      <map> @@ -197,7 +197,7 @@        <key>Type</key>        <string>F32</string>        <key>Value</key> -      <real>1.0</real> +      <real>0.5</real>      </map>      <key>AudioLevelMic</key>      <map> @@ -219,7 +219,7 @@        <key>Type</key>        <string>F32</string>        <key>Value</key> -      <real>1.0</real> +      <real>0.5</real>      </map>      <key>AudioLevelRolloff</key>      <map> @@ -241,7 +241,7 @@        <key>Type</key>        <string>F32</string>        <key>Value</key> -      <real>1.0</real> +      <real>0.5</real>      </map>      <key>AudioLevelUI</key>      <map> @@ -4328,13 +4328,13 @@      <key>LoginLocation</key>      <map>        <key>Comment</key> -      <string>Login at same location you last logged out</string> +      <string>Login location ('last', 'home')</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>last</string> +      <string>home</string>      </map>      <key>LoginPage</key>      <map> @@ -5554,7 +5554,7 @@  	<key>PreferredMaturity</key>      <map>        <key>Comment</key> -      <string>Setting for the user's preferred maturity level.</string> +      <string>Setting for the user's preferred maturity level (consts in indra_constants.h)</string>        <key>Persist</key>        <integer>1</integer>        <key>Type</key> @@ -10114,7 +10114,7 @@        <key>Type</key>        <string>Boolean</string>        <key>Value</key> -      <integer>0</integer> +      <integer>1</integer>      </map>      <key>UseFreezeFrame</key>      <map> diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index 95a946cee8..c9082da9a9 100644 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -422,6 +422,18 @@ void LLBottomTray::showSnapshotButton(BOOL visible)  	setTrayButtonVisibleIfPossible(RS_BUTTON_SNAPSHOT, visible);  } +void LLBottomTray::toggleMovementControls() +{ +	if (mMovementButton) +		mMovementButton->onCommit(); +} + +void LLBottomTray::toggleCameraControls() +{ +	if (mCamButton) +		mCamButton->onCommit(); +} +  BOOL LLBottomTray::postBuild()  { diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 2eeb0c0017..18c14e5e19 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -94,6 +94,9 @@ public:  	void showCameraButton(BOOL visible);  	void showSnapshotButton(BOOL visible); +	void toggleMovementControls(); +	void toggleCameraControls(); +  	void onMouselookModeIn();  	void onMouselookModeOut(); diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index dac4390fa7..0a8ea7de39 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -260,6 +260,10 @@ private:  	 * @see sOnCurrentChannelChanged()  	 */  	static LLVoiceChannel* sCurrentVoiceCanel; + +	/* virtual */ +	LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; } +  	boost::signals2::connection mVoiceChannelStateChangeConnection;  }; diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index c3bda26aac..79a2631c31 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -682,17 +682,24 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)  		}  		BOOL notify = FALSE;  		LLSD args; +		LLSD payload;  		for(S32 i = 0; i < count; ++i)  		{  			msg->getUUIDFast(_PREHASH_AgentBlock, _PREHASH_AgentID, agent_id, i); +			payload["FROM_ID"] = agent_id;  			info = getBuddyInfo(agent_id);  			if(info)  			{  				setBuddyOnline(agent_id,online);  				if(chat_notify)  				{ -					notify = TRUE; -					args["NAME_SLURL"] = LLSLURL::buildCommand("agent", agent_id, "about"); +					std::string first, last; +					if(gCacheName->getName(agent_id, first, last)) +					{ +						notify = TRUE; +						args["FIRST"] = first; +						args["LAST"] = last; +					}  				}  			}  			else @@ -719,13 +726,13 @@ void LLAvatarTracker::processNotify(LLMessageSystem* msg, bool online)  				notification =  					LLNotificationsUtil::add("FriendOnline",  											 args, -											 LLSD().with("respond_on_mousedown", TRUE), +											 payload.with("respond_on_mousedown", TRUE),  											 boost::bind(&LLAvatarActions::startIM, agent_id));  			}  			else  			{  				notification = -					LLNotificationsUtil::add("FriendOffline", args); +					LLNotificationsUtil::add("FriendOffline", args, payload);  			}  			// If there's an open IM session with this agent, send a notification there too. diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 81cc52528c..cf5ac6b2e6 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -122,7 +122,7 @@ public:  	BOOL handleToolTip(S32 x, S32 y, MASK mask)  	{  		LLTextBase* name = getChild<LLTextBase>("user_name"); -		if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && SYSTEM_FROM != mFrom) +		if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && mFrom.size() && SYSTEM_FROM != mFrom)  		{  			// Spawn at right side of the name textbox. @@ -179,12 +179,7 @@ public:  		}  		else if (level == "add")  		{ -			std::string name; -			name.assign(getFirstName()); -			name.append(" "); -			name.append(getLastName()); - -			LLAvatarActions::requestFriendshipDialog(getAvatarId(), name); +			LLAvatarActions::requestFriendshipDialog(getAvatarId(), mFrom);  		}  		else if (level == "remove")  		{ @@ -253,8 +248,6 @@ public:  	}  	const LLUUID&		getAvatarId () const { return mAvatarID;} -	const std::string&	getFirstName() const { return mFirstName; } -	const std::string&	getLastName	() const { return mLastName; }  	void setup(const LLChat& chat,const LLStyle::Params& style_params)   	{ @@ -264,7 +257,7 @@ public:  		gCacheName->get(mAvatarID, FALSE, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3, _4));  		//*TODO overly defensive thing, source type should be maintained out there -		if(chat.mFromID.isNull() || chat.mFromName == SYSTEM_FROM) +		if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM)  		{  			mSourceType = CHAT_SOURCE_SYSTEM;  		} @@ -275,9 +268,11 @@ public:  		userName->setColor(style_params.color());  		userName->setValue(chat.mFromName); +		mFrom = chat.mFromName;  		if (chat.mFromName.empty() || CHAT_SOURCE_SYSTEM == mSourceType)  		{ -			userName->setValue(LLTrans::getString("SECOND_LIFE")); +			mFrom = LLTrans::getString("SECOND_LIFE"); +			userName->setValue(mFrom);  		} @@ -337,8 +332,7 @@ public:  	{  		if (id != mAvatarID)  			return; -		mFirstName = first; -		mLastName = last; +		mFrom = first + " " + last;  	}  protected:  	static const S32 PADDING = 20; @@ -423,8 +417,6 @@ protected:  	LLUUID			    mAvatarID;  	EChatSourceType		mSourceType; -	std::string			mFirstName; -	std::string			mLastName;  	std::string			mFrom;  	LLUUID				mSessionID; @@ -796,6 +788,12 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL  			}  		} +		if (irc_me && !use_plain_text_chat_history) +		{ +			message = chat.mFromName + message; +		} +		 +  		mEditor->appendText(message, FALSE, style_params);  	}  	mEditor->blockUndo(); diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp index e62e2c99a7..844f0ac509 100644 --- a/indra/newview/llfloaterinventory.cpp +++ b/indra/newview/llfloaterinventory.cpp @@ -41,6 +41,7 @@  #include "llpanelmaininventory.h"  #include "llresmgr.h"  #include "llviewerfoldertype.h" +#include "lltransientfloatermgr.h"  ///----------------------------------------------------------------------------  /// LLFloaterInventory @@ -49,10 +50,12 @@  LLFloaterInventory::LLFloaterInventory(const LLSD& key)  	: LLFloater(key)  { +	LLTransientFloaterMgr::getInstance()->addControlView(this);  }  LLFloaterInventory::~LLFloaterInventory()  { +	LLTransientFloaterMgr::getInstance()->removeControlView(this);  }  BOOL LLFloaterInventory::postBuild() diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 3e7bf51f4c..e5c8ddf0a4 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -511,7 +511,8 @@ void LLFloaterPreference::onOpen(const LLSD& key)  	// if we have no agent, we can't let them choose anything  	// if we have an agent, then we only let them choose if they have a choice  	bool can_choose_maturity = -		gAgent.getID().notNull() &&	(gAgent.isMature() || gAgent.isGodlike()); +		gAgent.getID().notNull() && +		(gAgent.isMature() || gAgent.isGodlike());  	LLComboBox* maturity_combo = getChild<LLComboBox>("maturity_desired_combobox"); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 2f248f3596..db7998fe6e 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -39,6 +39,7 @@  #include "llavatariconctrl.h"  #include "llgroupiconctrl.h"  #include "llagent.h" +#include "lltransientfloatermgr.h"  //  // LLIMFloaterContainer @@ -47,9 +48,13 @@ LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed)  :	LLMultiFloater(seed)  {  	mAutoResize = FALSE; +	LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::IM, this);  } -LLIMFloaterContainer::~LLIMFloaterContainer(){} +LLIMFloaterContainer::~LLIMFloaterContainer() +{ +	LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this); +}  BOOL LLIMFloaterContainer::postBuild()  { diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index b2cdc0738f..83b99f1b27 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -120,6 +120,7 @@ private:  	void onClickTeleport();  	void onClickInviteToGroup();  	void onClickPay(); +	void onClickShare();  	void onToggleMute();  	void onClickReport();  	void onClickFreeze(); @@ -213,6 +214,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)  	mCommitCallbackRegistrar.add("InspectAvatar.Teleport",	boost::bind(&LLInspectAvatar::onClickTeleport, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	 +	mCommitCallbackRegistrar.add("InspectAvatar.Share",	boost::bind(&LLInspectAvatar::onClickShare, this));  	mCommitCallbackRegistrar.add("InspectAvatar.ToggleMute",	boost::bind(&LLInspectAvatar::onToggleMute, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.Freeze",  		boost::bind(&LLInspectAvatar::onClickFreeze, this));	 @@ -678,6 +680,12 @@ void LLInspectAvatar::onClickPay()  	closeFloater();  } +void LLInspectAvatar::onClickShare() +{ +	LLAvatarActions::share(mAvatarID); +	closeFloater(); +} +  void LLInspectAvatar::onToggleMute()  {  	LLMute mute(mAvatarID, mAvatarName, LLMute::AGENT); diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index ca9b942629..048ed10886 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -290,8 +290,12 @@ void LLInventoryPanel::modelChanged(U32 mask)  				if(bridge)  				{	// Clear the display name first, so it gets properly re-built during refresh()  					bridge->clearDisplayName(); + +					view_item->refresh(); + +					// Set the new tooltip with the new display name. +					view_item->setToolTip(bridge->getDisplayName());  				} -				view_item->refresh();  			}  		} diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 96ce01c05f..f13445fa5d 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -69,6 +69,8 @@ const static std::string MULTI_LINE_PREFIX(" ");   *  Katar Ivercourt is Offline   *  [3:00]  Katar Ivercourt is Offline   *  [2009/11/20 3:01]  Corba ProductEngine is Offline + * + * Note: "You" was used as an avatar names in viewers of previous versions   */  const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}\\]\\s+)?(.*)$"); @@ -78,6 +80,9 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+   */  const static boost::regex NAME_AND_TEXT("(You:|Second Life:|[^\\s:]+\\s*[:]{1}|\\S+\\s+[^\\s:]+[:]{1})?(\\s*)(.*)"); +//is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st" +const static std::string NAME_TEXT_DIVIDER(": "); +  const static int IDX_TIMESTAMP = 1;  const static int IDX_STUFF = 2;  const static int IDX_NAME = 1; @@ -160,10 +165,19 @@ void LLLogChat::saveHistory(const std::string& filename,  	if (gSavedPerAccountSettings.getBOOL("LogTimestamp"))  		 item["time"] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")); -	item["from"]	= from;  	item["from_id"]	= from_id;  	item["message"]	= line; +	//adding "Second Life:" for all system messages to make chat log history parsing more reliable +	if (from.empty() && from_id.isNull()) +	{ +		item["from"] = SYSTEM_FROM;  +	} +	else +	{ +		item["from"] = from; +	} +  	file << LLChatLogFormatter(item) << std::endl;  	file.close(); @@ -398,6 +412,18 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im)  		im[IM_FROM_ID] = LLUUID::null;  	} +	//possibly a case of complex object names consisting of 3+ words +	if (!has_name) +	{ +		U32 divider_pos = stuff.find(NAME_TEXT_DIVIDER); +		if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length())) +		{ +			im[IM_FROM] = stuff.substr(0, divider_pos); +			im[IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length()); +			return true; +		} +	} +  	if (!has_name)  	{  		//text is mandatory diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 29e3c66684..3c390c0281 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -282,7 +282,7 @@ void LLNearbyChatScreenChannel::showToastsBottom()  				gFloaterView->sendChildToBack(toast);  			} -			bottom = toast->getRect().mTop; +			bottom = toast->getRect().mTop - toast->getTopPad();  		}		  	}  } diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index b8e0892b02..35569cffac 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -220,6 +220,7 @@ void LLHandlerUtil::logToNearbyChat(const LLNotificationPtr& notification, EChat  	{  		LLChat chat_msg(notification->getMessage());  		chat_msg.mSourceType = type; +		chat_msg.mFromName = SYSTEM_FROM;  		nearby_chat->addMessage(chat_msg);  	}  } diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp index 83a2215ac6..c55c8d6221 100644 --- a/indra/newview/llnotificationtiphandler.cpp +++ b/indra/newview/llnotificationtiphandler.cpp @@ -43,6 +43,37 @@  using namespace LLNotificationsUI; +class LLOnalineStatusToast : public LLToastPanel +{ +public: + +	struct Params +	{ +		LLNotificationPtr	notification; +		LLUUID				avatar_id; +		std::string			message; + +		Params() {} +	}; + +	LLOnalineStatusToast(Params& p) : LLToastPanel(p.notification) +	{ +		LLUICtrlFactory::getInstance()->buildPanel(this, "panel_online_status.xml"); + +		childSetValue("avatar_icon", p.avatar_id); +		childSetValue("message", p.message); + +		if (p.notification->getPayload().has("respond_on_mousedown")  +			&& p.notification->getPayload()["respond_on_mousedown"] ) +		{ +			setMouseDownCallback(boost::bind(&LLNotification::respond, p.notification,  +				p.notification->getResponseTemplate())); +		} + +		// set line max count to 2 in case of a very long name +		snapToMessageHeight(getChild<LLTextBox>("message"), 2); +	} +};  //--------------------------------------------------------------------------  LLTipHandler::LLTipHandler(e_notification_type type, const LLSD& id) @@ -114,7 +145,19 @@ bool LLTipHandler::processNotification(const LLSD& notify)  			LLHandlerUtil::spawnIMSession(name, from_id);  		} -		LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification); +		LLToastPanel* notify_box = NULL; +		if("FriendOffline" == notification->getName() || "FriendOnline" == notification->getName()) +		{ +			LLOnalineStatusToast::Params p; +			p.notification = notification; +			p.message = notification->getMessage(); +			p.avatar_id = notification->getPayload()["FROM_ID"]; +			notify_box = new LLOnalineStatusToast(p); +		} +		else +		{ +			notify_box = new LLToastNotifyPanel(notification); +		}  		LLToast::Params p;  		p.notif_id = notification->getID(); diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 7c2e7e3319..c75d90be6f 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -79,17 +79,12 @@ LLScreenChannelBase::~LLScreenChannelBase()  bool  LLScreenChannelBase::isHovering()  { -	bool res = mHoveredToast != NULL; -	if (!res) +	if (!mHoveredToast)  	{ -		return res; +		return false;  	} -	S32 x, y; -	mHoveredToast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), -			gViewerWindow->getCurrentMouseY(), &x, &y); -	res = mHoveredToast->pointInView(x, y) == TRUE; -	return res; +	return mHoveredToast->isHovered();  }  void LLScreenChannelBase::updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect) @@ -479,7 +474,8 @@ void LLScreenChannel::showToastsBottom()  	{  		if(it != mToastList.rbegin())  		{ -			bottom = (*(it-1)).toast->getRect().mTop; +			LLToast* toast = (*(it-1)).toast; +			bottom = toast->getRect().mTop - toast->getTopPad();  			toast_margin = gSavedSettings.getS32("ToastGap");  		} @@ -777,23 +773,16 @@ void LLScreenChannel::onToastHover(LLToast* toast, bool mouse_enter)  {  	// because of LLViewerWindow::updateUI() that NOT ALWAYS calls onMouseEnter BEFORE onMouseLeave  	// we must check hovering directly to prevent incorrect setting for hovering in a channel -	S32 x,y;  	if (mouse_enter)  	{ -		toast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), -				gViewerWindow->getCurrentMouseY(), &x, &y); -		bool hover = toast->pointInView(x, y) == TRUE; -		if (hover) +		if (toast->isHovered())  		{  			mHoveredToast = toast;  		}  	}  	else if (mHoveredToast != NULL)  	{ -		mHoveredToast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), -				gViewerWindow->getCurrentMouseY(), &x, &y); -		bool hover = mHoveredToast->pointInView(x, y) == TRUE; -		if (!hover) +		if (!mHoveredToast->isHovered())  		{  			mHoveredToast = NULL;  		} diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 50c47e293e..fba1503b4a 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -248,6 +248,11 @@ LLSideTray::LLSideTray(Params& params)  	// panel_name should be specified via "parameter" attribute.  	commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));  	LLTransientFloaterMgr::getInstance()->addControlView(this); +	LLView* side_bar_tabs  = gViewerWindow->getRootView()->getChildView("side_bar_tabs"); +	if (side_bar_tabs != NULL) +	{ +		LLTransientFloaterMgr::getInstance()->addControlView(side_bar_tabs); +	}  	LLPanel::Params p;  	p.name = "buttons_panel"; diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 136989166f..fa07278cb9 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2899,7 +2899,9 @@ bool process_login_success_response()  	text = response["agent_region_access"].asString();  	if (!text.empty())  	{ -		int preferredMaturity = LLAgent::convertTextToMaturity(text[0]); +		U32 preferredMaturity = +			llmin((U32)LLAgent::convertTextToMaturity(text[0]), +			      gSavedSettings.getU32("PreferredMaturity"));  		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);  	}  	// During the AO transition, this flag will be true. Then the flag will diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 110d158e2d..60a89c02e4 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -68,12 +68,17 @@ LLToast::LLToast(const LLToast::Params& p)  	mNotification(p.notification),  	mIsHidden(false),  	mHideBtnPressed(false), -	mIsTip(p.is_tip) +	mIsTip(p.is_tip), +	mWrapperPanel(NULL)  {  	LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL);  	setCanDrag(FALSE); +	mWrapperPanel = getChild<LLPanel>("wrapper_panel"); +	mWrapperPanel->setMouseEnterCallback(boost::bind(&LLToast::onToastMouseEnter, this)); +	mWrapperPanel->setMouseLeaveCallback(boost::bind(&LLToast::onToastMouseLeave, this)); +  	if(mPanel)  	{  		insertPanel(mPanel); @@ -83,6 +88,8 @@ LLToast::LLToast(const LLToast::Params& p)  	{  		mHideBtn = getChild<LLButton>("hide_btn");  		mHideBtn->setClickedCallback(boost::bind(&LLToast::hide,this)); +		mHideBtn->setMouseEnterCallback(boost::bind(&LLToast::onToastMouseEnter, this)); +		mHideBtn->setMouseLeaveCallback(boost::bind(&LLToast::onToastMouseLeave, this));  	}  	// init callbacks if present @@ -174,6 +181,42 @@ void LLToast::hide()  	mOnFadeSignal(this);   } +void LLToast::onFocusLost() +{ +	if(mWrapperPanel && !isBackgroundVisible()) +	{ +		// Lets make wrapper panel behave like a floater +		setBackgroundOpaque(FALSE); +	} +} + +void LLToast::onFocusReceived() +{ +	if(mWrapperPanel && !isBackgroundVisible()) +	{ +		// Lets make wrapper panel behave like a floater +		setBackgroundOpaque(TRUE); +	} +} + +S32 LLToast::getTopPad() +{ +	if(mWrapperPanel) +	{ +		return getRect().getHeight() - mWrapperPanel->getRect().getHeight(); +	} +	return 0; +} + +S32 LLToast::getRightPad() +{ +	if(mWrapperPanel) +	{ +		return getRect().getWidth() - mWrapperPanel->getRect().getWidth(); +	} +	return 0; +} +  //--------------------------------------------------------------------------  void LLToast::setCanFade(bool can_fade)   {  @@ -199,22 +242,21 @@ void LLToast::reshapeToPanel()  	if(!panel)  		return; -	LLRect panel_rect; +	LLRect panel_rect = panel->getRect(); -	panel_rect = panel->getRect(); -	reshape(panel_rect.getWidth(), panel_rect.getHeight());  	panel_rect.setLeftTopAndSize(0, panel_rect.getHeight(), panel_rect.getWidth(), panel_rect.getHeight()); -	panel->setRect(panel_rect); +	panel->setShape(panel_rect);  	LLRect toast_rect = getRect(); -	toast_rect.setLeftTopAndSize(toast_rect.mLeft,toast_rect.mTop,panel_rect.getWidth(), panel_rect.getHeight()); -	setRect(toast_rect); +	toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, +		panel_rect.getWidth() + getRightPad(), panel_rect.getHeight() + getTopPad()); +	setShape(toast_rect);  }  void LLToast::insertPanel(LLPanel* panel)  { -	addChild(panel);	 +	mWrapperPanel->addChild(panel);	  	reshapeToPanel();  } @@ -227,6 +269,19 @@ void LLToast::draw()  	}  	LLFloater::draw(); + +	if(!isBackgroundVisible()) +	{ +		// Floater background is invisible, lets make wrapper panel look like a  +		// floater - draw shadow. +		drawShadow(mWrapperPanel); + +		// Shadow will probably overlap close button, lets redraw the button +		if(mHideBtn) +		{ +			drawChild(mHideBtn); +		} +	}  }  //-------------------------------------------------------------------------- @@ -261,43 +316,78 @@ void LLToast::setVisible(BOOL show)  	}  } -//-------------------------------------------------------------------------- -void LLToast::onMouseEnter(S32 x, S32 y, MASK mask) +void LLToast::onToastMouseEnter()  { -	mOnToastHoverSignal(this, MOUSE_ENTER); +	LLRect panel_rc = mWrapperPanel->calcScreenRect(); +	LLRect button_rc; +	if(mHideBtn) +	{ +		button_rc = mHideBtn->calcScreenRect(); +	} -	setBackgroundOpaque(TRUE); +	S32 x, y; +	LLUI::getMousePositionScreen(&x, &y); -	//toasts fading is management by Screen Channel -	 -	sendChildToFront(mHideBtn); -	if(mHideBtn && mHideBtn->getEnabled()) -		mHideBtn->setVisible(TRUE); -	mOnMouseEnterSignal(this); +	if(panel_rc.pointInRect(x, y) || button_rc.pointInRect(x, y)) +	{ +		mOnToastHoverSignal(this, MOUSE_ENTER); + +		setBackgroundOpaque(TRUE); + +		//toasts fading is management by Screen Channel -	LLModalDialog::onMouseEnter(x, y, mask); +		sendChildToFront(mHideBtn); +		if(mHideBtn && mHideBtn->getEnabled()) +		{ +			mHideBtn->setVisible(TRUE); +		} +		mOnMouseEnterSignal(this); +		mToastMouseEnterSignal(this, getValue()); +	}  } -//-------------------------------------------------------------------------- -void LLToast::onMouseLeave(S32 x, S32 y, MASK mask) -{	 -	mOnToastHoverSignal(this, MOUSE_LEAVE); +void LLToast::onToastMouseLeave() +{ +	LLRect panel_rc = mWrapperPanel->calcScreenRect(); +	LLRect button_rc; +	if(mHideBtn) +	{ +		button_rc = mHideBtn->calcScreenRect(); +	} -	//toasts fading is management by Screen Channel +	S32 x, y; +	LLUI::getMousePositionScreen(&x, &y); -	if(mHideBtn && mHideBtn->getEnabled()) +	if( !panel_rc.pointInRect(x, y) && !button_rc.pointInRect(x, y))  	{ -		if( mHideBtnPressed ) +		mOnToastHoverSignal(this, MOUSE_LEAVE); + +		//toasts fading is management by Screen Channel + +		if(mHideBtn && mHideBtn->getEnabled())  		{ -			mHideBtnPressed = false; -			return; +			if( mHideBtnPressed ) +			{ +				mHideBtnPressed = false; +				return; +			} +			mHideBtn->setVisible(FALSE);		  		} -		mHideBtn->setVisible(FALSE);		 +		mToastMouseLeaveSignal(this, getValue());  	} - -	LLModalDialog::onMouseLeave(x, y, mask);  } +void LLToast::setBackgroundOpaque(BOOL b) +{ +	if(mWrapperPanel && !isBackgroundVisible()) +	{ +		mWrapperPanel->setBackgroundOpaque(b); +	} +	else +	{ +		LLModalDialog::setBackgroundOpaque(b); +	} +}  void LLNotificationsUI::LLToast::stopFading()  { @@ -315,6 +405,13 @@ void LLNotificationsUI::LLToast::startFading()  	}  } +bool LLToast::isHovered() +{ +	S32 x, y; +	LLUI::getMousePositionScreen(&x, &y); +	return mWrapperPanel->calcScreenRect().pointInRect(x, y); +} +  //--------------------------------------------------------------------------  BOOL LLToast::handleMouseDown(S32 x, S32 y, MASK mask) diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 3d25fd4f02..64855020a9 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -86,8 +86,6 @@ public:  	// Toast handlers  	virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); -	virtual void onMouseEnter(S32 x, S32 y, MASK mask); -	virtual void onMouseLeave(S32 x, S32 y, MASK mask);  	//Fading @@ -97,6 +95,7 @@ public:  	/** Start fading timer */  	virtual void startFading(); +	bool isHovered();  	// Operating with toasts  	// insert a panel to a toast @@ -118,10 +117,22 @@ public:  	virtual void draw();  	//  	virtual void setVisible(BOOL show); + +	/*virtual*/ void setBackgroundOpaque(BOOL b);  	//  	virtual void hide(); +	/*virtual*/ void onFocusLost(); + +	/*virtual*/ void onFocusReceived(); +	/** +	 * Returns padding between floater top and wrapper_panel top. +	 * This padding should be taken into account when positioning or reshaping toasts +	 */ +	S32 getTopPad(); + +	S32 getRightPad();  	// get/set Toast's flags or states  	// get information whether the notification corresponding to the toast is valid or not @@ -154,9 +165,15 @@ public:  	toast_hover_check_signal_t mOnToastHoverSignal;	  	boost::signals2::connection setOnToastHoverCallback(toast_hover_check_callback_t cb) { return mOnToastHoverSignal.connect(cb); } +	boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseEnterSignal.connect(cb); }; +	boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseLeaveSignal.connect(cb); };  private: +	void onToastMouseEnter(); + +	void onToastMouseLeave(); +  	void handleTipToastClick(S32 x, S32 y, MASK mask);  	// check timer @@ -168,6 +185,8 @@ private:  	LLUUID				mSessionID;  	LLNotificationPtr	mNotification; +	LLPanel* mWrapperPanel; +  	// timer counts a lifetime of a toast  	LLTimer		mTimer;  	F32			mToastLifetime; // in seconds @@ -184,6 +203,9 @@ private:  	bool		mHideBtnPressed;  	bool		mIsHidden;  // this flag is TRUE when a toast has faded or was hidden with (x) button (EXT-1849)  	bool		mIsTip; + +	commit_signal_t mToastMouseEnterSignal; +	commit_signal_t mToastMouseLeaveSignal;  };  } diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 0b6bd4b401..257afabdcc 100644 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -223,6 +223,17 @@ void LLURLDispatcherImpl::regionNameCallback(U64 region_handle, const std::strin  	S32 z = 0;  	LLURLSimString::parse(sim_string, ®ion_name, &x, &y, &z); +	// Invalid location? EXT-5380 +	if (!region_handle) +	{ +		if(!region_name.empty() && !LLStringOps::isDigit(region_name.c_str()[0]))// it is no sense to search an empty region_name or when the  region_name  starts with digits +		{ +			// may be an user types incorrect region name, let's help him to find a correct one  +			LLFloaterReg::showInstance("search", LLSD().with("category", "places").with("id", LLSD(region_name))); +		} +		//*TODO: add notification about invalid region_name  +		return; +	}  	LLVector3 local_pos;  	local_pos.mV[VX] = (F32)x;  	local_pos.mV[VY] = (F32)y; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 24a788aaed..989cfae464 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -44,6 +44,7 @@  #include "llagent.h"  #include "llagentwearables.h"  #include "llagentpilot.h" +#include "llbottomtray.h"  #include "llcompilequeue.h"  #include "llconsole.h"  #include "lldebugview.h" @@ -7631,6 +7632,24 @@ class LLWorldDayCycle : public view_listener_t  	}  }; +class LLWorldToggleMovementControls : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLBottomTray::getInstance()->toggleMovementControls(); +		return true; +	} +}; + +class LLWorldToggleCameraControls : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLBottomTray::getInstance()->toggleCameraControls(); +		return true; +	} +}; +  void show_navbar_context_menu(LLView* ctrl, S32 x, S32 y)  {  	static LLMenuGL*	show_navbar_context_menu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_hide_navbar.xml", @@ -7750,6 +7769,9 @@ void initialize_menus()  	view_listener_t::addMenu(new LLWorldPostProcess(), "World.PostProcess");  	view_listener_t::addMenu(new LLWorldDayCycle(), "World.DayCycle"); +	view_listener_t::addMenu(new LLWorldToggleMovementControls(), "World.Toggle.MovementControls"); +	view_listener_t::addMenu(new LLWorldToggleCameraControls(), "World.Toggle.CameraControls"); +  	// Tools menu  	view_listener_t::addMenu(new LLToolsSelectTool(), "Tools.SelectTool");  	view_listener_t::addMenu(new LLToolsSelectOnlyMyObjects(), "Tools.SelectOnlyMyObjects"); diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 15a51bbe14..3f379fcf75 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -854,16 +854,10 @@ class Linux_i686Manifest(LinuxManifest):                  print "Skipping %s - not found" % libfile                  pass -             -        if(self.args['buildtype'].lower() == 'release'): -            print "* packaging stripped viewer binary." -            self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") -        else: -            print "* packaging un-stripped viewer binary." -            self.path("secondlife-bin","bin/do-not-directly-run-secondlife-bin") +        self.path("secondlife-bin","bin/do-not-directly-run-secondlife-bin") -        self.path("../linux_crash_logger/linux-crash-logger-stripped","bin/linux-crash-logger.bin") -        self.path("../linux_updater/linux-updater-stripped", "bin/linux-updater.bin") +        self.path("../linux_crash_logger/linux-crash-logger","bin/linux-crash-logger.bin") +        self.path("../linux_updater/linux-updater", "bin/linux-updater.bin")          self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin")          if self.prefix("res-sdl"):              self.path("*") @@ -914,23 +908,16 @@ class Linux_i686Manifest(LinuxManifest):              if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):                      self.path("libortp.so")                      self.path("libsndfile.so.1") -                    #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OAL lib +                    #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib                      self.path("libvivoxsdk.so")                      self.path("libvivoxplatform.so")                      self.end_prefix("lib") -class Linux_x86_64Manifest(LinuxManifest): -    def construct(self): -        super(Linux_x86_64Manifest, self).construct() -        self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") -        self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") -        if self.prefix("res-sdl"): -            self.path("*") -            # recurse -            self.end_prefix("res-sdl") +        if self.args['buildtype'].lower() == 'release': +            print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" +            self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure -        self.path("featuretable_linux.txt") -        self.path("secondlife-i686.supp") +################################################################  if __name__ == "__main__":      main() | 
