From ac68eb16a2dac453fe85b7218297f561b8fc96ca Mon Sep 17 00:00:00 2001
From: Mark Palange <palange@lindenlab.com>
Date: Fri, 21 Nov 2008 01:18:39 +0000
Subject: [PATCH] Merging the changes in viewer_1-22-0 (1.22 RC0) back into
 trunk, revs. 101837 to 103519

---
 indra/cmake/00-Common.cmake                   |   4 +
 indra/develop.py                              |   2 +-
 indra/llmessage/llpumpio.cpp                  |   8 +-
 indra/llui/lltexteditor.cpp                   | 140 +++++++++---------
 indra/llui/lltexteditor.h                     |  16 +-
 indra/newview/lldrawable.cpp                  |   4 +
 indra/newview/lltextureview.cpp               |  12 +-
 indra/newview/llviewerobjectlist.cpp          |   2 +-
 .../default/xui/de/floater_inventory.xml      |   4 +-
 .../de/floater_inventory_item_properties.xml  |   6 +-
 .../default/xui/de/floater_lsl_guide.xml      |   2 +-
 .../skins/default/xui/de/floater_snapshot.xml |   4 +-
 .../skins/default/xui/de/floater_tools.xml    |  20 +--
 .../default/xui/de/panel_group_general.xml    |   8 +-
 .../default/xui/de/panel_group_land_money.xml |  15 +-
 .../default/xui/de/panel_group_notices.xml    |   6 +-
 .../default/xui/de/panel_group_roles.xml      |  14 +-
 .../newview/skins/default/xui/de/strings.xml  |   4 +-
 .../skins/default/xui/ja/floater_tools.xml    |   2 +-
 .../newview/skins/default/xui/ja/strings.xml  |   4 +-
 indra/newview/viewer_manifest.py              |  24 ++-
 21 files changed, 162 insertions(+), 139 deletions(-)

diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 9a91f235f69..333860a31a9 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -49,6 +49,10 @@ if (WINDOWS)
       )
      
   if(MSVC80 OR MSVC90)
+    set(CMAKE_CXX_FLAGS_RELEASE
+      "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
+      CACHE STRING "C++ compiler release options" FORCE)
+   
     add_definitions(
       /Zc:wchar_t-
       )
diff --git a/indra/develop.py b/indra/develop.py
index 3692fac2b30..90e1003d70c 100755
--- a/indra/develop.py
+++ b/indra/develop.py
@@ -458,7 +458,7 @@ def __init__(self):
 
     def _get_generator(self):
         if self._generator is None:
-            for version in 'vc71 vc80 vc90'.split():
+            for version in 'vc80 vc90 vc71'.split():
                 if self.find_visual_studio(version):
                     self._generator = version
                     print 'Building with ', self.gens[version]['gen']
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
index 39e9a8b9524..7a6605d16a4 100644
--- a/indra/llmessage/llpumpio.cpp
+++ b/indra/llmessage/llpumpio.cpp
@@ -177,7 +177,8 @@ LLPumpIO::LLPumpIO(apr_pool_t* pool) :
 	mCurrentPool(NULL),
 	mCurrentPoolReallocCount(0),
 	mChainsMutex(NULL),
-	mCallbackMutex(NULL)
+	mCallbackMutex(NULL),
+	mCurrentChain(mRunningChains.end())
 {
 	LLMemType m1(LLMemType::MTYPE_IO_PUMP);
 	initialize(pool);
@@ -273,7 +274,10 @@ bool LLPumpIO::setTimeoutSeconds(F32 timeout)
 void LLPumpIO::adjustTimeoutSeconds(F32 delta)
 {
 	// If no chain is running, bail
-	if(current_chain_t() == mCurrentChain) return;
+	if(mRunningChains.end() == mCurrentChain) 
+	{
+		return;
+	}
 	(*mCurrentChain).adjustTimeoutSeconds(delta);
 }
 
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index f935432e57c..197f8d98cfb 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -260,7 +260,7 @@ LLTextEditor::LLTextEditor(
 	mIsSelecting( FALSE ),
 	mSelectionStart( 0 ),
 	mSelectionEnd( 0 ),
-	mScrolledToBottom( FALSE ),
+	mScrolledToBottom( TRUE ),
 	mOnScrollEndCallback( NULL ),
 	mOnScrollEndData( NULL ),
 	mCursorColor(		LLUI::sColorsGroup->getColor( "TextCursorColor" ) ),
@@ -277,14 +277,16 @@ LLTextEditor::LLTextEditor(
 	mCommitOnFocusLost( FALSE ),
 	mHideScrollbarForShortDocs( FALSE ),
 	mTakesNonScrollClicks( TRUE ),
-	mTrackBottom( TRUE ),
+	mTrackBottom( FALSE ),
 	mAllowEmbeddedItems( allow_embedded_items ),
 	mAcceptCallingCardNames(FALSE),
 	mHandleEditKeysDirectly( FALSE ),
 	mMouseDownX(0),
 	mMouseDownY(0),
 	mLastSelectionX(-1),
-	mLastSelectionY(-1)
+	mLastSelectionY(-1),
+	mReflowNeeded(FALSE),
+	mScrollNeeded(FALSE)
 {
 	mSourceID.generate();
 
@@ -468,6 +470,13 @@ void LLTextEditor::updateLineStartList(S32 startpos)
 		mScrollbar->setVisible(!short_doc);
 	}
 
+	// if scrolled to bottom, stay at bottom
+	// unless user is editing text
+	// do this after updating page size
+	if (mScrolledToBottom && mTrackBottom && !hasFocus())
+	{
+		endOfDoc();
+	}
 }
 
 ////////////////////////////////////////////////////////////
@@ -511,8 +520,7 @@ void LLTextEditor::setText(const LLStringExplicit &utf8str)
 	setCursorPos(0);
 	deselect();
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 
 	resetDirty();
 }
@@ -529,8 +537,7 @@ void LLTextEditor::setWText(const LLWString &wtext)
 	setCursorPos(0);
 	deselect();
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 
 	resetDirty();
 }
@@ -568,8 +575,7 @@ void LLTextEditor::setWordWrap(BOOL b)
 	setCursorPos(0);
 	deselect();
 	
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 
@@ -734,6 +740,7 @@ S32 LLTextEditor::getLineStart( S32 line ) const
     {
 		return 0;
     }
+
 	line = llclamp(line, 0, num_lines-1);
 	S32 segidx = mLineStartList[line].mSegment;
 	S32 segoffset = mLineStartList[line].mOffset;
@@ -781,14 +788,14 @@ void LLTextEditor::getSegmentAndOffset( S32 startpos, S32* segidxp, S32* offsetp
 	*offsetp = startpos - (*seg_iter)->getStart();
 }
 
-const LLTextSegment*	LLTextEditor::getPreviousSegment()
+const LLTextSegment*	LLTextEditor::getPreviousSegment() const
 {
 	// find segment index at character to left of cursor (or rightmost edge of selection)
 	S32 idx = llmax(0, getSegmentIdxAtOffset(mCursorPos) - 1);
 	return idx >= 0 ? mSegments[idx] : NULL;
 }
 
-void LLTextEditor::getSelectedSegments(std::vector<const LLTextSegment*>& segments)
+void LLTextEditor::getSelectedSegments(std::vector<const LLTextSegment*>& segments) const
 {
 	S32 left = hasSelection() ? llmin(mSelectionStart, mSelectionEnd) : mCursorPos;
 	S32 right = hasSelection() ? llmax(mSelectionStart, mSelectionEnd) : mCursorPos;
@@ -875,13 +882,12 @@ void LLTextEditor::setCursor(S32 row, S32 column)
 	}
 	doc += column;
 	setCursorPos(doc - mWText.c_str());
-	updateScrollFromCursor();
 }
 
 void LLTextEditor::setCursorPos(S32 offset)
 {
 	mCursorPos = llclamp(offset, 0, (S32)getLength());
-	updateScrollFromCursor();
+	needsScroll();
 	// reset desired x cursor position
 	mDesiredXPixel = -1;
 }
@@ -1222,8 +1228,6 @@ BOOL LLTextEditor::handleHover(S32 x, S32 y, MASK mask)
 
 			setCursorAtLocalPos( x, y, TRUE );
 			mSelectionEnd = mCursorPos;
-			
-			updateScrollFromCursor();
 		}
 
 		lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (active)" << llendl;		
@@ -1317,8 +1321,6 @@ BOOL LLTextEditor::handleMouseUp(S32 x, S32 y, MASK mask)
 			
 			setCursorAtLocalPos( x, y, TRUE );
 			endSelection();
-
-			updateScrollFromCursor();
 		}
 		
 		if( !hasSelection() )
@@ -1839,8 +1841,7 @@ void LLTextEditor::cut()
 	gClipboard.copyFromSubstring( mWText, left_pos, length, mSourceID );
 	deleteSelection( FALSE );
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 BOOL LLTextEditor::canCopy() const
@@ -1910,8 +1911,7 @@ void LLTextEditor::paste()
 	setCursorPos(mCursorPos + insert(mCursorPos, clean_string, FALSE));
 	deselect();
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 
@@ -2235,9 +2235,9 @@ BOOL LLTextEditor::handleKeyHere(KEY key, MASK mask )
 
 			if(text_may_have_changed)
 			{
-				updateLineStartList();
+				needsReflow();
 			}
-			updateScrollFromCursor();
+			needsScroll();
 		}
 	}
 
@@ -2280,8 +2280,7 @@ BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char)
 			// Most keystrokes will make the selection box go away, but not all will.
 			deselect();
 
-			updateLineStartList();
-			updateScrollFromCursor();
+			needsReflow();
 		}
 	}
 
@@ -2339,8 +2338,7 @@ void LLTextEditor::doDelete()
 		}
 	}
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 //----------------------------------------------------------------------------
@@ -2383,8 +2381,7 @@ void LLTextEditor::undo()
 
 		setCursorPos(pos);
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 BOOL LLTextEditor::canRedo() const
@@ -2426,8 +2423,7 @@ void LLTextEditor::redo()
 		
 		setCursorPos(pos);
 
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 }
 
 void LLTextEditor::onFocusReceived()
@@ -3100,6 +3096,20 @@ void LLTextEditor::drawClippedSegment(const LLWString &text, S32 seg_start, S32
 
 void LLTextEditor::draw()
 {
+	// do on-demand reflow 
+	if (mReflowNeeded)
+	{
+		updateLineStartList();
+		mReflowNeeded = FALSE;
+	}
+
+	// then update scroll position, as cursor may have moved
+	if (mScrollNeeded)
+	{
+		updateScrollFromCursor();
+		mScrollNeeded = FALSE; 
+	}
+
 	{
 		LLLocalClipRect clip(LLRect(0, getRect().getHeight(), getRect().getWidth() - (mScrollbar->getVisible() ? SCROLLBAR_SIZE : 0), 0));
 
@@ -3118,10 +3128,10 @@ void LLTextEditor::draw()
 		mBorder->setKeyboardFocusHighlight( gFocusMgr.getKeyboardFocus() == this);// && !mReadOnly);
 	}
 	
+	LLView::draw();  // Draw children (scrollbar and border)
+
 	// remember if we are supposed to be at the bottom of the buffer
 	mScrolledToBottom = isScrolledToBottom();
-
-	LLView::draw();  // Draw children (scrollbar and border)
 }
 
 
@@ -3311,7 +3321,7 @@ void LLTextEditor::setCursorAndScrollToEnd()
 {
 	deselect();
 	endOfDoc();
-	updateScrollFromCursor();
+	needsScroll();
 }
 
 void LLTextEditor::getLineAndColumnForPosition( S32 position, S32* line, S32* col, BOOL include_wordwrap )
@@ -3438,7 +3448,7 @@ void LLTextEditor::reshape(S32 width, S32 height, BOOL called_from_parent)
 	// up-to-date mTextRect
 	updateTextRect();
 	
-	updateLineStartList();
+	needsReflow();
 
 	// propagate shape information to scrollbar
 	mScrollbar->setDocSize( getLineCount() );
@@ -3446,14 +3456,6 @@ void LLTextEditor::reshape(S32 width, S32 height, BOOL called_from_parent)
 	S32 line_height = llround( mGLFont->getLineHeight() );
 	S32 page_lines = mTextRect.getHeight() / line_height;
 	mScrollbar->setPageSize( page_lines );
-
-	// if scrolled to bottom, stay at bottom
-	// unless user is editing text
-	// do this after updating page size
-	if (mScrolledToBottom && mTrackBottom && !hasFocus())
-	{
-		endOfDoc();
-	}
 }
 
 void LLTextEditor::autoIndent()
@@ -3500,8 +3502,7 @@ void LLTextEditor::insertText(const std::string &new_text)
 
 	setCursorPos(mCursorPos + insert( mCursorPos, utf8str_to_wstring(new_text), FALSE ));
 	
-	updateLineStartList();
-	updateScrollFromCursor();
+	needsReflow();
 
 	setEnabled( enabled );
 }
@@ -3600,7 +3601,7 @@ void LLTextEditor::appendText(const std::string &new_text, bool allow_undo, bool
 		mSegments.push_back(segment);
 	}
 	
-	updateLineStartList(old_length);
+	needsReflow();
 	
 	// Set the cursor and scroll position
 	// Maintain the scroll position unless the scroll was at the end of the doc (in which 
@@ -3639,14 +3640,6 @@ void LLTextEditor::appendText(const std::string &new_text, bool allow_undo, bool
 	{
 		blockUndo();
 	}
-
-	// if scrolled to bottom, stay at bottom
-	// unless user is editing text
-	// do this after updating page size
-	if (mScrolledToBottom && mTrackBottom && !hasFocus())
-	{
-		endOfDoc();
-	}
 }
 
 void LLTextEditor::removeTextFromEnd(S32 num_chars)
@@ -3661,7 +3654,10 @@ void LLTextEditor::removeTextFromEnd(S32 num_chars)
 	mSelectionEnd = llclamp(mSelectionEnd, 0, len);
 
 	pruneSegments();
+	
+	// pruneSegments will invalidate mLineStartList.
 	updateLineStartList();
+	needsScroll();
 }
 
 ///////////////////////////////////////////////////////////////////
@@ -3759,8 +3755,7 @@ BOOL LLTextEditor::tryToRevertToPristineState()
 			}
 		}
 
-		updateLineStartList();
-		updateScrollFromCursor();
+		needsReflow();
 	}
 
 	return isPristine(); // TRUE => success
@@ -3808,6 +3803,7 @@ void LLTextEditor::updateSegments()
 	{
 		findEmbeddedItemSegments();
 	}
+
 	// Make sure we have at least one segment
 	if (mSegments.size() == 1 && mSegments[0]->getIsDefault())
 	{
@@ -3824,6 +3820,7 @@ void LLTextEditor::updateSegments()
 }
 
 // Only effective if text was removed from the end of the editor
+// *NOTE: Using this will invalidate references to mSegments from mLineStartList.
 void LLTextEditor::pruneSegments()
 {
 	S32 len = mWText.length();
@@ -4066,9 +4063,7 @@ BOOL LLTextEditor::importBuffer(const char* buffer, S32 length )
 	setCursorPos(0);
 	deselect();
 
-	updateLineStartList();
-	updateScrollFromCursor();
-
+	needsReflow();
 	return success;
 }
 
@@ -4260,35 +4255,35 @@ S32 LLTextEditor::findHTMLToken(const std::string &line, S32 pos, BOOL reverse)
 	std::string openers=" \t\n('\"[{<>";
 	std::string closers=" \t\n)'\"]}><;";
 
-	S32 m2 = 0;
-	S32 retval = 0;
+	S32 index = 0;
 	
 	if (reverse)
 	{
-		
-		for (retval=pos; retval >= 0; retval--)
+		for (index=pos; index >= 0; index--)
 		{
-			m2 = openers.find(line.substr(retval,1));
+			char c = line[index];
+			S32 m2 = openers.find(c);
 			if (m2 >= 0)
 			{
-				break;
+				return index+1;
 			}
 		}
-		return retval+1;
 	} 
 	else
 	{
 		
-		for (retval=pos; retval<(S32)line.length(); retval++)
+		for (index=pos; index<(S32)line.length(); index++)
 		{
-			m2 = closers.find(line.substr(retval,1));
+			char c = line[index];
+			S32 m2 = closers.find(c);
 			if (m2 >= 0)
 			{
-				break;
+				return index;
 			}
 		} 
-		return retval;
-	}
+	}		
+	
+	return index;
 }
 
 BOOL LLTextEditor::findHTML(const std::string &line, S32 *begin, S32 *end) const
@@ -4476,9 +4471,8 @@ void LLTextEditor::updatePreedit(const LLWString &preedit_string,
 
 	mPreeditStandouts = preedit_standouts;
 
-	updateLineStartList();
+	needsReflow();
 	setCursorPos(insert_preedit_at + caret_position);
-	// updateScrollFromCursor();
 
 	// Update of the preedit should be caused by some key strokes.
 	mKeystrokeTimer.reset();
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index af9908a5405..4f41f67ce8e 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -245,9 +245,9 @@ class LLTextEditor : public LLUICtrl, LLEditMenuHandler, protected LLPreeditor
 	llwchar			getWChar(S32 pos) const { return mWText[pos]; }
 	LLWString		getWSubString(S32 pos, S32 len) const { return mWText.substr(pos, len); }
 	
-	const LLTextSegment*	getCurrentSegment() { return getSegmentAtOffset(mCursorPos); }
-	const LLTextSegment*	getPreviousSegment();
-	void getSelectedSegments(std::vector<const LLTextSegment*>& segments);
+	const LLTextSegment*	getCurrentSegment() const { return getSegmentAtOffset(mCursorPos); }
+	const LLTextSegment*	getPreviousSegment() const;
+	void getSelectedSegments(std::vector<const LLTextSegment*>& segments) const;
 
 	static bool		isPartOfWord(llwchar c) { return (c == '_') || LLStringOps::isAlnum((char)c); }
 
@@ -433,6 +433,14 @@ class LLTextEditor : public LLUICtrl, LLEditMenuHandler, protected LLPreeditor
 	void			drawText();
 	void			drawClippedSegment(const LLWString &wtext, S32 seg_start, S32 seg_end, F32 x, F32 y, S32 selection_left, S32 selection_right, const LLStyleSP& color, F32* right_x);
 
+	void			needsReflow() 
+	{ 
+		mReflowNeeded = TRUE; 
+		// cursor might have moved, need to scroll
+		mScrollNeeded = TRUE;
+	}
+	void			needsScroll() { mScrollNeeded = TRUE; }
+
 	//
 	// Data
 	//
@@ -489,6 +497,8 @@ class LLTextEditor : public LLUICtrl, LLEditMenuHandler, protected LLPreeditor
 	};
 	typedef std::vector<line_info> line_list_t;
 	line_list_t mLineStartList;
+	BOOL			mReflowNeeded;
+	BOOL			mScrollNeeded;
 
 	LLFrameTimer	mKeystrokeTimer;
 
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
index 1592cc0a8b7..88fda7a89c1 100644
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -952,6 +952,9 @@ BOOL LLDrawable::isVisible() const
 		return TRUE;
 	}
 	
+#if 0
+	//disabling this code fixes DEV-20105.  Leaving in place in case some other bug pops up as a a result.
+	//should be safe to just always ask the spatial group for visibility.
 	if (isActive())
 	{
 		if (isRoot())
@@ -974,6 +977,7 @@ BOOL LLDrawable::isVisible() const
 		}
 	}
 	else
+#endif
 	{
 		LLSpatialGroup* group = getSpatialGroup();
 		if (group && group->isVisible())
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index 14fa73d3b14..40be40d9f66 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -383,9 +383,9 @@ class LLGLTexMemBar : public LLView
 
 void LLGLTexMemBar::draw()
 {
-	S32 bound_mem = LLViewerImage::sBoundTextureMemory;
+	S32 bound_mem = (LLViewerImage::sBoundTextureMemory >> 20);
  	S32 max_bound_mem = LLViewerImage::sMaxBoundTextureMem;
-	S32 total_mem = LLViewerImage::sTotalTextureMemory;
+	S32 total_mem = (LLViewerImage::sTotalTextureMemory >> 20);
 	S32 max_total_mem = LLViewerImage::sMaxTotalTextureMem;
 	F32 discard_bias = LLViewerImage::sDesiredDiscardBias;
 	S32 line_height = (S32)(LLFontGL::sMonospace->getLineHeight() + .5f);
@@ -396,10 +396,10 @@ void LLGLTexMemBar::draw()
 	
 	std::string text;
 	text = llformat("GL Tot: %d/%d MB Bound: %d/%d MB Discard Bias: %.2f",
-					total_mem/(1024*1024),
-					max_total_mem/(1024*1024),
-					bound_mem/(1024*1024),
-					max_bound_mem/(1024*1024),
+					total_mem,
+					max_total_mem,
+					bound_mem,
+					max_bound_mem,
 					discard_bias);
 
 	LLFontGL::sMonospace->renderUTF8(text, 0, 0, line_height*3,
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index ab06a0f4fbe..1fca77ec504 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -903,7 +903,7 @@ void LLViewerObjectList::killAllObjects()
 	if (!mMapObjects.empty())
 	{
 		llwarns << "Some objects still on map object list!" << llendl;
-		mActiveObjects.clear();
+		mMapObjects.clear();
 	}
 }
 
diff --git a/indra/newview/skins/default/xui/de/floater_inventory.xml b/indra/newview/skins/default/xui/de/floater_inventory.xml
index d731d009b56..c8c67240d87 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory.xml
@@ -2,8 +2,8 @@
 <floater name="Inventory" title="Inventar">
 	<search_editor label="Suchanfrage hier eintippen" name="inventory search editor" />
 	<tab_container name="inventory filter tabs">
-		<inventory_panel label="All Items" name="All Items" />
-		<inventory_panel label="Recent Items" name="Recent Items" />
+		<inventory_panel label="Alle Objekte" name="All Items" />
+		<inventory_panel label="Letzte Objekte" name="Recent Items" />
 	</tab_container>
 	<menu_bar name="Inventory Menu">
 		<menu label="Datei" name="File">
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
index 1477cdb6943..2b63a90a191 100644
--- a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
+++ b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
@@ -49,17 +49,17 @@
 	</text>
 	<check_box label="Mit Gruppe teilen" name="CheckShareWithGroup" />
 	<check_box label="Kopieren allen erlauben" name="CheckEveryoneCopy" />
-	<text name="NextOwnerLabel">
+	<text name="NextOwnerLabel" width="150">
 		Nächster Eigentümer kann:
 	</text>
 	<check_box label="Bearbeiten" name="CheckNextOwnerModify" />
-	<check_box label="Kopieren" name="CheckNextOwnerCopy" />
+	<check_box label="Kopieren" name="CheckNextOwnerCopy" left_delta="85" />
 	<check_box label="Verkaufen/Weggeben" name="CheckNextOwnerTransfer" />
 	<text name="SaleLabel">
 		Objekt markieren:
 	</text>
 	<check_box label="Zum Verkauf" name="CheckPurchase" />
-	<radio_group name="RadioSaleType">
+	<radio_group name="RadioSaleType" left_delta="85"  width="245" >
 		<radio_item name="radio">
 			Original
 		</radio_item>
diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
index 9fb400dfd7e..3f4a6237f12 100644
--- a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
+++ b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
@@ -3,5 +3,5 @@
 	<check_box label="Cursor folgen" name="lock_check" />
 	<combo_box label="Sperren" name="history_combo" />
 	<button label="Zurück" name="back_btn" />
-	<button label="Weiterleiten" name="fwd_btn" />
+	<button label="Weiterleiten" name="fwd_btn" width="82" />
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
index f2de8103c35..c7a366ae87b 100644
--- a/indra/newview/skins/default/xui/de/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/de/floater_snapshot.xml
@@ -112,10 +112,10 @@
 	<spinner label="Höhe" name="snapshot_height"/>
 	<check_box label="Seitenverhältnis beibehalten" name="keep_aspect_check"/>
 	<slider label="Bildqualität" name="image_quality_slider"/>
-	<text name="layer_type_label">
+	<text name="layer_type_label" width="63">
 		Aufnehmen:
 	</text>
-	<combo_box label="Bildlayer" name="layer_types">
+	<combo_box label="Bildlayer" name="layer_types" width="132" left="73">
 		<combo_item name="Colors">
 			Farben
 		</combo_item>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index 03401cee9cf..a04851c4292 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -168,9 +168,9 @@
 			<text name="label click action">
 				Bei Linksklicken:
 			</text>
-			<combo_box name="clickaction">
+			<combo_box name="clickaction" width="178">
 				<combo_item name="Touch/grab(default)">
-					Berühren/greifen (Standard)
+					Berühren/Greifen (Standard)
 				</combo_item>
 				<combo_item name="Sitonobject">
 					Auf Objekt sitzen
@@ -590,13 +590,13 @@
 		<text name="label_area">
 			Fläche: [AREA] m2
 		</text>
-		<button label="Land kaufen..." label_selected="Land kaufen..." name="button buy land" />
-		<button label="Land aufgeben..." label_selected="Land aufgeben..."
+		<button label="Land kaufen..." label_selected="Land kaufen..." name="button buy land"  width="110" />
+		<button label="Land aufgeben..." label_selected="Land aufgeben..."  width="110"
 		     name="button abandon land" />
-		<button label="Unterteilen..." label_selected="Unterteilen..."
+		<button label="Unterteilen..." label_selected="Unterteilen..." width="110"
 		     name="button subdivide land" />
-		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land" />
-		<button label="Info zu Land..." label_selected="Info zu Land..."
+		<button label="Zusammenlegen" label_selected="Zusammenlegen" name="button join land" width="110" />
+		<button label="Info zu Land..." label_selected="Info zu Land..."  width="110"
 		     name="button about land" />
 	</panel>
 	<text name="status_rotate">
@@ -606,7 +606,7 @@
 		Klicken und ziehen, um die ausgewählte Seite zu dehnen
 	</text>
 	<text name="status_move">
-		Maus verschiebt, Shift-Taste und Maus kopiert
+		Maus verschiebt, Umschalt-Taste und Maus kopiert
 	</text>
 	<text name="status_modifyland">
 		Klicken und halten, um das Land zu bearbeiten
@@ -615,10 +615,10 @@
 		Klicken und ziehen, um die Ansicht zu ändern
 	</text>
 	<text name="status_grab">
-		Objekt new positionierern
+		Objekt neu positionieren
 	</text>
 	<text name="status_place">
-		Mausklick erstellt, Shift-Mausklick wählt aus
+		Mausklick erstellt, Umschalt-Mausklick wählt aus
 	</text>
 	<text name="status_selectland">
 		Klicken und ziehen, um Land auszuwählen
diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml
index 0a32de21923..d232bfaf071 100644
--- a/indra/newview/skins/default/xui/de/panel_group_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_general.xml
@@ -38,9 +38,9 @@ Bewegen Sie die Maus über die Optionen, um weitere Informationen anzuzeigen.
 		(Eigentümer werden fettgedruckt angezeigt)
 	</text>
 	<name_list name="visible_members">
-		<column label="Member Name" name="name" />
-		<column label="Title" name="title" />
-		<column label="Last Login" name="online" />
+		<column label="Mitgliedsname" name="name" relwidth="0.40" />
+		<column label="Titel" name="title" relwidth="0.25" />
+		<column label="Letzte Anmeldung" name="online" relwidth="0.35" />
 	</name_list>
 	<text name="incomplete_member_data_str">
 		Mitgliedsdaten werden abgerufen
@@ -83,8 +83,6 @@ Falls in den nächsten 48 Stunden niemand sonst dieser Gruppe beitritt, wird sie
 			<text name="active_title_label">
 				Mein aktiver Titel
 			</text>
-			<combo_box name="active_title"
-			     tool_tip="Sets the title that appears in your avatar&apos;s name tag   when this group is active." />
 		</panel>
 		<check_box label="Gruppenmitteilungen erhalten" name="receive_notices"
 		     tool_tip="Festlegen, ob Sie von dieser Gruppe Mitteilungen erhalten können.  Deaktivieren Sie diese Option, wenn Sie von der Gruppe Spam erhalten."
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
index cf11e3c5323..77a98166a12 100644
--- a/indra/newview/skins/default/xui/de/panel_group_land_money.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
@@ -1,11 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel label="Land und L$" name="land_money_tab">
 	<text name="help_text">
-		Es werden Parzellen in Gruppenbesitz und 
-Beitragsdetails angezeigt. Solange der Wert für &apos;Insgesamt
-verwendet Land&apos; unter oder gleich dem Wert für
-&apos;Gesamtbeitrag&apos; ist, wird eine Warnung angezeigt. Die Registerkarten &apos;Planung&apos;, &apos;Details&apos; und &apos;Verkäufe&apos;
-enthalten Informationen über die Gruppenfinanzen.
+		Es werden Parzellen in Gruppenbesitz und Beitragsdetails angezeigt. Solange der Wert für &apos;Insgesamt verwendetes Land&apos; unter oder gleich dem Wert für &apos;Gesamtbeitrag&apos; ist, wird eine Warnung angezeigt. Die Registerkarten &apos;Planung&apos;, &apos;Details&apos; und &apos;Verkäufe&apos; enthalten Informationen über die Gruppenfinanzen.
 	</text>
 	<button label="?" name="help_button" />
 	<text name="cant_view_group_land_text">
@@ -21,9 +17,9 @@ enthalten Informationen über die Gruppenfinanzen.
 		Land in Gruppenbesitz
 	</text>
 	<scroll_list name="group_parcel_list">
-		<column label="Parcel Name" name="name" />
+		<column label="Parzellenname" name="name" />
 		<column label="Region" name="location" />
-		<column label="Area" name="area" />
+		<column label="Gebiet" name="area" />
 		<column label="" name="hidden" />
 	</scroll_list>
 	<button label="Auf Karte" label_selected="Auf Karte" name="map_button" />
@@ -55,10 +51,11 @@ enthalten Informationen über die Gruppenfinanzen.
 		Ihr Landbeitrag kann nicht festgelegt werden.
 	</string>
 	<text name="your_contribution_max_value">
-		Quadratmeter (max. [AMOUNT])
+		qm (max. [AMOUNT])
 	</text>
 	<text name="group_over_limit_text">
-		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit das verwendete Land gehalten werden kann.
+		Die Gruppenmitglieder müssen mehr Landnutzungsrechte spenden, damit
+das verwendete Land gehalten werden kann.
 	</text>
 	<text name="group_money_heading">
 		Gruppen-L$
diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml
index 56a384b34c5..53f581313ac 100644
--- a/indra/newview/skins/default/xui/de/panel_group_notices.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_notices.xml
@@ -22,9 +22,9 @@ Eine Mitteilungsliste speichert maximal 200 Mitteilungen pro Gruppe täglich.
 	</text>
 	<scroll_list name="notice_list">
 		<column label="" name="icon" />
-		<column label="Subject" name="subject" />
-		<column label="From" name="from" />
-		<column label="Date" name="date" />
+		<column label="Thema" name="subject" />
+		<column label="Von" name="from" />
+		<column label="Datum" name="date" />
 	</scroll_list>
 	<text name="notice_list_none_found">
 		Nicht gefunden.
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml
index 9a478f1b1c2..204759f43d4 100644
--- a/indra/newview/skins/default/xui/de/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_roles.xml
@@ -46,13 +46,13 @@ Mitglieder diese Fähigkeit haben.
 		</text>
 	</panel>
 	<tab_container name="roles_tab_container">
-		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Members">
+		<panel label="Mitglieder" name="members_sub_tab" tool_tip="Mitglieder">
 			<button label="Suchen" name="search_button" />
 			<button label="Alle anzeigen" name="show_all_button" />
 			<name_list name="member_list">
-				<column label="Member Name" name="name" />
-				<column label="Donated Tier" name="donated" />
-				<column label="Last Login" name="online" />
+				<column label="Mitgliedsname" name="name" />
+				<column name="donated" />
+				<column label="Letzte Anmeldung" name="online" />
 			</name_list>
 			<button label="Neue Person einladen..." name="member_invite" />
 			<button label="Aus Gruppe werfen" name="member_eject" />
@@ -66,9 +66,9 @@ um mehrere Mitglieder auszuwählen.
 			<button label="Suchen" name="search_button" />
 			<button label="Alle anzeigen" name="show_all_button" />
 			<scroll_list name="role_list">
-				<column label="Role Name" name="name" />
-				<column label="Title" name="title" />
-				<column label="Members" name="members" />
+				<column name="name" />
+				<column label="Titel" name="title" />
+				<column label="Mitglieder" name="members" />
 			</scroll_list>
 			<button label="Neue Rolle erstellen..." name="role_create" />
 			<button label="Rolle löschen" name="role_delete" />
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index c644ece04bb..56cc7560edf 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -435,9 +435,9 @@
 	</string>
 	<!-- Chat -->
 	<string name="whisper">
-		Flüstert:
+		flüstert:
 	</string>
 	<string name="shout">
-		Ruft:
+		ruft:
 	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
index 4d22f393e52..b8e6c3e2d93 100644
--- a/indra/newview/skins/default/xui/ja/floater_tools.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tools.xml
@@ -74,7 +74,7 @@
 	<check_box label="土地を選択" name="radio select land" />
 	<check_box label="土地をならす" name="radio flatten" />
 	<check_box label="土地を隆起させる" name="radio raise" />
-	<check_box label="低地" name="radio lower" />
+	<check_box label="土地を低くする" name="radio lower" />
 	<check_box label="土地を滑らかにする" name="radio smooth" />
 	<check_box label="土地を荒らす" name="radio noise" />
 	<check_box label="土地を元に戻す" name="radio revert" />
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
index 8339b103124..f982b844bfe 100644
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -435,9 +435,9 @@
 	</string>
 	<!-- Chat -->
 	<string name="whisper">
-		ささやく:
+		のささやき:
 	</string>
 	<string name="shout">
-		叫ぶ:
+		の叫び:
 	</string>
 </strings>
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index ef13f9151b8..ca601dea543 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -166,10 +166,7 @@ def construct(self):
         # need to get the kdu dll from any of the build directories as well
         try:
             self.path(self.find_existing_file(
-                # *FIX:Mani we need to add support for packaging specific targets.
-                #'../llkdu/debug/llkdu.dll',
-                '../llkdu/release/llkdu.dll',
-                '../llkdu/relwithdebinfo/llkdu.dll',
+                '../llkdu/%s/llkdu.dll' % self.args['configuration'],
                 '../../libraries/i686-win32/lib/release/llkdu.dll'), 
                   dst='llkdu.dll')
         except:
@@ -190,8 +187,18 @@ def construct(self):
             self.end_prefix()
 
         # Mozilla appears to force a dependency on these files so we need to ship it (CP)
-        self.path("msvcr80.dll")
-        self.path("msvcp80.dll")
+        # These need to be installed as a SxS assembly, currently a 'private' assembly.
+        # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
+        if self.prefix(src=self.args['configuration'], dst=""):
+            if self.args['configuration'] == 'Debug':
+                self.path("msvcr80d.dll")
+                self.path("msvcp80d.dll")
+                self.path("Microsoft.VC80.DebugCRT.manifest")
+            else:
+                self.path("msvcr80.dll")
+                self.path("msvcp80.dll")
+                self.path("Microsoft.VC80.CRT.manifest")
+            self.end_prefix()
 
         # Mozilla runtime DLLs (CP)
         if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""):
@@ -220,6 +227,11 @@ def construct(self):
             self.path("res/*/*")
             self.end_prefix()
 
+        # Mozilla hack to get it to accept newer versions of msvc*80.dll than are listed in manifest
+        # necessary as llmozlib2-vc80.lib refers to an old version of msvc*80.dll - can be removed when new version of llmozlib is built - Nyx
+        # The config file name needs to match the exe's name.
+        self.path("SecondLife.exe.config", dst=self.final_exe() + ".config")
+
         # Vivox runtimes
         if self.prefix(src="vivox-runtime/i686-win32", dst=""):
             self.path("SLVoice.exe")
-- 
GitLab