From db3c5d214addc8fe93f3b662fccb1354ef12e01b Mon Sep 17 00:00:00 2001
From: Denis Serdjuk <dserduk@productengine.com>
Date: Tue, 16 Feb 2010 19:08:18 +0200
Subject: fixed Normal bug EXT-5380 'Place Profile' side panel opens instead
 'Search' floater after not-recognized SLURL was entered in Location Field
 Changes:Viewer will try to open search browser, if slurl has invalid region
 name

--HG--
branch : product-engine
---
 indra/newview/llurldispatcher.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

(limited to 'indra/newview')

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, &region_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;
-- 
cgit v1.2.3


From 76997db038057f6b18fff6e8721866159f89e958 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 16 Feb 2010 19:42:42 +0200
Subject: Fixed low priority bug EXT-5338 (Double quotes are used in text for
 'up/down' tooltips and not used for others them of 'Fly mode' controls).

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/floater_moveview.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
index 0bdcbf30df..851a689d42 100644
--- a/indra/newview/skins/default/xui/en/floater_moveview.xml
+++ b/indra/newview/skins/default/xui/en/floater_moveview.xml
@@ -83,7 +83,7 @@
          left="10"
          name="move up btn"
          scale_image="false"
-         tool_tip="Fly up, press &quot;E&quot;"
+         tool_tip="Fly up, press E"
          top="14"
          width="25" />
         <button
@@ -96,7 +96,7 @@
          left_pad="45"
          name="move down btn"
          scale_image="false"
-         tool_tip="Fly down, press &quot;C&quot;"
+         tool_tip="Fly down, press C"
          top_delta="0"
          width="20" />
         <joystick_turn
-- 
cgit v1.2.3


From cf4da7e2238f2ee3d31928b9f598cbedee644876 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 16 Feb 2010 19:48:02 +0200
Subject: Fixed build.

--HG--
branch : product-engine
---
 indra/newview/llfolderview.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 888ddbcbc7..e21587a934 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -238,7 +238,7 @@ LLFolderView::LLFolderView(const Params& p)
 	LLRect new_r = LLRect(rect.mLeft + ICON_PAD,
 						  rect.mTop - TEXT_PAD,
 						  rect.mRight,
-						  rect.mTop - TEXT_PAD - font->getLineHeight());
+						  rect.mTop - TEXT_PAD - (S32)font->getLineHeight());
 	text_p.rect(new_r);
 	text_p.name(std::string(p.name));
 	text_p.font(font);
-- 
cgit v1.2.3


From cc8a0e0a9fbfc9069f8b090616369fa8cde0e895 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 16 Feb 2010 20:03:55 +0200
Subject: Added Share to avatar mini-inspector overflow menu (EXT-5151).

--HG--
branch : product-engine
---
 indra/newview/llinspectavatar.cpp                               | 8 ++++++++
 indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml | 6 ++++++
 2 files changed, 14 insertions(+)

(limited to 'indra/newview')

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/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
index 85ec174829..1b002b1c32 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml
@@ -116,4 +116,10 @@
     <menu_item_call.on_click
      function="InspectAvatar.Pay"/>
   </menu_item_call>
+  <menu_item_call
+   label="Share"
+   name="share">
+    <menu_item_call.on_click
+     function="InspectAvatar.Share"/>
+  </menu_item_call>
 </menu>
-- 
cgit v1.2.3


From a0cab8fde8f9cfe8dacf8e8f7b40f28e76774526 Mon Sep 17 00:00:00 2001
From: Vadim Savchuk <vsavchuk@productengine.com>
Date: Tue, 16 Feb 2010 21:17:20 +0200
Subject: Fixed low priority bug EXT-5425 (Undocked 'Movement Controls' floater
 became docked after opening from 'World' top menu).

--HG--
branch : product-engine
---
 indra/newview/llbottomtray.cpp                     | 12 ++++++++++++
 indra/newview/llbottomtray.h                       |  3 +++
 indra/newview/llviewermenu.cpp                     | 22 ++++++++++++++++++++++
 indra/newview/skins/default/xui/en/menu_viewer.xml |  6 ++----
 4 files changed, 39 insertions(+), 4 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index 2958565fdf..48c0ec61d8 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -421,6 +421,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/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/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 07a366da7f..e11b18ec31 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -311,8 +311,7 @@
              function="Floater.Visible"
              parameter="moveview" />
             <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="moveview" />
+             function="World.Toggle.MovementControls" />
         </menu_item_check>
         <menu_item_check
          label="View Controls"
@@ -322,8 +321,7 @@
              function="Floater.Visible"
              parameter="camera" />
             <menu_item_check.on_click
-             function="Floater.Toggle"
-             parameter="camera" />
+             function="World.Toggle.CameraControls" />
         </menu_item_check>
           <menu_item_check
              label="Ban Lines"
-- 
cgit v1.2.3


From 09ffc1e0311bc143601b50cff6f65fe914e855bd Mon Sep 17 00:00:00 2001
From: Sergei Litovchuk <slitovchuk@productengine.com>
Date: Tue, 16 Feb 2010 23:50:28 +0200
Subject: Fixed low bug (EXT-5457) Old tooltip is shown for just renamed
 landmark. - Added setting new tooltips after inventory panel item renaming.

--HG--
branch : product-engine
---
 indra/newview/llinventorypanel.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

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();
 			}
 		}
 
-- 
cgit v1.2.3


From a24eb0a4496471b59ae70074e8d44b078eacb347 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Tue, 16 Feb 2010 11:54:46 +0200
Subject: Fixed low bug EXT-5124 - Display buddy icons on online/offline alerts

--HG--
branch : product-engine
---
 indra/newview/llcallingcard.cpp                    | 15 ++++++--
 indra/newview/llnotificationtiphandler.cpp         | 45 +++++++++++++++++++++-
 .../newview/skins/default/xui/en/notifications.xml |  4 +-
 .../skins/default/xui/en/panel_online_status.xml   | 35 +++++++++++++++++
 4 files changed, 92 insertions(+), 7 deletions(-)
 create mode 100644 indra/newview/skins/default/xui/en/panel_online_status.xml

(limited to 'indra/newview')

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/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/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 9c6b18ef27..ef983dacfe 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -4310,14 +4310,14 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="FriendOnline"
    type="notifytip">
-[NAME_SLURL] is Online
+[FIRST] [LAST] is Online
   </notification>
 
   <notification
    icon="notifytip.tga"
    name="FriendOffline"
    type="notifytip">
-[NAME_SLURL] is Offline
+[FIRST] [LAST] is Offline
   </notification>
 
   <notification
diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml
new file mode 100644
index 0000000000..babe459231
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_online_status.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ height="152"
+ label="friend_online_status"
+ layout="topleft"
+ left="0"
+ name="friend_online_status"
+ top="0"
+ width="305">
+    <avatar_icon
+	 follows="top|left"
+	 height="18"
+	 image_name="Generic_Person"
+	 layout="topleft"
+	 left="3"
+	 mouse_opaque="false"
+	 name="avatar_icon"
+	 top="10"
+	 width="18" />
+    <text
+     font="SansSerifSmall"
+     follows="all"
+     height="137"
+     layout="topleft"
+     left_pad="5"
+     name="message"
+     text_color="white"
+     top="15"
+     use_ellipses="true"
+     value=""
+     width="285"
+     word_wrap="true"
+     max_length="350" />
+</panel>
\ No newline at end of file
-- 
cgit v1.2.3


From 09a509e0073a1daa5eadf1b5bf5bdef24080ab47 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Tue, 16 Feb 2010 16:27:11 +0200
Subject: Updated low bug EXT-5124 - Display buddy icons on online/offline
 alerts Made panel background invisible to make toast background visible.

--HG--
branch : product-engine
---
 indra/newview/skins/default/xui/en/panel_online_status.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/skins/default/xui/en/panel_online_status.xml b/indra/newview/skins/default/xui/en/panel_online_status.xml
index babe459231..14cb5fffee 100644
--- a/indra/newview/skins/default/xui/en/panel_online_status.xml
+++ b/indra/newview/skins/default/xui/en/panel_online_status.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- background_visible="true"
+ background_visible="false"
  height="152"
  label="friend_online_status"
  layout="topleft"
-- 
cgit v1.2.3


From aeffc8a3de966832b748dbd98a27f48b3c5a4e3a Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Wed, 17 Feb 2010 12:00:20 +0200
Subject: =?UTF-8?q?fixed=20major=20EXT-5439=20=E2=80=9CIM=20window=20vanis?=
 =?UTF-8?q?hes=20when=20trying=20to=20drag=20notecard=20to=20IM=20chat=20b?=
 =?UTF-8?q?ar=20with=20second=20inventory=20window=20open=E2=80=9D,=20adde?=
 =?UTF-8?q?d=20LLFloaterInventory=20to=20global=20group=20of=20transient?=
 =?UTF-8?q?=20exception=20list(the=20same=20as=20for=20side=20tray);?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

--HG--
branch : product-engine
---
 indra/newview/llfloaterinventory.cpp | 3 +++
 1 file changed, 3 insertions(+)

(limited to 'indra/newview')

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()
-- 
cgit v1.2.3


From 2ab4bf8b35bed067a1e7871e921e489fdc8322aa Mon Sep 17 00:00:00 2001
From: Alexei Arabadji <aarabadji@productengine.com>
Date: Wed, 17 Feb 2010 15:22:39 +0200
Subject: =?UTF-8?q?fixed=20EXT-5378=20=E2=80=9CTransient=20exception=20man?=
 =?UTF-8?q?ager=20doesn't=20work=20if=20switch=20to=20tabbed=20IM=20window?=
 =?UTF-8?q?=E2=80=9D,=20added=20side=20tray=20tab=20to=20global=20group=20?=
 =?UTF-8?q?of=20transient=20exception=20list;=20added=20LLIMFloaterContain?=
 =?UTF-8?q?er=20to=20IM=20group=20of=20transient=20exception=20list;=20mad?=
 =?UTF-8?q?e=20VCP=20belongs=20to=20IM=20transient=20group;?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

--HG--
branch : product-engine
---
 indra/newview/llcallfloater.h          | 4 ++++
 indra/newview/llimfloatercontainer.cpp | 7 ++++++-
 indra/newview/llsidetray.cpp           | 5 +++++
 3 files changed, 15 insertions(+), 1 deletion(-)

(limited to 'indra/newview')

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/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/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";
-- 
cgit v1.2.3


From 4b161b8839fa115947d8d580c575d9b91c88fbc9 Mon Sep 17 00:00:00 2001
From: Dmitry Zaporozhan <dzaporozhan@productengine.com>
Date: Wed, 17 Feb 2010 16:00:28 +0200
Subject: Fixed low bug EXT-4246 - Close button on notification toast is larger
 than host spot.

Close button is partially positioned out of toast(floater). Usually, hovering or clicking
that "outer" part of the button can not be handled. The workaround is to position the button
on the floater and make the floater background invisible. Now close button is properly handled,
but toast is transparent. To fix this i added wrapper_panel that looks and behaves like a floater.

--HG--
branch : product-engine
---
 indra/newview/llnearbychathandler.cpp              |   2 +-
 indra/newview/llscreenchannel.cpp                  |  25 +---
 indra/newview/lltoast.cpp                          | 159 +++++++++++++++++----
 indra/newview/lltoast.h                            |  26 +++-
 indra/newview/skins/default/xui/en/panel_toast.xml |  34 ++++-
 5 files changed, 189 insertions(+), 57 deletions(-)

(limited to 'indra/newview')

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/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/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/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
index bfe3cce7d0..11069b3ac3 100644
--- a/indra/newview/skins/default/xui/en/panel_toast.xml
+++ b/indra/newview/skins/default/xui/en/panel_toast.xml
@@ -3,17 +3,25 @@
 
 <!-- Don't remove floater's height! It is needed for Overflow and Start-Up toasts!-->
 
+<!-- 
+     This floater is invisible. To make toast look like a floater we render wrapper_panel
+     like a floater(draw shadows and so on). This is done with one purpose - make close button
+     look like it is positioned out of floater and able to accept mouse clicks (see EXT-4246)
+-->
+
 <floater
- legacy_header_height="18"
+ legacy_header_height="0"
+ header_height="0"
  name="toast"
  title=""
  visible="false"
  layout="topleft"
- height="40"  
- width="305"
+ height="47"  
+ width="310"
  left="0"
  top="0"
  follows="right|bottom"
+ background_visible="false"
  bg_opaque_image="Toast_Over"
  bg_alpha_image="Toast_Background"
  can_minimize="false"
@@ -27,6 +35,21 @@
  drop_shadow_visible = "false"
  border = "false"
 >
+ <panel
+  background_opaque="false"
+  border_visible="false"
+  background_visible="true"
+  bg_opaque_image="Toast_Over"
+  bg_alpha_image="Toast_Background"
+  label="wrapper_panel"
+  layout="topleft"
+  left="0"
+  name="wrapper_panel"
+  top="7"
+  height="40"
+  follows="all" 
+  translate="false"
+  width="305">
   <!-- Don't remove this wiget! It is needed for Overflow and Start-Up toasts!-->
   <text
     clip_partial="true" 
@@ -46,10 +69,11 @@
    width="260">
     Toast text;
   </text>
+ </panel>
   <button
     layout="topleft"
-    top="-14"
-    left="293"
+    top="0"
+    right="310"
     width="17"
     height="17"
     follows="top|right"
-- 
cgit v1.2.3


From 4c5a998f79e835d1f3436a8f8d1cc920d158fcff Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Wed, 17 Feb 2010 16:09:50 +0200
Subject: fixed EXT-5456 Messages from objects are shownas messages from Second
 Life in nearby chat history from the prev session

Completed things which were agreed on:
- system messages in the log file are prepended with "Second Life:" after the timestamp
- object names set which are parsed extended to object names consisting with any number of words

Side effect:
"Second Life:" is shown as From Name in Nearby Chat when in plain text chat

--HG--
branch : product-engine
---
 indra/newview/llchathistory.cpp             |  2 +-
 indra/newview/lllogchat.cpp                 | 28 +++++++++++++++++++++++++++-
 indra/newview/llnotificationhandlerutil.cpp |  1 +
 3 files changed, 29 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 81cc52528c..3fb043c669 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -264,7 +264,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;
 		}
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/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);
 	}
 }
-- 
cgit v1.2.3


From 73d192a4084132636a9a4eab9c44415bb11161dc Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Wed, 17 Feb 2010 17:43:13 +0200
Subject: fixed EXT-5367  Emotes '/me says ...' out of context when nearby chat
 or group chat window expanded.

--HG--
branch : product-engine
---
 indra/newview/llchathistory.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 3fb043c669..8625fe5900 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -796,6 +796,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();
-- 
cgit v1.2.3


From f52e7036940a015a405ae94aa016612c4160df9e Mon Sep 17 00:00:00 2001
From: Igor Borovkov <iborovkov@productengine.com>
Date: Wed, 17 Feb 2010 18:42:20 +0200
Subject: completed EXT-5427 Disable appearance of "i" button for SL system
 messages in IM and other chats

--HG--
branch : product-engine
---
 indra/newview/llchathistory.cpp | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 8625fe5900..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) 
 	{
@@ -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;
 
-- 
cgit v1.2.3


From 03f7086bfcc2cb23c8210ee729d35842e6ace665 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 17:27:20 +0000
Subject: EXT-4843 [NUX] Set default Preferences

'General' pane
---
 indra/newview/app_settings/settings.xml | 10 +++++-----
 indra/newview/llfloaterpreference.cpp   |  3 ++-
 indra/newview/llstartup.cpp             |  4 +++-
 3 files changed, 10 insertions(+), 7 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 000c63d22c..a8f2ce651f 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>
@@ -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>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index f20ef76bed..6439a09562 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -514,7 +514,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/llstartup.cpp b/indra/newview/llstartup.cpp
index 136989166f..cd8051a0a9 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]);
+		int preferredMaturity =
+			llmin(LLAgent::convertTextToMaturity(text[0]),
+			      gSavedSettings.getU32("PreferredMaturity"));
 		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
 	}
 	// During the AO transition, this flag will be true. Then the flag will
-- 
cgit v1.2.3


From f52dd5ef21c330996ec95cd06974d6771a173523 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 17:30:41 +0000
Subject: EXT-4843 [NUX] Set default Preferences

'Privacy' pane
---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a8f2ce651f..96e09409bc 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -5360,7 +5360,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>PerAccountSettingsFile</key>
     <map>
-- 
cgit v1.2.3


From d82e509a3a5f25e208cb88a04e7723734e6018c8 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 17:33:15 +0000
Subject: EXT-4843 [NUX] Set default Preferences

'Sound' pane
---
 indra/newview/app_settings/settings.xml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 96e09409bc..ff010994b9 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -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>
-- 
cgit v1.2.3


From 818a6038ebfd23beddb4d64ea8f730da6acf0b9a Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 17:36:07 +0000
Subject: EXT-4843 [NUX] Set default Preferences

'Setup' pane
---
 indra/newview/app_settings/settings.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'indra/newview')

diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index ff010994b9..277bae7da2 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -10114,7 +10114,7 @@
       <key>Type</key>
       <string>Boolean</string>
       <key>Value</key>
-      <integer>0</integer>
+      <integer>1</integer>
     </map>
     <key>UseFreezeFrame</key>
     <map>
-- 
cgit v1.2.3


From 087d4b7bc831ba3611c023fdc9feb37b0481b0d5 Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 17:44:49 +0000
Subject: fix casts.

---
 indra/newview/llstartup.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index cd8051a0a9..fa07278cb9 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2899,8 +2899,8 @@ bool process_login_success_response()
 	text = response["agent_region_access"].asString();
 	if (!text.empty())
 	{
-		int preferredMaturity =
-			llmin(LLAgent::convertTextToMaturity(text[0]),
+		U32 preferredMaturity =
+			llmin((U32)LLAgent::convertTextToMaturity(text[0]),
 			      gSavedSettings.getU32("PreferredMaturity"));
 		gSavedSettings.setU32("PreferredMaturity", preferredMaturity);
 	}
-- 
cgit v1.2.3


From 96ca4ac9dc5fed1f0c80cff4af1aec76cee2955e Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 20:35:50 +0000
Subject: EXT-5500 reduce linux package size This takes the (compressed!) linux
 package size from 56MB to 40MB.

---
 indra/newview/viewer_manifest.py | 29 ++++++++---------------------
 1 file changed, 8 insertions(+), 21 deletions(-)

(limited to 'indra/newview')

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()
-- 
cgit v1.2.3


From 9b213eeb228f1d328b616d1afe69763ee2b1a1fa Mon Sep 17 00:00:00 2001
From: Tofu Linden <tofu.linden@lindenlab.com>
Date: Wed, 17 Feb 2010 20:48:40 +0000
Subject: EXT-5500 reduce linux package size remove the now-redundant and
 somewhat odd (mea culpa) stripping process from the CMake stage

---
 indra/newview/CMakeLists.txt | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

(limited to 'indra/newview')

diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 6634fe5379..14eb75e457 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)
-- 
cgit v1.2.3