diff --git a/.hgtags b/.hgtags
index 33077da621..ef49196026 100755
--- a/.hgtags
+++ b/.hgtags
@@ -518,3 +518,4 @@ a9f2d0cb11f73b06858e6083bb50083becc3f9cd 3.7.9-release
d86a7e1bc96d27b683f951d3701d5b7042158c68 3.7.13-release
a7872554f3665588f1e8347d472cec3a299254b3 3.7.14-release
3f11f57f2b4d15a9f987d12bc70ef507eefb5018 3.7.15-release
+562e7dace7465060ac9adb2e8eca800b699ff024 3.7.16-release
diff --git a/indra/llinventory/llfoldertype.cpp b/indra/llinventory/llfoldertype.cpp
index b6c26e5a53..23bf6da1f9 100644
--- a/indra/llinventory/llfoldertype.cpp
+++ b/indra/llinventory/llfoldertype.cpp
@@ -93,10 +93,7 @@ LLFolderDictionary::LLFolderDictionary()
addEntry(LLFolderType::FT_MESH, new FolderEntry("mesh", TRUE));
addEntry(LLFolderType::FT_INBOX, new FolderEntry("inbox", TRUE));
- // Make outbox folder show up in the list of system folders
- //addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", FALSE));
addEntry(LLFolderType::FT_OUTBOX, new FolderEntry("outbox", TRUE));
- //
addEntry(LLFolderType::FT_BASIC_ROOT, new FolderEntry("basic_rt", TRUE));
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
index bd8ad31d0a..136bc6ee30 100755
--- a/indra/llinventory/llparcel.cpp
+++ b/indra/llinventory/llparcel.cpp
@@ -793,8 +793,6 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time)
}
}
- removeFromBanList(agent_id);
-
LLAccessEntry new_entry;
new_entry.mID = agent_id;
new_entry.mTime = time;
@@ -838,8 +836,6 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time)
}
}
- removeFromAccessList(agent_id);
-
LLAccessEntry new_entry;
new_entry.mID = agent_id;
new_entry.mTime = time;
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
index ffb209f995..73204e8b19 100755
--- a/indra/llprimitive/llmodel.cpp
+++ b/indra/llprimitive/llmodel.cpp
@@ -191,7 +191,7 @@ LLModel::EModelStatus load_face_from_dom_triangles(std::vector& fa
U32 tc_count = tc_source ? tc.getCount() : 0;
U32 norm_count = norm_source ? n.getCount() : 0;
- if (vertex_count == 0)
+ if ((vertex_count == 0) || (tc_count == 0))
{
LL_WARNS() << "Unable to process mesh with empty position array; invalid model." << LL_ENDL;
return LLModel::BAD_ELEMENT;
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 147821bc7e..a7ec190a75 100755
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -1421,7 +1421,8 @@ BOOL LLFolderView::search(LLFolderViewItem* first_item, const std::string &searc
// FIRE-8253
}
- const std::string current_item_label(search_item->getViewModelItem()->getSearchableName());
+ std::string current_item_label(search_item->getViewModelItem()->getSearchableName());
+ LLStringUtil::toUpper(current_item_label);
S32 search_string_length = llmin(upper_case_string.size(), current_item_label.size());
if (!current_item_label.compare(0, search_string_length, upper_case_string))
{
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index a0524ccc55..a2c5d2239d 100755
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -257,6 +257,7 @@ void LLLineEditor::onCommit()
setControlValue(getValue());
LLUICtrl::onCommit();
+ resetDirty();
// Selection on commit needs to be turned off when evaluating maths
// expressions, to allow indication of the error position
diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp
index 44f4128461..6815dc7384 100755
--- a/indra/llui/llstatgraph.cpp
+++ b/indra/llui/llstatgraph.cpp
@@ -44,16 +44,13 @@ LLStatGraph::LLStatGraph(const Params& p)
: LLView(p),
mMin(p.min),
mMax(p.max),
- // Proper variable initialization
- //mPerSec(true),
mPerSec(p.per_sec),
- //
mPrecision(p.precision),
mValue(p.value),
+ mUnits(p.units),
mNewStatFloatp(p.stat.count_stat_float),
// Proper variable initialization
- mLabel(p.label),
- mUnits(p.units)
+ mLabel(p.label)
//
{
setToolTip(p.name());
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index b992fd547d..e5bd2beecc 100755
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -1419,10 +1419,6 @@ void LLTextBase::replaceWithSuggestion(U32 index)
if ( (it->first <= (U32)mCursorPos) && (it->second >= (U32)mCursorPos) )
{
deselect();
-
- // Delete the misspelled word
- removeStringNoUndo(it->first, it->second - it->first);
-
// Insert the suggestion in its place
LLWString suggestion = utf8str_to_wstring(mSuggestionList[index]);
LLStyleConstSP sp(new LLStyle(getStyleParams()));
@@ -1430,6 +1426,10 @@ void LLTextBase::replaceWithSuggestion(U32 index)
segment_vec_t segments(1, segmentp);
insertStringNoUndo(it->first, suggestion, &segments);
+ // Delete the misspelled word
+ removeStringNoUndo(it->first + (S32)suggestion.length(), it->second - it->first);
+
+
setCursorPos(it->first + (S32)suggestion.length());
// FIRE-11045: Spell checking changes not identified as such
@@ -2602,7 +2602,7 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
// binary search for line that starts before local_y
line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), doc_y, compare_bottom());
- if (line_iter == mLineInfoList.end())
+ if (!mLineInfoList.size() || line_iter == mLineInfoList.end())
{
return getLength(); // past the end
}
@@ -2694,7 +2694,6 @@ LLRect LLTextBase::getDocRectFromDocIndex(S32 pos) const
// clamp pos to valid values
pos = llclamp(pos, 0, mLineInfoList.back().mDocIndexEnd - 1);
- // find line that contains cursor
line_list_t::const_iterator line_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), pos, line_end_compare());
doc_rect.mLeft = line_iter->mRect.mLeft;
@@ -2872,6 +2871,12 @@ void LLTextBase::changeLine( S32 delta )
LLRect visible_region = getVisibleDocumentRect();
S32 new_cursor_pos = getDocIndexFromLocalCoord(mDesiredXPixel,
mLineInfoList[new_line].mRect.mBottom + mVisibleTextRect.mBottom - visible_region.mBottom, TRUE);
+ S32 actual_line = getLineNumFromDocIndex(new_cursor_pos);
+ if (actual_line != new_line)
+ {
+ // line edge, correcting position by 1 to move onto proper line
+ new_cursor_pos += new_line - actual_line;
+ }
setCursorPos(new_cursor_pos, true);
}
}
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index a8ef0b7c27..51456aca93 100755
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -1211,7 +1211,6 @@ void LLTextEditor::addChar(llwchar wc)
}
}
-
void LLTextEditor::addLineBreakChar(BOOL group_together)
{
if( !getEnabled() )
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index f3934a461c..1493fc582a 100755
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -93,6 +93,7 @@ enum EAcceptance
{
ACCEPT_POSTPONED, // we are asynchronously determining acceptance
ACCEPT_NO, // Uninformative, general purpose denial.
+ ACCEPT_NO_CUSTOM, // Denial with custom message.
ACCEPT_NO_LOCKED, // Operation would be valid, but permissions are set to disallow it.
ACCEPT_YES_COPY_SINGLE, // We'll take a copy of a single item
ACCEPT_YES_SINGLE, // Accepted. OK to drag and drop single item here.
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index 44e1ac6fdd..0630872af6 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -436,9 +436,35 @@ attributedStringInfo getSegments(NSAttributedString *str)
}
}
-- (void)flagsChanged:(NSEvent *)theEvent {
+- (void)flagsChanged:(NSEvent *)theEvent
+{
mModifiers = [theEvent modifierFlags];
callModifier([theEvent modifierFlags]);
+
+ NSInteger mask = 0;
+ switch([theEvent keyCode])
+ {
+ case 56:
+ mask = NSShiftKeyMask;
+ break;
+ case 58:
+ mask = NSAlternateKeyMask;
+ break;
+ case 59:
+ mask = NSControlKeyMask;
+ break;
+ default:
+ return;
+ }
+
+ if (mModifiers & mask)
+ {
+ callKeyDown([theEvent keyCode], 0);
+ }
+ else
+ {
+ callKeyUp([theEvent keyCode], 0);
+ }
}
- (BOOL) acceptsFirstResponder
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 967c5ab72d..04fa603b92 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -357,6 +357,7 @@ set(viewer_SOURCE_FILES
llfloaterinspect.cpp
llfloaterinventory.cpp
llfloaterjoystick.cpp
+ llfloaterlagmeter.cpp
llfloaterland.cpp
llfloaterlandholdings.cpp
llfloatermap.cpp
@@ -1087,6 +1088,7 @@ set(viewer_HEADER_FILES
llfloaterinspect.h
llfloaterinventory.h
llfloaterjoystick.h
+ llfloaterlagmeter.h
llfloaterland.h
llfloaterlandholdings.h
llfloatermap.h
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
index 086dfbf494..dfc06930a2 100755
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -631,22 +631,22 @@ RCERR_CAST_TIME_EXCEEDED TODO: add documentation
RCERR_SIM_PERF_LOW TODO: add documentation
RCERR_UNKNOWN TODO: add documentation
-ESTATE_ACCESS_ALLOWED_AGENT_ADD TODO: add documentation
-ESTATE_ACCESS_ALLOWED_AGENT_REMOVE TODO: add documentation
-ESTATE_ACCESS_ALLOWED_GROUP_ADD TODO: add documentation
-ESTATE_ACCESS_ALLOWED_GROUP_REMOVE TODO: add documentation
-ESTATE_ACCESS_BANNED_AGENT_ADD TODO: add documentation
-ESTATE_ACCESS_BANNED_AGENT_REMOVE TODO: add documentation
+ESTATE_ACCESS_ALLOWED_AGENT_ADD Passed to llManageEstateAccess to add the agent to this estate's Allowed Residents list
+ESTATE_ACCESS_ALLOWED_AGENT_REMOVE Passed to llManageEstateAccess to remove the agent from this estate's Allowed Residents list
+ESTATE_ACCESS_ALLOWED_GROUP_ADD Passed to llManageEstateAccess to add the group to this estate's Allowed groups list
+ESTATE_ACCESS_ALLOWED_GROUP_REMOVE Passed to llManageEstateAccess to remove the group from this estate's Allowed groups list
+ESTATE_ACCESS_BANNED_AGENT_ADD Passed to llManageEstateAccess to add the agent to this estate's Banned residents list
+ESTATE_ACCESS_BANNED_AGENT_REMOVE Passed to llManageEstateAccess to remove the agent from this estate's Banned residents list
DENSITY TODO: add documentation
FRICTION TODO: add documentation
RESTITUTION TODO: add documentation
GRAVITY_MULTIPLIER TODO: add documentation
-KFM_COMMAND TODO: add documentation
-KFM_CMD_PLAY TODO: add documentation
-KFM_CMD_STOP TODO: add documentation
-KFM_CMD_PAUSE TODO: add documentation
+KFM_COMMAND Command used in the options parameter of llSetKeyframedMotion, followed by one of: KFM_CMD_STOP, KFM_CMD_PLAY, KFM_CMD_PAUSE to play, stop or pause the motion
+KFM_CMD_PLAY Command used in the options parameter llSetKeyframedMotion. Resumes the animation previously stopped by KFM_CMD_STOP or KFM_CMD_PAUSE
+KFM_CMD_STOP Command used in the options parameter llSetKeyframedMotion. Stops the animation and resets it at the start of motion
+KFM_CMD_PAUSE Command used in the options parameter llSetKeyframedMotion. Stops the animation but doesn t reset it at the start of motion.
KFM_CMD_SET_MODE TODO: add documentation
KFM_MODE TODO: add documentation
KFM_FORWARD TODO: add documentation
@@ -660,18 +660,18 @@ KFM_TRANSLATION TODO: add documentation
CHARACTER_CMD_STOP TODO: add documentation
CHARACTER_CMD_JUMP TODO: add documentation
-CHARACTER_DESIRED_SPEED TODO: add documentation
-CHARACTER_RADIUS TODO: add documentation
-CHARACTER_LENGTH TODO: add documentation
-CHARACTER_ORIENTATION TODO: add documentation
-CHARACTER_AVOIDANCE_MODE TODO: add documentation
+CHARACTER_DESIRED_SPEED Constant used to indicate that the following argument is the desired speed for a Pathfinding character.
+CHARACTER_RADIUS Constant used to indicate that the following argument is the radius of the capsule for a Pathfinding character.
+CHARACTER_LENGTH Constant used to indicate that the following argument is the length of the capsule for a Pathfinding character.
+CHARACTER_ORIENTATION Constant used to indicate that the following argument is the orientation of the capsule for a Pathfinding character.
+CHARACTER_AVOIDANCE_MODE Allows you to specify that a character should not try to avoid other characters, should not try to avoid dynamic obstacles, or both. Is combined with a mask bit flags
PURSUIT_OFFSET TODO: add documentation
REQUIRE_LINE_OF_SIGHT TODO: add documentation
PURSUIT_FUZZ_FACTOR TODO: add documentation
PURSUIT_INTERCEPT TODO: add documentation
FORCE_DIRECT_PATH TODO: add documentation
-VERTICAL TODO: add documentation
-HORIZONTAL TODO: add documentation
+VERTICAL Constant to indicate that the orientation of the capsule for a Pathfinding character is vertical.
+HORIZONTAL Constant to indicate that the orientation of the capsule for a Pathfinding character is horizontal.
AVOID_CHARACTERS TODO: add documentation
AVOID_DYNAMIC_OBSTACLES TODO: add documentation
@@ -686,12 +686,12 @@ PU_FAILURE_UNREACHABLE Goal is no longer reachable for some reason - e
PU_GOAL_REACHED Character has reached the goal and will stop or choose a new goal (if wandering).
PU_SLOWDOWN_DISTANCE_REACHED Character is near current goal.
-CHARACTER_TYPE TODO: add documentation
-CHARACTER_TYPE_A TODO: add documentation
-CHARACTER_TYPE_B TODO: add documentation
-CHARACTER_TYPE_C TODO: add documentation
-CHARACTER_TYPE_D TODO: add documentation
-CHARACTER_TYPE_NONE TODO: add documentation
+CHARACTER_TYPE Specifies which walkability coefficient will be used by this character. Used in combination with one of the character type flags.
+CHARACTER_TYPE_A Used for character types that you prefer move in a way consistent with humanoids.
+CHARACTER_TYPE_B Used for character types that you prefer move in a way consistent with wild animals or off road vehicles.
+CHARACTER_TYPE_C Used for mechanical character types or road going vehicles.
+CHARACTER_TYPE_D Used for character types that are not consistent with the A, B, or C type.
+CHARACTER_TYPE_NONE Used to set no specific character type.
TRAVERSAL_TYPE TODO: add documentation
TRAVERSAL_TYPE_SLOW TODO: add documentation
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 03b975d447..e61f954e39 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -16254,7 +16254,7 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
Default
- UseExternalBrowser
+ UseExternalBrowser
Comment
Use default browser when opening web pages instead of in-world browser.
@@ -16265,6 +16265,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
1
+ PreferredBrowserBehavior
+
+ Comment
+ Use system browser for any links (0), use builtin browser for SL links and system one for others (1) or use builtin browser only (2).
+ Persist
+ 1
+ Type
+ U32
+ Value
+ 1
+
UseFreezeFrame
Comment
@@ -17443,6 +17454,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Backup
0
+ LeaveMouselook
+
+ Comment
+ Exit Mouselook mode via S or Down Arrow keys while sitting
+ Persist
+ 1
+ Type
+ Boolean
+ Value
+ 0
+
TextureLoggingThreshold
Comment
@@ -20256,6 +20278,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
+ WearFolderLimit
+
+ Comment
+ Limits number of items in the folder that can be replaced/added to current outfit
+ Persist
+ 1
+ Type
+ U32
+ Value
+ 125
+
EveryoneCopy
Comment
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 41002c8ace..1e1f0d3c4b 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -4273,6 +4273,12 @@ bool LLAgent::teleportCore(bool is_local)
//return false; //LO - yea, lets not return here, we may be stuck in TP and if we are, letting this go through will get us out;
}
+ // force stand up and stop a sitting animation (if any), see MAINT-3969
+ if (isAgentAvatarValid() && gAgentAvatarp->getParent() && gAgentAvatarp->isSitting())
+ {
+ gAgentAvatarp->getOffObject();
+ }
+
#if 0
// This should not exist. It has been added, removed, added, and now removed again.
// This change needs to come from the simulator. Otherwise, the agent ends up out of
@@ -4480,7 +4486,7 @@ void LLAgent::teleportRequest(
bool look_at_from_camera)
{
LLViewerRegion* regionp = getRegion();
- bool is_local = (region_handle == to_region_handle(getPositionGlobal()));
+ bool is_local = (region_handle == regionp->getHandle());
if(regionp && teleportCore(is_local))
{
LL_INFOS("") << "TeleportLocationRequest: '" << region_handle << "':"
@@ -4697,7 +4703,12 @@ void LLAgent::teleportViaLocationLookAt(const LLVector3d& pos_global)
void LLAgent::doTeleportViaLocationLookAt(const LLVector3d& pos_global)
{
mbTeleportKeepsLookAt = true;
- gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction
+
+ if(!gAgentCamera.isfollowCamLocked())
+ {
+ gAgentCamera.setFocusOnAvatar(FALSE, ANIMATE); // detach camera form avatar, so it keeps direction
+ }
+
U64 region_handle = to_region_handle(pos_global);
// Aurora-sim var region teleports
LLSimInfo* simInfo = LLWorldMap::instance().simInfoFromHandle(region_handle);
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index c649b917c4..966c965b41 100755
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2819,6 +2819,11 @@ void LLAgentCamera::lookAtLastChat()
}
}
+bool LLAgentCamera::isfollowCamLocked()
+{
+ return mFollowCam.getPositionLocked();
+}
+
BOOL LLAgentCamera::setPointAt(EPointAtType target_type, LLViewerObject *object, LLVector3 position)
{
// Ansariel: Remember the current object point pointed at - we might need it later
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
index bedda95e1c..87a820b8af 100755
--- a/indra/newview/llagentcamera.h
+++ b/indra/newview/llagentcamera.h
@@ -155,6 +155,7 @@ private:
//--------------------------------------------------------------------
public:
void setUsingFollowCam(bool using_follow_cam);
+ bool isfollowCamLocked();
private:
LLFollowCam mFollowCam; // Ventrella
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 83755c8f0f..34bd20f02c 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -1074,6 +1074,7 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
if (mismatched == 0)
{
LL_DEBUGS("Avatar") << "no changes, bailing out" << LL_ENDL;
+ mCOFChangeInProgress = false;
return;
}
diff --git a/indra/newview/llaisapi.cpp b/indra/newview/llaisapi.cpp
index da66ea357a..96de15bf75 100755
--- a/indra/newview/llaisapi.cpp
+++ b/indra/newview/llaisapi.cpp
@@ -380,8 +380,15 @@ void AISUpdate::parseMeta(const LLSD& update)
it != cat_ids.end(); ++it)
{
LLViewerInventoryCategory *cat = gInventory.getCategory(*it);
- mCatDescendentDeltas[cat->getParentUUID()]--;
- mObjectsDeletedIds.insert(*it);
+ if(cat)
+ {
+ mCatDescendentDeltas[cat->getParentUUID()]--;
+ mObjectsDeletedIds.insert(*it);
+ }
+ else
+ {
+ LL_WARNS("Inventory") << "removed category not found " << *it << LL_ENDL;
+ }
}
// parse _categories_items_removed -> mObjectsDeletedIds
@@ -392,8 +399,15 @@ void AISUpdate::parseMeta(const LLSD& update)
it != item_ids.end(); ++it)
{
LLViewerInventoryItem *item = gInventory.getItem(*it);
- mCatDescendentDeltas[item->getParentUUID()]--;
- mObjectsDeletedIds.insert(*it);
+ if(item)
+ {
+ mCatDescendentDeltas[item->getParentUUID()]--;
+ mObjectsDeletedIds.insert(*it);
+ }
+ else
+ {
+ LL_WARNS("Inventory") << "removed item not found " << *it << LL_ENDL;
+ }
}
// parse _broken_links_removed -> mObjectsDeletedIds
@@ -403,8 +417,15 @@ void AISUpdate::parseMeta(const LLSD& update)
it != broken_link_ids.end(); ++it)
{
LLViewerInventoryItem *item = gInventory.getItem(*it);
- mCatDescendentDeltas[item->getParentUUID()]--;
- mObjectsDeletedIds.insert(*it);
+ if(item)
+ {
+ mCatDescendentDeltas[item->getParentUUID()]--;
+ mObjectsDeletedIds.insert(*it);
+ }
+ else
+ {
+ LL_WARNS("Inventory") << "broken link not found " << *it << LL_ENDL;
+ }
}
// parse _created_items
@@ -795,7 +816,7 @@ void AISUpdate::doUpdate()
// Since this is a copy of the category *before* the accounting update, above,
// we need to transfer back the updated version/descendent count.
LLViewerInventoryCategory* curr_cat = gInventory.getCategory(new_category->getUUID());
- if (NULL == curr_cat)
+ if (!curr_cat)
{
LL_WARNS("Inventory") << "Failed to update unknown category " << new_category->getUUID() << LL_ENDL;
}
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 5dbc295882..fbaa9270cf 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1776,8 +1776,16 @@ bool LLAppearanceMgr::getCanAddToCOF(const LLUUID& outfit_cat_id)
return false;
}
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
- return gInventory.hasMatchingDirectDescendent(outfit_cat_id, not_worn);
+ gInventory.collectDescendentsIf(outfit_cat_id,
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ not_worn);
+
+ return items.size() > 0;
}
bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
@@ -1798,8 +1806,16 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
}
// Check whether the outfit contains any wearables we aren't wearing already (STORM-702).
- LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true);
- return gInventory.hasMatchingDirectDescendent(outfit_cat_id, not_worn);
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx is_worn(/*is_worn=*/ false, /*include_body_parts=*/ true);
+ gInventory.collectDescendentsIf(outfit_cat_id,
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ is_worn);
+
+ return items.size() > 0;
}
void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category, LLPointer cb)
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 768c235614..5076db57e5 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -3979,21 +3979,22 @@ LLSD LLAppViewer::getViewerInfo() const
// TODO: Implement media plugin version query
info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)";
+ // Use the total accumulated samples.
+ //S32 packets_in = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_IN);
+ //if (packets_in > 0)
+ //{
+ // info["PACKETS_LOST"] = LLViewerStats::instance().getRecording().getSum(LLStatViewer::PACKETS_LOST);
+ // info["PACKETS_IN"] = packets_in;
+ // info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
+ //}
if (gPacketsIn > 0)
{
- // Use the total accumulated samples.
-
- // LLTrace::Recording& last_frame = LLTrace::get_frame_recording().getLastRecording();
- // info["PACKETS_LOST"] = last_frame.getSum(LLStatViewer::PACKETS_LOST);
- // info["PACKETS_IN"] = last_frame.getSum(LLStatViewer::PACKETS_IN);
-
info["PACKETS_LOST"] = LLStatViewer::PACKETS_LOST.getTotalSamples();
info["PACKETS_IN"] = LLStatViewer::PACKETS_IN.getTotalSamples();
- //
-
info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal();
}
+ //
if (mServerReleaseNotesURL.empty())
{
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index e3c1eaf2a9..ce947be792 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -163,7 +163,7 @@ void LLAvatarActions::removeFriendsDialog(const uuid_vec_t& ids)
LLAvatarName av_name;
if(LLAvatarNameCache::get(agent_id, &av_name))
{
- args["NAME"] = av_name.getDisplayName();
+ args["NAME"] = av_name.getCompleteName();
}
msgType = "RemoveFromFriends";
@@ -500,7 +500,7 @@ void LLAvatarActions::showOnMap(const LLUUID& id)
}
gFloaterWorldMap->trackAvatar(id, av_name.getDisplayName());
- LLFloaterReg::showInstance("world_map");
+ LLFloaterReg::showInstance("world_map", "center");
}
// static
@@ -659,6 +659,16 @@ void LLAvatarActions::share(const LLUUID& id)
{
// we should always get here, but check to verify anyways
LLIMModel::getInstance()->addMessage(session_id, SYSTEM_FROM, LLUUID::null, LLTrans::getString("share_alert"), false);
+
+ // [FS Communication UI]
+ //LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(session_id);
+ //if (session_floater && session_floater->isMinimized())
+ //{
+ // session_floater->setMinimized(false);
+ //}
+ //LLFloaterIMContainer *im_container = LLFloaterReg::getTypedInstance("im_container");
+ //im_container->selectConversationPair(session_id, true);
+ // [FS Communication UI]
}
}
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index eec2f2a5e0..c365ee02c1 100755
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -40,7 +40,6 @@
#include "llagent.h"
#include "llavatarnamecache.h"
#include "llclipboard.h"
-#include "llclipboard.h"
#include "llinventorybridge.h"
#include "llinventoryfunctions.h"
#include "llfloatersidepanelcontainer.h"
@@ -51,7 +50,7 @@
#include "lltoggleablemenu.h"
#include "llviewerinventory.h"
#include "llviewermenu.h"
-#include "llviewermenu.h"
+#include "llviewernetwork.h"
#include "lltooldraganddrop.h"
#include "llsdserialize.h"
@@ -329,6 +328,7 @@ public:
gInventory.updateItem(item);
gInventory.notifyObservers();
+ LLFavoritesOrderStorage::instance().saveOrder();
}
LLView::getWindow()->setCursor(UI_CURSOR_ARROW);
@@ -1507,6 +1507,19 @@ void LLFavoritesOrderStorage::getSLURL(const LLUUID& asset_id)
void LLFavoritesOrderStorage::destroyClass()
{
LLFavoritesOrderStorage::instance().cleanup();
+
+ // Favorites are stored in username.grid folder
+ //std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ //llifstream file;
+ //file.open(old_filename);
+ //if (file.is_open())
+ //{
+ // std::string new_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
+ // LLFile::copy(old_filename,new_filename);
+ // LLFile::remove(old_filename);
+ //}
+ //
+
if (gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"))
{
LLFavoritesOrderStorage::instance().saveFavoritesSLURLs();
@@ -1553,7 +1566,10 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
return;
}
+ // Favorites are stored in username.grid folder
+ //std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ //
llifstream in_file;
in_file.open(filename);
LLSD fav_llsd;
@@ -1608,7 +1624,10 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()
{
+ // Favorites are stored in username.grid folder
+ //std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ //
LLSD fav_llsd;
llifstream file;
file.open(filename);
@@ -1713,6 +1732,16 @@ void LLFavoritesOrderStorage::cleanup()
mSortIndexes.swap(aTempMap);
}
+void LLFavoritesOrderStorage::saveOrder()
+{
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLIsType is_type(LLAssetType::AT_LANDMARK);
+ LLUUID favorites_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_FAVORITE);
+ gInventory.collectDescendentsIf(favorites_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, is_type);
+ saveItemsOrder(items);
+}
+
void LLFavoritesOrderStorage::saveItemsOrder( const LLInventoryModel::item_array_t& items )
{
int sortField = 0;
diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
index faa59712d9..b509c0f451 100755
--- a/indra/newview/llfavoritesbar.h
+++ b/indra/newview/llfavoritesbar.h
@@ -210,6 +210,8 @@ public:
// Is used to save order for Favorites folder.
void saveItemsOrder(const LLInventoryModel::item_array_t& items);
+ void saveOrder();
+
void rearrangeFavoriteLandmarks(const LLUUID& source_item_id, const LLUUID& target_item_id);
/**
diff --git a/indra/newview/llfloateravatar.cpp b/indra/newview/llfloateravatar.cpp
index bdc5b581a9..31adf5b61e 100755
--- a/indra/newview/llfloateravatar.cpp
+++ b/indra/newview/llfloateravatar.cpp
@@ -34,6 +34,7 @@
#include "llfloateravatar.h"
#include "lluictrlfactory.h"
+#include "llmediactrl.h"
LLFloaterAvatar::LLFloaterAvatar(const LLSD& key)
@@ -43,6 +44,13 @@ LLFloaterAvatar::LLFloaterAvatar(const LLSD& key)
LLFloaterAvatar::~LLFloaterAvatar()
{
+ LLMediaCtrl* avatar_picker = findChild("avatar_picker_contents");
+ if (avatar_picker)
+ {
+ avatar_picker->navigateStop();
+ avatar_picker->clearCache(); //images are reloading each time already
+ avatar_picker->unloadMediaSource();
+ }
}
BOOL LLFloaterAvatar::postBuild()
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
index 68d6161af0..4f8f80d23f 100755
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -230,7 +230,9 @@ BOOL LLFloaterIMContainer::postBuild()
mStubCollapseBtn = getChild("stub_collapse_btn");
mStubCollapseBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onStubCollapseButtonClicked, this));
mSpeakBtn = getChild("speak_btn");
- mSpeakBtn->setClickedCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonClicked, this));
+
+ mSpeakBtn->setMouseDownCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonPressed, this));
+ mSpeakBtn->setMouseUpCallback(boost::bind(&LLFloaterIMContainer::onSpeakButtonReleased, this));
childSetAction("add_btn", boost::bind(&LLFloaterIMContainer::onAddButtonClicked, this));
@@ -353,11 +355,18 @@ void LLFloaterIMContainer::onStubCollapseButtonClicked()
collapseMessagesPane(true);
}
-void LLFloaterIMContainer::onSpeakButtonClicked()
+void LLFloaterIMContainer::onSpeakButtonPressed()
{
- LLAgent::toggleMicrophone("speak");
+ LLVoiceClient::getInstance()->inputUserControlState(true);
updateSpeakBtnState();
}
+
+void LLFloaterIMContainer::onSpeakButtonReleased()
+{
+ LLVoiceClient::getInstance()->inputUserControlState(false);
+ updateSpeakBtnState();
+}
+
void LLFloaterIMContainer::onExpandCollapseButtonClicked()
{
if (mConversationsPane->isCollapsed() && mMessagesPane->isCollapsed()
@@ -1399,6 +1408,10 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v
return LLAvatarActions::canCall();
}
else if ("can_open_voice_conversation" == item)
+ {
+ return is_single_select && LLAvatarActions::canCall();
+ }
+ else if ("can_open_voice_conversation" == item)
{
return is_single_select && LLAvatarActions::canCall();
}
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
index af8f790f9a..d490853950 100755
--- a/indra/newview/llfloaterimcontainer.h
+++ b/indra/newview/llfloaterimcontainer.h
@@ -137,7 +137,8 @@ private:
void onExpandCollapseButtonClicked();
void onStubCollapseButtonClicked();
void processParticipantsStyleUpdate();
- void onSpeakButtonClicked();
+ void onSpeakButtonPressed();
+ void onSpeakButtonReleased();
/*virtual*/ void onClickCloseBtn(bool app_quitting = false);
/*virtual*/ void closeHostedFloater();
diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp
index 794d81b465..d56a2b7db0 100755
--- a/indra/newview/llfloaterimsession.cpp
+++ b/indra/newview/llfloaterimsession.cpp
@@ -985,8 +985,7 @@ void LLFloaterIMSession::onInputEditorFocusReceived( LLFocusableElement* caller,
// Allow enabling the LLFloaterIMSession input editor only if session can accept text
LLIMModel::LLIMSession* im_session =
LLIMModel::instance().findIMSession(self->mSessionID);
- //TODO: While disabled lllineeditor can receive focus we need to check if it is enabled (EK)
- if( im_session && im_session->mTextIMPossible && self->mInputEditor->getEnabled())
+ if( im_session && im_session->mTextIMPossible && !self->mInputEditor->getReadOnly())
{
//in disconnected state IM input editor should be disabled
self->mInputEditor->setEnabled(!gDisconnected);
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
new file mode 100644
index 0000000000..f72f2631a1
--- /dev/null
+++ b/indra/newview/llfloaterlagmeter.cpp
@@ -0,0 +1,378 @@
+/**
+ * @file llfloaterlagmeter.cpp
+ * @brief The "Lag-o-Meter" floater used to tell users what is causing lag.
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llfloaterlagmeter.h"
+
+#include "lluictrlfactory.h"
+#include "llviewerstats.h"
+#include "llviewertexture.h"
+#include "llviewercontrol.h"
+#include "llappviewer.h"
+
+#include "lltexturefetch.h"
+
+#include "llbutton.h"
+#include "llfocusmgr.h"
+#include "lltextbox.h"
+
+const std::string LAG_CRITICAL_IMAGE_NAME = "lag_status_critical.tga";
+const std::string LAG_WARNING_IMAGE_NAME = "lag_status_warning.tga";
+const std::string LAG_GOOD_IMAGE_NAME = "lag_status_good.tga";
+
+LLFloaterLagMeter::LLFloaterLagMeter(const LLSD& key)
+ : LLFloater(key)
+{
+ mCommitCallbackRegistrar.add("LagMeter.ClickShrink", boost::bind(&LLFloaterLagMeter::onClickShrink, this));
+}
+
+BOOL LLFloaterLagMeter::postBuild()
+{
+ // Don't let this window take keyboard focus -- it's confusing to
+ // lose arrow-key driving when testing lag.
+ setIsChrome(TRUE);
+
+ // were we shrunk last time?
+ if (isShrunk())
+ {
+ onClickShrink();
+ }
+
+ mClientButton = getChild("client_lagmeter");
+ mClientText = getChild("client_text");
+ mClientCause = getChild("client_lag_cause");
+
+ mNetworkButton = getChild("network_lagmeter");
+ mNetworkText = getChild("network_text");
+ mNetworkCause = getChild("network_lag_cause");
+
+ mServerButton = getChild("server_lagmeter");
+ mServerText = getChild("server_text");
+ mServerCause = getChild("server_lag_cause");
+
+ std::string config_string = getString("client_frame_rate_critical_fps", mStringArgs);
+ mClientFrameTimeCritical = F32Seconds(1.0f / (float)atof( config_string.c_str() ));
+ config_string = getString("client_frame_rate_warning_fps", mStringArgs);
+ mClientFrameTimeWarning = F32Seconds(1.0f / (float)atof( config_string.c_str() ));
+
+ config_string = getString("network_packet_loss_critical_pct", mStringArgs);
+ mNetworkPacketLossCritical = F32Percent((float)atof( config_string.c_str() ));
+ config_string = getString("network_packet_loss_warning_pct", mStringArgs);
+ mNetworkPacketLossWarning = F32Percent((float)atof( config_string.c_str() ));
+
+ config_string = getString("network_ping_critical_ms", mStringArgs);
+ mNetworkPingCritical = F32Milliseconds((float)atof( config_string.c_str() ));
+ config_string = getString("network_ping_warning_ms", mStringArgs);
+ mNetworkPingWarning = F32Milliseconds((float)atof( config_string.c_str() ));
+ config_string = getString("server_frame_rate_critical_fps", mStringArgs);
+
+ mServerFrameTimeCritical = F32Seconds(1.0f / (float)atof( config_string.c_str() ));
+ config_string = getString("server_frame_rate_warning_fps", mStringArgs);
+ mServerFrameTimeWarning = F32Seconds(1.0f / (float)atof( config_string.c_str() ));
+ config_string = getString("server_single_process_max_time_ms", mStringArgs);
+ mServerSingleProcessMaxTime = F32Seconds((float)atof( config_string.c_str() ));
+
+// mShrunk = false;
+ config_string = getString("max_width_px", mStringArgs);
+ mMaxWidth = atoi( config_string.c_str() );
+ config_string = getString("min_width_px", mStringArgs);
+ mMinWidth = atoi( config_string.c_str() );
+
+ mStringArgs["[CLIENT_FRAME_RATE_CRITICAL]"] = getString("client_frame_rate_critical_fps");
+ mStringArgs["[CLIENT_FRAME_RATE_WARNING]"] = getString("client_frame_rate_warning_fps");
+
+ mStringArgs["[NETWORK_PACKET_LOSS_CRITICAL]"] = getString("network_packet_loss_critical_pct");
+ mStringArgs["[NETWORK_PACKET_LOSS_WARNING]"] = getString("network_packet_loss_warning_pct");
+
+ mStringArgs["[NETWORK_PING_CRITICAL]"] = getString("network_ping_critical_ms");
+ mStringArgs["[NETWORK_PING_WARNING]"] = getString("network_ping_warning_ms");
+
+ mStringArgs["[SERVER_FRAME_RATE_CRITICAL]"] = getString("server_frame_rate_critical_fps");
+ mStringArgs["[SERVER_FRAME_RATE_WARNING]"] = getString("server_frame_rate_warning_fps");
+
+// childSetAction("minimize", onClickShrink, this);
+ updateControls(isShrunk()); // if expanded append colon to the labels (EXT-4079)
+
+ return TRUE;
+}
+LLFloaterLagMeter::~LLFloaterLagMeter()
+{
+ // save shrunk status for next time
+// gSavedSettings.setBOOL("LagMeterShrunk", mShrunk);
+ // expand so we save the large window rectangle
+ if (isShrunk())
+ {
+ onClickShrink();
+ }
+}
+
+void LLFloaterLagMeter::draw()
+{
+ determineClient();
+ determineNetwork();
+ determineServer();
+
+ LLFloater::draw();
+}
+
+void LLFloaterLagMeter::determineClient()
+{
+ F32Milliseconds client_frame_time = LLTrace::get_frame_recording().getPeriodMean(LLStatViewer::FRAME_STACKTIME);
+ bool find_cause = false;
+
+ if (!gFocusMgr.getAppHasFocus())
+ {
+ mClientButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME));
+ mClientText->setText( getString("client_frame_time_window_bg_msg", mStringArgs) );
+ mClientCause->setText( LLStringUtil::null );
+ }
+ else if(client_frame_time >= mClientFrameTimeCritical)
+ {
+ mClientButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME));
+ mClientText->setText( getString("client_frame_time_critical_msg", mStringArgs) );
+ find_cause = true;
+ }
+ else if(client_frame_time >= mClientFrameTimeWarning)
+ {
+ mClientButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME));
+ mClientText->setText( getString("client_frame_time_warning_msg", mStringArgs) );
+ find_cause = true;
+ }
+ else
+ {
+ mClientButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME));
+ mClientText->setText( getString("client_frame_time_normal_msg", mStringArgs) );
+ mClientCause->setText( LLStringUtil::null );
+ }
+
+ if(find_cause)
+ {
+ if(gSavedSettings.getF32("RenderFarClip") > 128)
+ {
+ mClientCause->setText( getString("client_draw_distance_cause_msg", mStringArgs) );
+ }
+ else if(LLAppViewer::instance()->getTextureFetch()->getNumRequests() > 2)
+ {
+ mClientCause->setText( getString("client_texture_loading_cause_msg", mStringArgs) );
+ }
+ else if(LLViewerTexture::sBoundTextureMemory > LLViewerTexture::sMaxBoundTextureMemory)
+ {
+ mClientCause->setText( getString("client_texture_memory_cause_msg", mStringArgs) );
+ }
+ else
+ {
+ mClientCause->setText( getString("client_complex_objects_cause_msg", mStringArgs) );
+ }
+ }
+}
+
+void LLFloaterLagMeter::determineNetwork()
+{
+ LLTrace::PeriodicRecording& frame_recording = LLTrace::get_frame_recording();
+ F32Percent packet_loss = frame_recording.getPeriodMean(LLStatViewer::PACKETS_LOST_PERCENT);
+ F32Milliseconds ping_time = frame_recording.getPeriodMean(LLStatViewer::SIM_PING);
+ bool find_cause_loss = false;
+ bool find_cause_ping = false;
+
+ // *FIXME: We can't blame a large ping time on anything in
+ // particular if the frame rate is low, because a low frame
+ // rate is a sure recipe for bad ping times right now until
+ // the network handlers are de-synched from the rendering.
+ F32Milliseconds client_frame_time = frame_recording.getPeriodMean(LLStatViewer::FRAME_STACKTIME);
+
+ if(packet_loss >= mNetworkPacketLossCritical)
+ {
+ mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME));
+ mNetworkText->setText( getString("network_packet_loss_critical_msg", mStringArgs) );
+ find_cause_loss = true;
+ }
+ else if(ping_time >= mNetworkPingCritical)
+ {
+ mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME));
+ if (client_frame_time < mNetworkPingCritical)
+ {
+ mNetworkText->setText( getString("network_ping_critical_msg", mStringArgs) );
+ find_cause_ping = true;
+ }
+ }
+ else if(packet_loss >= mNetworkPacketLossWarning)
+ {
+ mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME));
+ mNetworkText->setText( getString("network_packet_loss_warning_msg", mStringArgs) );
+ find_cause_loss = true;
+ }
+ else if(ping_time >= mNetworkPingWarning)
+ {
+ mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME));
+ if (client_frame_time < mNetworkPingWarning)
+ {
+ mNetworkText->setText( getString("network_ping_warning_msg", mStringArgs) );
+ find_cause_ping = true;
+ }
+ }
+ else
+ {
+ mNetworkButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME));
+ mNetworkText->setText( getString("network_performance_normal_msg", mStringArgs) );
+ }
+
+ if(find_cause_loss)
+ {
+ mNetworkCause->setText( getString("network_packet_loss_cause_msg", mStringArgs) );
+ }
+ else if(find_cause_ping)
+ {
+ mNetworkCause->setText( getString("network_ping_cause_msg", mStringArgs) );
+ }
+ else
+ {
+ mNetworkCause->setText( LLStringUtil::null );
+ }
+}
+
+void LLFloaterLagMeter::determineServer()
+{
+ F32Milliseconds sim_frame_time = LLTrace::get_frame_recording().getLastRecording().getLastValue(LLStatViewer::SIM_FRAME_TIME);
+ bool find_cause = false;
+
+ if(sim_frame_time >= mServerFrameTimeCritical)
+ {
+ mServerButton->setImageUnselected(LLUI::getUIImage(LAG_CRITICAL_IMAGE_NAME));
+ mServerText->setText( getString("server_frame_time_critical_msg", mStringArgs) );
+ find_cause = true;
+ }
+ else if(sim_frame_time >= mServerFrameTimeWarning)
+ {
+ mServerButton->setImageUnselected(LLUI::getUIImage(LAG_WARNING_IMAGE_NAME));
+ mServerText->setText( getString("server_frame_time_warning_msg", mStringArgs) );
+ find_cause = true;
+ }
+ else
+ {
+ mServerButton->setImageUnselected(LLUI::getUIImage(LAG_GOOD_IMAGE_NAME));
+ mServerText->setText( getString("server_frame_time_normal_msg", mStringArgs) );
+ mServerCause->setText( LLStringUtil::null );
+ }
+
+ if(find_cause)
+ {
+ LLTrace::Recording& last_recording = LLTrace::get_frame_recording().getLastRecording();
+
+ if(last_recording.getLastValue(LLStatViewer::SIM_PHYSICS_TIME) > mServerSingleProcessMaxTime)
+ {
+ mServerCause->setText( getString("server_physics_cause_msg", mStringArgs) );
+ }
+ else if(last_recording.getLastValue(LLStatViewer::SIM_SCRIPTS_TIME) > mServerSingleProcessMaxTime)
+ {
+ mServerCause->setText( getString("server_scripts_cause_msg", mStringArgs) );
+ }
+ else if(last_recording.getLastValue(LLStatViewer::SIM_NET_TIME) > mServerSingleProcessMaxTime)
+ {
+ mServerCause->setText( getString("server_net_cause_msg", mStringArgs) );
+ }
+ else if(last_recording.getLastValue(LLStatViewer::SIM_AGENTS_TIME) > mServerSingleProcessMaxTime)
+ {
+ mServerCause->setText( getString("server_agent_cause_msg", mStringArgs) );
+ }
+ else if(last_recording.getLastValue(LLStatViewer::SIM_IMAGES_TIME) > mServerSingleProcessMaxTime)
+ {
+ mServerCause->setText( getString("server_images_cause_msg", mStringArgs) );
+ }
+ else
+ {
+ mServerCause->setText( getString("server_generic_cause_msg", mStringArgs) );
+ }
+ }
+}
+
+void LLFloaterLagMeter::updateControls(bool shrink)
+{
+// LLFloaterLagMeter * self = (LLFloaterLagMeter*)data;
+
+ LLButton * button = getChild("minimize");
+ S32 delta_width = mMaxWidth -mMinWidth;
+ LLRect r = getRect();
+
+ if(!shrink)
+ {
+ setTitle(getString("max_title_msg", mStringArgs) );
+ // make left edge appear to expand
+ r.translate(-delta_width, 0);
+ setRect(r);
+ reshape(mMaxWidth, getRect().getHeight());
+
+ getChild("client")->setValue(getString("client_text_msg", mStringArgs) + ":");
+ getChild("network")->setValue(getString("network_text_msg",mStringArgs) + ":");
+ getChild("server")->setValue(getString("server_text_msg", mStringArgs) + ":");
+
+ // usually "<<"
+ button->setLabel( getString("smaller_label", mStringArgs) );
+ }
+ else
+ {
+ setTitle( getString("min_title_msg", mStringArgs) );
+ // make left edge appear to collapse
+ r.translate(delta_width, 0);
+ setRect(r);
+ reshape(mMinWidth, getRect().getHeight());
+
+ getChild("client")->setValue(getString("client_text_msg", mStringArgs) );
+ getChild("network")->setValue(getString("network_text_msg",mStringArgs) );
+ getChild("server")->setValue(getString("server_text_msg", mStringArgs) );
+
+ // usually ">>"
+ button->setLabel( getString("bigger_label", mStringArgs) );
+ }
+ // Don't put keyboard focus on the button
+ button->setFocus(FALSE);
+
+// self->mClientText->setVisible(self->mShrunk);
+// self->mClientCause->setVisible(self->mShrunk);
+// self->getChildView("client_help")->setVisible( self->mShrunk);
+
+// self->mNetworkText->setVisible(self->mShrunk);
+// self->mNetworkCause->setVisible(self->mShrunk);
+// self->getChildView("network_help")->setVisible( self->mShrunk);
+
+// self->mServerText->setVisible(self->mShrunk);
+// self->mServerCause->setVisible(self->mShrunk);
+// self->getChildView("server_help")->setVisible( self->mShrunk);
+
+// self->mShrunk = !self->mShrunk;
+}
+
+BOOL LLFloaterLagMeter::isShrunk()
+{
+ return gSavedSettings.getBOOL("LagMeterShrunk");
+}
+
+void LLFloaterLagMeter::onClickShrink() // toggle "LagMeterShrunk"
+{
+ bool shrunk = isShrunk();
+ updateControls(!shrunk);
+ gSavedSettings.setBOOL("LagMeterShrunk", !shrunk);
+}
diff --git a/indra/newview/llfloaterlagmeter.h b/indra/newview/llfloaterlagmeter.h
new file mode 100644
index 0000000000..929ea40629
--- /dev/null
+++ b/indra/newview/llfloaterlagmeter.h
@@ -0,0 +1,80 @@
+/**
+ * @file llfloaterlagmeter.h
+ * @brief The "Lag-o-Meter" floater used to tell users what is causing lag.
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LLFLOATERLAGMETER_H
+#define LLFLOATERLAGMETER_H
+
+#include "llfloater.h"
+
+class LLTextBox;
+
+class LLFloaterLagMeter : public LLFloater
+{
+ friend class LLFloaterReg;
+
+public:
+ /*virtual*/ void draw();
+ /*virtual*/ BOOL postBuild();
+private:
+
+ LLFloaterLagMeter(const LLSD& key);
+ /*virtual*/ ~LLFloaterLagMeter();
+ void determineClient();
+ void determineNetwork();
+ void determineServer();
+ void updateControls(bool shrink);
+ BOOL isShrunk();
+
+ void onClickShrink();
+
+ bool mShrunk;
+ S32 mMaxWidth, mMinWidth;
+
+ F32Milliseconds mClientFrameTimeCritical;
+ F32Milliseconds mClientFrameTimeWarning;
+ LLButton* mClientButton;
+ LLTextBox* mClientText;
+ LLTextBox* mClientCause;
+
+ F32Percent mNetworkPacketLossCritical;
+ F32Percent mNetworkPacketLossWarning;
+ F32Milliseconds mNetworkPingCritical;
+ F32Milliseconds mNetworkPingWarning;
+ LLButton* mNetworkButton;
+ LLTextBox* mNetworkText;
+ LLTextBox* mNetworkCause;
+
+ F32Milliseconds mServerFrameTimeCritical;
+ F32Milliseconds mServerFrameTimeWarning;
+ F32Milliseconds mServerSingleProcessMaxTime;
+ LLButton* mServerButton;
+ LLTextBox* mServerText;
+ LLTextBox* mServerCause;
+
+ LLStringUtil::format_map_t mStringArgs;
+};
+
+#endif
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 6c31218a7a..61d385891d 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -3014,10 +3014,16 @@ void LLPanelLandAccess::callbackAvatarCBAccess(const uuid_vec_t& ids)
{
LLUUID id = ids[0];
LLParcel* parcel = mParcel->getParcel();
- if (parcel)
+ if (parcel && parcel->addToAccessList(id, 0))
{
- parcel->addToAccessList(id, 0);
- LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_ACCESS);
+ U32 lists_to_update = AL_ACCESS;
+ // agent was successfully added to access list
+ // but we also need to check ban list to ensure that agent will not be in two lists simultaneously
+ if(parcel->removeFromBanList(id))
+ {
+ lists_to_update |= AL_BAN;
+ }
+ LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
refresh();
}
}
@@ -3066,10 +3072,16 @@ void LLPanelLandAccess::callbackAvatarCBBanned(const uuid_vec_t& ids)
{
LLUUID id = ids[0];
LLParcel* parcel = mParcel->getParcel();
- if (parcel)
+ if (parcel && parcel->addToBanList(id, 0))
{
- parcel->addToBanList(id, 0);
- LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(AL_BAN);
+ U32 lists_to_update = AL_BAN;
+ // agent was successfully added to ban list
+ // but we also need to check access list to ensure that agent will not be in two lists simultaneously
+ if (parcel->removeFromAccessList(id))
+ {
+ lists_to_update |= AL_ACCESS;
+ }
+ LLViewerParcelMgr::getInstance()->sendParcelAccessListUpdate(lists_to_update);
refresh();
}
}
diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp
index d21934abd6..e1a85a75a0 100755
--- a/indra/newview/llfloatersidepanelcontainer.cpp
+++ b/indra/newview/llfloatersidepanelcontainer.cpp
@@ -61,7 +61,7 @@ void LLFloaterSidePanelContainer::onOpen(const LLSD& key)
getChild(sMainPanelName)->onOpen(key);
}
-void LLFloaterSidePanelContainer::onClickCloseBtn(bool)
+void LLFloaterSidePanelContainer::closeFloater(bool app_quitting)
{
LLPanelOutfitEdit* panel_outfit_edit =
dynamic_cast(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit"));
@@ -79,7 +79,7 @@ void LLFloaterSidePanelContainer::onClickCloseBtn(bool)
}
}
- LLFloater::onClickCloseBtn();
+ LLFloater::closeFloater(app_quitting);
}
LLPanel* LLFloaterSidePanelContainer::openChildPanel(const std::string& panel_name, const LLSD& params)
diff --git a/indra/newview/llfloatersidepanelcontainer.h b/indra/newview/llfloatersidepanelcontainer.h
index 0aa660a162..f125bb9461 100755
--- a/indra/newview/llfloatersidepanelcontainer.h
+++ b/indra/newview/llfloatersidepanelcontainer.h
@@ -51,7 +51,7 @@ public:
/*virtual*/ void onOpen(const LLSD& key);
- /*virtual*/ void onClickCloseBtn(bool app_quitting = false);
+ /*virtual*/ void closeFloater(bool app_quitting = false);
LLPanel* openChildPanel(const std::string& panel_name, const LLSD& params);
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index c4f52edb48..01d3f4f813 100755
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -1114,6 +1114,9 @@ void LLFloaterTools::onClose(bool app_quitting)
// hide the advanced object weights floater
LLFloaterReg::hideInstance("object_weights");
+
+ // prepare content for next call
+ mPanelContents->clearContents();
}
void click_popup_info(void*)
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
index e26f1e9ea5..e02e8eeb5a 100755
--- a/indra/newview/llfloaterurlentry.cpp
+++ b/indra/newview/llfloaterurlentry.cpp
@@ -204,6 +204,10 @@ void LLFloaterURLEntry::onBtnOK( void* userdata )
LLURLHistory::addURL("parcel", media_url);
}
+ // show progress bar here?
+ getWindow()->incBusyCount();
+ self->getChildView("loading_label")->setVisible( true);
+
// leading whitespace causes problems with the MIME-type detection so strip it
LLStringUtil::trim( media_url );
@@ -233,10 +237,6 @@ void LLFloaterURLEntry::onBtnOK( void* userdata )
self->getChildView("ok_btn")->setEnabled(false);
self->getChildView("cancel_btn")->setEnabled(false);
self->getChildView("media_entry")->setEnabled(false);
-
- // show progress bar here?
- getWindow()->incBusyCount();
- self->getChildView("loading_label")->setVisible( true);
}
// static
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
index 220a120922..850146f3c2 100755
--- a/indra/newview/llfloaterwebcontent.cpp
+++ b/indra/newview/llfloaterwebcontent.cpp
@@ -299,15 +299,8 @@ void LLFloaterWebContent::onOpen(const LLSD& key)
void LLFloaterWebContent::onClose(bool app_quitting)
{
// If we close the web browsing window showing the facebook login, we need to signal to this object that the connection will not happen
-
- // FIRE-12220; using getInstance can lead to endless recursion if the floater is not open, then gets created by getInstance, gets closed due to too many open
- // webbrowsers and then calls getInstance once again in onClose.
-
- // LLFloater* fbc_web = LLFloaterReg::getInstance("fbc_web");
LLFloater* fbc_web = LLFloaterReg::findInstance("fbc_web");
- //
-
if (fbc_web == this)
{
if (!LLFacebookConnect::instance().isConnected())
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index 1922f0d9e1..5f5afe82c4 100755
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -1423,10 +1423,7 @@ BOOL LLGestureMgr::matchPrefix(const std::string& in_str, std::string* out_str)
}
if (rest_of_match.compare("") == 0)
{
- //
- // return FALSE;
return TRUE;
- //
}
if (buf.compare("") != 0)
{
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index c710d80550..d530cbd851 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -126,6 +126,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
void teleport_via_landmark(const LLUUID& asset_id);
static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
+static BOOL can_move_to_landmarks(LLInventoryItem* inv_item);
// Function left unused from FIRE-7219
//static bool check_category(LLInventoryModel* model,
// const LLUUID& cat_id,
@@ -2477,14 +2478,19 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
&& (LLToolDragAndDrop::SOURCE_AGENT == source);
BOOL accept = FALSE;
+ U64 filter_types = filter->getFilterTypes();
+ BOOL use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0);
+
if (is_agent_inventory)
{
const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false);
// FIRE-1392: Allow dragging all asset types into Landmarks folder
//const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
+ const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id);
- const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT);
+ const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
+ const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
// FIRE-1392: Allow dragging all asset types into Landmarks folder
//const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
@@ -2536,6 +2542,29 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
+ U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
+ if (is_movable
+ && move_is_into_current_outfit
+ && descendent_items.size() > max_items_to_wear)
+ {
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
+ gInventory.collectDescendentsIf(cat_id,
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ not_worn);
+
+ if (items.size() > max_items_to_wear)
+ {
+ // Can't move 'large' folders into current outfit: MAINT-4086
+ is_movable = FALSE;
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", max_items_to_wear);
+ tooltip_msg = LLTrans::getString("TooltipTooManyWearables",args);
+ }
+ }
if (is_movable && move_is_into_trash)
{
for (S32 i=0; i < descendent_items.size(); ++i)
@@ -2679,7 +2708,7 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
is_movable = active_folder_view != NULL;
}
- if (is_movable)
+ if (is_movable && use_filter)
{
// Check whether the folder being dragged from active inventory panel
// passes the filter of the destination panel.
@@ -2826,6 +2855,12 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
BOOL accept = FALSE;
BOOL is_move = FALSE;
+ BOOL use_filter = FALSE;
+ if (filter)
+ {
+ U64 filter_types = filter->getFilterTypes();
+ use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0);
+ }
// coming from a task. Need to figure out if the person can
// move/copy this item.
@@ -2858,7 +2893,7 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
accept = TRUE;
}
- if (filter && accept)
+ if (accept && use_filter)
{
accept = filter->check(item);
}
@@ -3071,10 +3106,7 @@ void LLInventoryCopyAndWearObserver::changed(U32 mask)
mContentsCount)
{
gInventory.removeObserver(this);
- // FIRE-938: "copy and wear" does replace
- //LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, FALSE);
LLAppearanceMgr::instance().wearInventoryCategory(category, FALSE, TRUE);
- //
delete this;
}
}
@@ -3092,7 +3124,7 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action)
LLFolderViewFolder *f = dynamic_cast(mInventoryPanel.get()->getItemByID(mUUID));
if (f)
{
- f->setOpen(TRUE);
+ f->toggleOpen();
}
return;
@@ -3418,10 +3450,14 @@ void LLFolderBridge::pasteFromClipboard()
{
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
+ const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false);
+ const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
- const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+ const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
+ const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
+ const BOOL move_is_into_favorites = (mUUID == favorites_id);
std::vector objects;
LLClipboard::instance().pasteFromClipboard(objects);
@@ -3479,11 +3515,18 @@ void LLFolderBridge::pasteFromClipboard()
{
if (move_is_into_current_outfit || move_is_into_outfit)
{
- if (can_move_to_outfit(item, move_is_into_current_outfit))
+ if (item && can_move_to_outfit(item, move_is_into_current_outfit))
{
dropToOutfit(item, move_is_into_current_outfit);
}
}
+ else if (move_is_into_favorites)
+ {
+ if (item && can_move_to_landmarks(item))
+ {
+ dropToFavorites(item);
+ }
+ }
else if (LLClipboard::instance().isCutMode())
{
// Do a move to "paste" a "cut"
@@ -3561,9 +3604,11 @@ void LLFolderBridge::pasteLinkFromClipboard()
{
const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false);
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
+ const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
- const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+ const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
+ const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
if (move_is_into_outbox)
@@ -4118,6 +4163,28 @@ void LLFolderBridge::modifyOutfit(BOOL append, BOOL replace)
LLViewerInventoryCategory* cat = getCategory();
if(!cat) return;
+ // checking amount of items to wear
+ U32 max_items = gSavedSettings.getU32("WearFolderLimit");
+ if (cat->getDescendentCount() > max_items)
+ {
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
+ gInventory.collectDescendentsIf(cat->getUUID(),
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ not_worn);
+
+ if (items.size() > max_items)
+ {
+ LLSD args;
+ args["AMOUNT"] = llformat("%d", max_items);
+ LLNotificationsUtil::add("TooManyWearables", args);
+ return;
+ }
+ }
+
LLAppearanceMgr::instance().wearInventoryCategory( cat, FALSE, append, replace );
}
@@ -4177,6 +4244,12 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
return FALSE;
}
+ U32 flags = inv_item->getFlags();
+ if(flags & LLInventoryItemFlags::II_FLAGS_OBJECT_HAS_MULTIPLE_ITEMS)
+ {
+ return FALSE;
+ }
+
if (move_is_into_current_outfit && get_is_item_worn(inv_item->getUUID()))
{
return FALSE;
@@ -4266,10 +4339,12 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// FIRE-1392: Allow dragging all asset types into Landmarks folder
//const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false);
const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false);
+ const LLUUID &my_outifts_id = model->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS, false);
const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id);
const BOOL move_is_into_favorites = (mUUID == favorites_id);
- const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
+ const BOOL move_is_into_my_outfits = (mUUID == my_outifts_id) || model->isObjectDescendentOf(mUUID, my_outifts_id);
+ const BOOL move_is_into_outfit = move_is_into_my_outfits || (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT);
// FIRE-1392: Allow dragging all asset types into Landmarks folder
//const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id);
const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id);
@@ -4277,6 +4352,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource();
BOOL accept = FALSE;
+ U64 filter_types = filter->getFilterTypes();
+ // We shouldn't allow to drop non recent items into recent tab (or some similar transactions)
+ // while we are allowing to interact with regular filtered inventory
+ BOOL use_filter = filter_types && (filter_types&LLInventoryFilter::FILTERTYPE_DATE || (filter_types&LLInventoryFilter::FILTERTYPE_OBJECT)==0);
LLViewerObject* object = NULL;
if(LLToolDragAndDrop::SOURCE_AGENT == source)
{
@@ -4397,7 +4476,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// Check whether the item being dragged from active inventory panel
// passes the filter of the destination panel.
// Allow drag and drop in inventory regardless of filter (e.g. Recent)
- //if (accept && active_panel)
+ //if (accept && active_panel && use_filter)
//{
// LLFolderViewItem* fv_item = active_panel->getItemByID(inv_item->getUUID());
// if (!fv_item) return false;
@@ -4540,7 +4619,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// Check whether the item being dragged from in world
// passes the filter of the destination panel.
// Allow dropping from inworld objects regardless of filter
- //if (accept)
+ //if (accept && use_filter)
//{
// accept = filter->check(inv_item);
//}
@@ -4586,7 +4665,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// Check whether the item being dragged from notecard
// passes the filter of the destination panel.
// Allow dropping from notecards regardless of filter
- //if (accept)
+ //if (accept && use_filter)
//{
// accept = filter->check(inv_item);
//}
@@ -4630,7 +4709,7 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item,
// Check whether the item being dragged from the library
// passes the filter of the destination panel.
- if (accept && active_panel)
+ if (accept && active_panel && use_filter)
{
LLFolderViewItem* fv_item = active_panel->getItemByID(inv_item->getUUID());
if (!fv_item) return false;
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
index 3212b05742..2982f0b0a5 100755
--- a/indra/newview/llinventorybridge.h
+++ b/indra/newview/llinventorybridge.h
@@ -168,7 +168,6 @@ protected:
BOOL isProtectedFolder(bool ignore_setting = false) const;
//
BOOL isInboxFolder() const; // true if COF or descendent of marketplace inbox
- BOOL isOutboxFolder() const; // true if COF or descendent of marketplace outbox
BOOL isOutboxFolderDirectParent() const;
const LLUUID getOutboxFolder() const;
@@ -188,6 +187,10 @@ protected:
const LLUUID& new_parent,
BOOL restamp);
void removeBatchNoCheck(std::vector& batch);
+
+public:
+ BOOL isOutboxFolder() const; // true if COF or descendant of marketplace outbox
+
protected:
LLHandle mInventoryPanel;
LLFolderView* mRoot;
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index c02a1e7551..4c5099ae20 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -280,6 +280,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
// Pass if this item's type is of the correct filter type
if (filterTypes & FILTERTYPE_OBJECT)
{
+
// If it has no type, pass it, unless it's a link.
if (object_type == LLInventoryType::IT_NONE)
{
@@ -373,13 +374,25 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
bool is_hidden_if_empty = LLViewerFolderType::lookupIsHiddenIfEmpty(listener->getPreferredType());
if (is_hidden_if_empty)
{
- // Force the fetching of those folders so they are hidden iff they really are empty...
+ // Force the fetching of those folders so they are hidden if they really are empty...
gInventory.fetchDescendentsOf(object_id);
- return FALSE;
+
+ LLInventoryModel::cat_array_t* cat_array = NULL;
+ LLInventoryModel::item_array_t* item_array = NULL;
+ gInventory.getDirectDescendentsOf(object_id,cat_array,item_array);
+ S32 descendents_actual = 0;
+ if(cat_array && item_array)
+ {
+ descendents_actual = cat_array->size() + item_array->size();
+ }
+ if (descendents_actual == 0)
+ {
+ return FALSE;
+ }
}
}
}
-
+
return TRUE;
}
@@ -1243,6 +1256,11 @@ void LLInventoryFilter::fromParams(const Params& params)
//
}
+U64 LLInventoryFilter::getFilterTypes() const
+{
+ return mFilterOps.mFilterTypes;
+}
+
U64 LLInventoryFilter::getFilterObjectTypes() const
{
return mFilterOps.mFilterObjectTypes;
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index 617667ca53..c0155a5ca8 100755
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -172,6 +172,7 @@ public:
// +-------------------------------------------------------------------+
// + Parameters
// +-------------------------------------------------------------------+
+ U64 getFilterTypes() const;
U64 getFilterObjectTypes() const;
U64 getFilterCategoryTypes() const;
U64 getFilterWearableTypes() const;
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 972b9ee862..69f364f323 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -953,19 +953,10 @@ bool LLFindWearablesEx::operator()(LLInventoryCategory* cat, LLInventoryItem* it
if (!vitem) return false;
// Skip non-wearables.
- // FIRE-1256 fix
- /*if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT)
+ if (!vitem->isWearableType() && vitem->getType() != LLAssetType::AT_OBJECT && vitem->getType() != LLAssetType::AT_GESTURE)
{
return false;
- }*/
- if (!vitem->isWearableType())
- {
- if((vitem->getType() != LLAssetType::AT_OBJECT) && (vitem->getType() != LLAssetType::AT_GESTURE))
- {
- return false;
- }
}
- //
// Skip body parts if requested.
if (!mIncludeBodyParts && vitem->getType() == LLAssetType::AT_BODYPART)
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index b03a3d40cf..4cc0bc5452 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -365,7 +365,9 @@ LLInventoryFilter& LLInventoryPanel::getFilter()
void LLInventoryPanel::setFilterTypes(U64 types, LLInventoryFilter::EFilterType filter_type)
{
if (filter_type == LLInventoryFilter::FILTERTYPE_OBJECT)
+ {
getFilter().setFilterObjectTypes(types);
+ }
if (filter_type == LLInventoryFilter::FILTERTYPE_CATEGORY)
getFilter().setFilterCategoryTypes(types);
}
@@ -634,6 +636,22 @@ void LLInventoryPanel::modelChanged(U32 mask)
}
}
}
+
+ if (mask & (LLInventoryObserver::STRUCTURE | LLInventoryObserver::REMOVE))
+ {
+ // STRUCTURE and REMOVE model changes usually fail to update (clean)
+ // mMostFilteredDescendantGeneration of parent folder and dirtyFilter()
+ // is not sufficient for successful filter update, so we need to check
+ // all already passed element over again to remove obsolete elements.
+ // New items or moved items should be sufficiently covered by
+ // dirtyFilter().
+ LLInventoryFilter& filter = getFilter();
+ if (filter.getFilterTypes() & LLInventoryFilter::FILTERTYPE_DATE
+ || filter.isNotDefault())
+ {
+ filter.setModified(LLFolderViewFilter::FILTER_MORE_RESTRICTIVE);
+ }
+ }
}
LLUUID LLInventoryPanel::getRootFolderID()
@@ -1544,6 +1562,17 @@ BOOL LLInventoryPanel::handleKeyHere( KEY key, MASK mask )
// Open selected items if enter key hit on the inventory panel
if (mask == MASK_NONE)
{
+ //Don't allow attaching or opening items from Merchant Outbox
+ LLFolderViewItem* folder_item = mFolderRoot.get()->getCurSelectedItem();
+ if(folder_item)
+ {
+ LLInvFVBridge* bridge = (LLInvFVBridge*)folder_item->getViewModelItem();
+ if(bridge && bridge->isOutboxFolder() && (bridge->getInventoryType() != LLInventoryType::IT_CATEGORY))
+ {
+ return handled;
+ }
+ }
+
LLInventoryAction::doToSelected(mInventory, mFolderRoot.get(), "open");
handled = TRUE;
}
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
index 6ed5270b6e..3bde61997e 100755
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -61,7 +61,9 @@
#include "llnotificationsutil.h"
#include "pipeline.h"
#include "llmaterialmgr.h"
-
+#include "llimagedimensionsinfo.h"
+#include "llviewercontrol.h"
+#include "lltrans.h"
/*=======================================*/
/* Formal declarations, constants, etc. */
/*=======================================*/
@@ -854,6 +856,12 @@ bool LLLocalBitmapMgr::addUnit()
std::string filename = picker.getFirstFile();
while(!filename.empty())
{
+ if(!checkTextureDimensions(filename))
+ {
+ filename = picker.getNextFile();
+ continue;
+ }
+
LLLocalBitmap* unit = new LLLocalBitmap(filename);
if (unit->getValid())
@@ -883,6 +891,37 @@ bool LLLocalBitmapMgr::addUnit()
return add_successful;
}
+bool LLLocalBitmapMgr::checkTextureDimensions(std::string filename)
+{
+ std::string exten = gDirUtilp->getExtension(filename);
+ U32 codec = LLImageBase::getCodecFromExtension(exten);
+ std::string mImageLoadError;
+ LLImageDimensionsInfo image_info;
+ if (!image_info.load(filename,codec))
+ {
+ return false;
+ }
+
+ S32 max_width = gSavedSettings.getS32("max_texture_dimension_X");
+ S32 max_height = gSavedSettings.getS32("max_texture_dimension_Y");
+
+ if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height))
+ {
+ LLStringUtil::format_map_t args;
+ args["WIDTH"] = llformat("%d", max_width);
+ args["HEIGHT"] = llformat("%d", max_height);
+ mImageLoadError = LLTrans::getString("texture_load_dimensions_error", args);
+
+ LLSD notif_args;
+ notif_args["REASON"] = mImageLoadError;
+ LLNotificationsUtil::add("CannotUploadTexture", notif_args);
+
+ return false;
+ }
+
+ return true;
+}
+
void LLLocalBitmapMgr::delUnit(LLUUID tracking_id)
{
if (!sBitmapList.empty())
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
index a15ea10801..59467922b4 100755
--- a/indra/newview/lllocalbitmaps.h
+++ b/indra/newview/lllocalbitmaps.h
@@ -120,6 +120,7 @@ class LLLocalBitmapMgr
static void cleanupClass();
static bool addUnit();
static void delUnit(LLUUID tracking_id);
+ static bool checkTextureDimensions(std::string filename);
static LLUUID getWorldID(LLUUID tracking_id);
static std::string getFilename(LLUUID tracking_id);
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
index 5cebd34d1a..1590253446 100755
--- a/indra/newview/llmanip.cpp
+++ b/indra/newview/llmanip.cpp
@@ -64,7 +64,7 @@ F32 LLManip::sHelpTextFadeTime = 2.f;
S32 LLManip::sNumTimesHelpTextShown = 0;
S32 LLManip::sMaxTimesShowHelpText = 5;
F32 LLManip::sGridMaxSubdivisionLevel = 32.f;
-F32 LLManip::sGridMinSubdivisionLevel = 1.f;
+F32 LLManip::sGridMinSubdivisionLevel = 1.f / 32.f;
LLVector2 LLManip::sTickLabelSpacing(60.f, 25.f);
@@ -178,7 +178,7 @@ BOOL LLManip::getManipAxis(LLViewerObject* object, EManipPart manip, LLVector3 &
return TRUE;
}
-F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing)
+F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing, F32 min_subdivisions, F32 max_subdivisions)
{
//update current snap subdivision level
LLVector3 cam_to_reference;
@@ -194,7 +194,8 @@ F32 LLManip::getSubdivisionLevel(const LLVector3 &reference_point, const LLVecto
F32 projected_translation_axis_length = (translate_axis % cam_to_reference).magVec();
F32 subdivisions = llmax(projected_translation_axis_length * grid_scale / (current_range / LLViewerCamera::getInstance()->getPixelMeterRatio() * min_pixel_spacing), 0.f);
- subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), 1.f / 32.f, 32.f);
+ // figure out nearest power of 2 that subdivides grid_scale with result > min_pixel_spacing
+ subdivisions = llclamp((F32)pow(2.f, llfloor(log(subdivisions) / log(2.f))), min_subdivisions, max_subdivisions);
return subdivisions;
}
@@ -596,37 +597,31 @@ void LLManip::renderTickValue(const LLVector3& pos, F32 value, const std::string
BOOL hud_selection = mObjectSelection->getSelectType() == SELECT_TYPE_HUD;
gGL.matrixMode(LLRender::MM_MODELVIEW);
gGL.pushMatrix();
- LLVector3 render_pos = pos;
- if (hud_selection)
{
- F32 zoom_amt = gAgentCamera.mHUDCurZoom;
- F32 inv_zoom_amt = 1.f / zoom_amt;
- // scale text back up to counter-act zoom level
- render_pos = pos * zoom_amt;
- gGL.scalef(inv_zoom_amt, inv_zoom_amt, inv_zoom_amt);
- }
+ LLVector3 render_pos = pos;
+ if (hud_selection)
+ {
+ F32 zoom_amt = gAgentCamera.mHUDCurZoom;
+ F32 inv_zoom_amt = 1.f / zoom_amt;
+ // scale text back up to counter-act zoom level
+ render_pos = pos * zoom_amt;
+ gGL.scalef(inv_zoom_amt, inv_zoom_amt, inv_zoom_amt);
+ }
- LLColor4 shadow_color = LLColor4::black;
- shadow_color.mV[VALPHA] = color.mV[VALPHA] * 0.5f;
+ LLColor4 shadow_color = LLColor4::black;
+ shadow_color.mV[VALPHA] = color.mV[VALPHA] * 0.5f;
- if (fractional_portion != 0)
- {
- fraction_string = llformat("%c%02d%s", LLResMgr::getInstance()->getDecimalPoint(), fractional_portion, suffix.c_str());
+ if (fractional_portion != 0)
+ {
+ fraction_string = llformat("%c%02d%s", LLResMgr::getInstance()->getDecimalPoint(), fractional_portion, suffix.c_str());
- gViewerWindow->setup3DViewport(1, -1);
- hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection);
- hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 1.f, 3.f, shadow_color, hud_selection);
-
- gViewerWindow->setup3DViewport();
- hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection);
- hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, 1.f, 3.f, color, hud_selection);
- }
- else
- {
- gViewerWindow->setup3DViewport(1, -1);
- hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, shadow_color, hud_selection);
- gViewerWindow->setup3DViewport();
- hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection);
+ hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, -1.f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection);
+ hud_render_utf8text(fraction_string, render_pos, *small_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, 1.f, 3.f, color, hud_selection);
+ }
+ else
+ {
+ hud_render_utf8text(val_string, render_pos, *big_fontp, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW, -0.5f * big_fontp->getWidthF32(val_string), 3.f, color, hud_selection);
+ }
}
gGL.popMatrix();
}
diff --git a/indra/newview/llmanip.h b/indra/newview/llmanip.h
index 6263e4244f..1fb05e047a 100755
--- a/indra/newview/llmanip.h
+++ b/indra/newview/llmanip.h
@@ -137,7 +137,7 @@ protected:
LLVector3 getPivotPoint();
void getManipNormal(LLViewerObject* object, EManipPart manip, LLVector3 &normal);
BOOL getManipAxis(LLViewerObject* object, EManipPart manip, LLVector3 &axis);
- F32 getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing = MIN_DIVISION_PIXEL_WIDTH);
+ F32 getSubdivisionLevel(const LLVector3 &reference_point, const LLVector3 &translate_axis, F32 grid_scale, S32 min_pixel_spacing = MIN_DIVISION_PIXEL_WIDTH, F32 min_subdivisions = sGridMinSubdivisionLevel, F32 max_subdivisions = sGridMaxSubdivisionLevel);
void renderTickValue(const LLVector3& pos, F32 value, const std::string& suffix, const LLColor4 &color);
void renderTickText(const LLVector3& pos, const std::string& suffix, const LLColor4 &color);
void updateGridSettings();
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
index beaf91fbfe..e7460479e1 100755
--- a/indra/newview/llmaniptranslate.cpp
+++ b/indra/newview/llmaniptranslate.cpp
@@ -378,7 +378,7 @@ BOOL LLManipTranslate::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
//LLVector3 select_center_agent = gAgent.getPosAgentFromGlobal(LLSelectMgr::getInstance()->getSelectionCenterGlobal());
// TomY: The above should (?) be identical to the below
LLVector3 select_center_agent = getPivotPoint();
- mSubdivisions = llclamp(getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
+ mSubdivisions = getSubdivisionLevel(select_center_agent, axis_exists ? axis : LLVector3::z_axis, getMinGridScale());
// if we clicked on a planar manipulator, recenter mouse cursor
if (mManipPart >= LL_YZ_PLANE && mManipPart <= LL_XY_PLANE)
@@ -532,7 +532,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
LLSelectMgr::getInstance()->updateSelectionCenter();
LLVector3d current_pos_global = gAgent.getPosGlobalFromAgent(getPivotPoint());
- mSubdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
+ mSubdivisions = getSubdivisionLevel(getPivotPoint(), axis_f, getMinGridScale());
// Project the cursor onto that plane
LLVector3d relative_move;
@@ -627,7 +627,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
max_grid_scale = mGridScale.mV[VZ];
}
- F32 num_subdivisions = llclamp(getSubdivisionLevel(getPivotPoint(), camera_projected_dir, max_grid_scale), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
+ F32 num_subdivisions = getSubdivisionLevel(getPivotPoint(), camera_projected_dir, max_grid_scale);
F32 grid_scale_a;
F32 grid_scale_b;
@@ -1281,6 +1281,7 @@ void LLManipTranslate::renderSnapGuides()
for (S32 pass = 0; pass < 3; pass++)
{
LLColor4 line_color = setupSnapGuideRenderPass(pass);
+ LLGLDepthTest gls_depth(pass != 1);
gGL.begin(LLRender::LINES);
{
@@ -1312,7 +1313,7 @@ void LLManipTranslate::renderSnapGuides()
{
tick_start = selection_center + (translate_axis * (smallest_grid_unit_scale * (F32)i - offset_nearest_grid_unit));
- F32 cur_subdivisions = llclamp(getSubdivisionLevel(tick_start, translate_axis, getMinGridScale()), sGridMinSubdivisionLevel, sGridMaxSubdivisionLevel);
+ F32 cur_subdivisions = getSubdivisionLevel(tick_start, translate_axis, getMinGridScale());
if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / cur_subdivisions)) != 0.f)
{
@@ -1410,7 +1411,7 @@ void LLManipTranslate::renderSnapGuides()
tick_scale *= 0.7f;
}
- if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / llmin(sGridMaxSubdivisionLevel, getSubdivisionLevel(tick_pos, translate_axis, getMinGridScale(), tick_label_spacing)))) == 0.f)
+ if (fmodf((F32)(i + sub_div_offset), (max_subdivisions / getSubdivisionLevel(tick_pos, translate_axis, getMinGridScale(), tick_label_spacing))) == 0.f)
{
F32 snap_offset_meters;
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index f0d1cf82da..bbdbae9e78 100755
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -524,6 +524,16 @@ void LLMediaCtrl::navigateForward()
}
}
+////////////////////////////////////////////////////////////////////////////////
+//
+void LLMediaCtrl::navigateStop()
+{
+ if (mMediaSource && mMediaSource->hasMedia())
+ {
+ mMediaSource->getMediaPlugin()->browse_stop();
+ }
+}
+
////////////////////////////////////////////////////////////////////////////////
//
bool LLMediaCtrl::canNavigateBack()
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index cb046fc509..6c00718c23 100755
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -99,6 +99,7 @@ public:
void navigateBack();
void navigateHome();
void navigateForward();
+ void navigateStop();
void navigateToLocalPage( const std::string& subdir, const std::string& filename_in );
bool canNavigateBack();
bool canNavigateForward();
diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp
index 2923221c90..e9970de58c 100755
--- a/indra/newview/llnotificationstorage.cpp
+++ b/indra/newview/llnotificationstorage.cpp
@@ -103,19 +103,21 @@ bool LLNotificationStorage::writeNotifications(const LLSD& pNotificationData) co
return didFileOpen;
}
-bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const
+bool LLNotificationStorage::readNotifications(LLSD& pNotificationData, bool is_new_filename) const
{
- LL_INFOS("LLNotificationStorage") << "starting read '" << mFileName << "'" << LL_ENDL;
+ std::string filename = is_new_filename? mFileName : mOldFileName;
+
+ LL_INFOS("LLNotificationStorage") << "starting read '" << filename << "'" << LL_ENDL;
bool didFileRead;
pNotificationData.clear();
- llifstream notifyFile(mFileName.c_str());
+ llifstream notifyFile(filename.c_str());
didFileRead = notifyFile.is_open();
if (!didFileRead)
{
- LL_WARNS("LLNotificationStorage") << "Failed to open file '" << mFileName << "'" << LL_ENDL;
+ LL_WARNS("LLNotificationStorage") << "Failed to open file '" << filename << "'" << LL_ENDL;
}
else
{
@@ -128,7 +130,19 @@ bool LLNotificationStorage::readNotifications(LLSD& pNotificationData) const
}
}
- LL_INFOS("LLNotificationStorage") << "ending read '" << mFileName << "'" << LL_ENDL;
+ LL_INFOS("LLNotificationStorage") << "ending read '" << filename << "'" << LL_ENDL;
+ if (!didFileRead)
+ {
+ if(is_new_filename)
+ {
+ didFileRead = readNotifications(pNotificationData, false);
+ if(didFileRead)
+ {
+ writeNotifications(pNotificationData);
+ LLFile::remove(mOldFileName);
+ }
+ }
+ }
return didFileRead;
}
diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h
index 53fd898ea4..21d7123747 100755
--- a/indra/newview/llnotificationstorage.h
+++ b/indra/newview/llnotificationstorage.h
@@ -43,13 +43,15 @@ public:
protected:
bool writeNotifications(const LLSD& pNotificationData) const;
- bool readNotifications(LLSD& pNotificationData) const;
+ bool readNotifications(LLSD& pNotificationData, bool is_new_filename = true) const;
void setFileName(std::string pFileName) {mFileName = pFileName;}
+ void setOldFileName(std::string pFileName) {mOldFileName = pFileName;}
LLNotificationResponderInterface* createResponder(const std::string& pNotificationName, const LLSD& pParams) const;
private:
std::string mFileName;
+ std::string mOldFileName;
};
#endif // LL_NOTIFICATIONSTORAGE_H
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
index bf300caacc..aa3ddd6cb0 100755
--- a/indra/newview/llpanelcontents.cpp
+++ b/indra/newview/llpanelcontents.cpp
@@ -177,6 +177,13 @@ void LLPanelContents::refresh()
}
}
+void LLPanelContents::clearContents()
+{
+ if (mPanelInventoryObject)
+ {
+ mPanelInventoryObject->clearInventoryTask();
+ }
+}
//
diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h
index f9e7a26c72..69a3570762 100755
--- a/indra/newview/llpanelcontents.h
+++ b/indra/newview/llpanelcontents.h
@@ -48,6 +48,7 @@ public:
virtual ~LLPanelContents();
void refresh();
+ void clearContents();
static void onClickNewScript(void*);
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index d03bc7dd07..417e161a5e 100755
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -865,10 +865,8 @@ void LLPanelEditWearable::draw()
void LLPanelEditWearable::onClose()
{
- if ( isDirty() )
- {
- revertChanges();
- }
+ // any unsaved changes should be reverted at this point
+ revertChanges();
}
void LLPanelEditWearable::setVisible(BOOL visible)
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
index 8e25e137a3..b551de1a6a 100755
--- a/indra/newview/llpanelgrouproles.cpp
+++ b/indra/newview/llpanelgrouproles.cpp
@@ -2901,7 +2901,7 @@ void LLPanelGroupActionsSubTab::setGroupID(const LLUUID& id)
if(mActionMembers) mActionMembers->deleteAllItems();
if(mActionDescription) mActionDescription->clear();
-
+
LLPanelGroupSubTab::setGroupID(id);
}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index f3e30c70b7..5471b7ff81 100755
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -292,11 +292,16 @@ void LLPanelLogin::addUsersWithFavoritesToUsername()
{
LLComboBox* combo = getChild("username_combo");
if (!combo) return;
- std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+ std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
+ std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
LLSD fav_llsd;
llifstream file;
file.open(filename);
- if (!file.is_open()) return;
+ if (!file.is_open())
+ {
+ file.open(old_filename);
+ if (!file.is_open()) return;
+ }
LLSDSerialize::fromXML(fav_llsd, file);
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
@@ -321,6 +326,9 @@ void LLPanelLogin::addFavoritesToStartLocation()
// Load favorites into the combo.
std::string user_defined_name = getChild("username_combo")->getSimple();
// FIRE-10122 - User@grid stored_favorites.xml
+ //std::replace(user_defined_name.begin(), user_defined_name.end(), '.', ' ');
+ //std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites_" + LLGridManager::getInstance()->getGrid() + ".xml");
+ //std::string old_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
std::string canonical_user_name = canonicalize_username(user_defined_name);
U32 resident_pos = canonical_user_name.find("Resident");
if (resident_pos > 0)
@@ -330,12 +338,19 @@ void LLPanelLogin::addFavoritesToStartLocation()
std::string current_grid = getChild("server_combo")->getSimple();
std::string current_user = canonical_user_name + " @ " + current_grid;
LL_DEBUGS("Favorites") << "Current user: \"" << current_user << "\"" << LL_ENDL;
-//
std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+//
LLSD fav_llsd;
llifstream file;
file.open(filename);
+// FIRE-10122 - User@grid stored_favorites.xml
+ //if (!file.is_open())
+ //{
+ // file.open(old_filename);
+ // if (!file.is_open()) return;
+ //}
if (!file.is_open()) return;
+//
LLSDSerialize::fromXML(fav_llsd, file);
for (LLSD::map_const_iterator iter = fav_llsd.beginMap();
iter != fav_llsd.endMap(); ++iter)
@@ -344,7 +359,7 @@ void LLPanelLogin::addFavoritesToStartLocation()
// a single word account name, so it can be compared case-insensitive with the
// user defined "firstname lastname".
// FIRE-10122 - User@grid stored_favorites.xml
- //S32 res = LLStringUtil::compareInsensitive(canonical_user_name, iter->first);
+ //S32 res = LLStringUtil::compareInsensitive(user_defined_name, iter->first);
S32 res = LLStringUtil::compareInsensitive(current_user, iter->first);
//
if (res != 0)
@@ -1131,11 +1146,13 @@ void LLPanelLogin::onSelectServer()
// The user twiddled with the grid choice ui.
// apply the selection to the grid setting.
LLPointer credential;
-
+
LLComboBox* server_combo = getChild("server_combo");
LLSD server_combo_val = server_combo->getSelectedValue();
LL_INFOS("AppInit") << "grid "<setGridChoice(server_combo_val.asString());
+ // FIRE-10122 - User@grid stored_favorites.xml
+ //addFavoritesToStartLocation();
/*
* Determine whether or not the value in the start_location_combo makes sense
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index 19383e5696..d9c88b2c40 100755
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -2000,14 +2000,19 @@ void LLPanelObjectInventory::refresh()
}
if(!has_inventory)
{
- mTaskUUID = LLUUID::null;
- removeVOInventoryListener();
- clearContents();
+ clearInventoryTask();
}
mInventoryViewModel.setTaskID(mTaskUUID);
//LL_INFOS() << "LLPanelObjectInventory::refresh() " << mTaskUUID << LL_ENDL;
}
+void LLPanelObjectInventory::clearInventoryTask()
+{
+ mTaskUUID = LLUUID::null;
+ removeVOInventoryListener();
+ clearContents();
+}
+
void LLPanelObjectInventory::removeSelectedItem()
{
if(mFolders)
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
index b337e5339f..1b56b9143c 100755
--- a/indra/newview/llpanelobjectinventory.h
+++ b/indra/newview/llpanelobjectinventory.h
@@ -62,6 +62,7 @@ public:
void refresh();
const LLUUID& getTaskUUID() { return mTaskUUID;}
+ void clearInventoryTask();
void removeSelectedItem();
void startRenamingSelectedItem();
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 4a31a44ad9..a8ad2b9faa 100755
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -99,7 +99,7 @@ LLContextMenu* PeopleContextMenu::createMenu()
// Set up for multi-selected People
// registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, mUUIDs)); // *TODO: unimplemented
- registrar.add("Avatar.IM", boost::bind(&LLAvatarActions::startConference, mUUIDs, LLUUID::null));
+ registrar.add("Avatar.IM", boost::bind(&PeopleContextMenu::startConference, this));
registrar.add("Avatar.Call", boost::bind(&LLAvatarActions::startAdhocCall, mUUIDs, LLUUID::null));
registrar.add("Avatar.OfferTeleport", boost::bind(&PeopleContextMenu::offerTeleport, this));
registrar.add("Avatar.RemoveFriend", boost::bind(&LLAvatarActions::removeFriendsDialog, mUUIDs));
@@ -302,6 +302,19 @@ void PeopleContextMenu::offerTeleport()
LLAvatarActions::offerTeleport(mUUIDs);
}
+void PeopleContextMenu::startConference()
+{
+ uuid_vec_t uuids;
+ for (uuid_vec_t::const_iterator it = mUUIDs.begin(); it != mUUIDs.end(); ++it)
+ {
+ if(*it != gAgentID)
+ {
+ uuids.push_back(*it);
+ }
+ }
+ LLAvatarActions::startConference(uuids);
+}
+
// Add to contact set
void PeopleContextMenu::addToContactSet()
{
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
index 8e0188945b..bc38ee36dd 100755
--- a/indra/newview/llpanelpeoplemenus.h
+++ b/indra/newview/llpanelpeoplemenus.h
@@ -47,6 +47,7 @@ private:
bool enableContextMenuItem(const LLSD& userdata);
bool checkContextMenuItem(const LLSD& userdata);
void offerTeleport();
+ void startConference();
void requestTeleport();
// Add to contact set
diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp
index 969f5d0c03..a00fa0d26f 100755
--- a/indra/newview/llpersistentnotificationstorage.cpp
+++ b/indra/newview/llpersistentnotificationstorage.cpp
@@ -35,7 +35,7 @@
#include "llscreenchannel.h"
#include "llscriptfloater.h"
#include "llviewermessage.h"
-
+#include "llviewernetwork.h"
LLPersistentNotificationStorage::LLPersistentNotificationStorage()
: LLSingleton()
, LLNotificationStorage("")
@@ -162,7 +162,10 @@ void LLPersistentNotificationStorage::loadNotifications()
void LLPersistentNotificationStorage::initialize()
{
- setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml"));
+ std::string file_name = "open_notifications_" + LLGridManager::getInstance()->getGrid() + ".xml";
+ setFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, file_name));
+ setOldFileName(gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, "open_notifications.xml"));
+
LLNotifications::instance().getChannel("Persistent")->
connectChanged(boost::bind(&LLPersistentNotificationStorage::onPersistentChannelChanged, this, _1));
}
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
index d5c64034fa..a783258aa5 100755
--- a/indra/newview/llpreviewnotecard.cpp
+++ b/indra/newview/llpreviewnotecard.cpp
@@ -516,12 +516,20 @@ bool LLPreviewNotecard::saveIfNeeded(LLInventoryItem* copyitem)
&onSaveComplete,
(void*)info,
FALSE);
+ // FIRE-9039: Close notecard after choosing "Save" in close confirmation
+ //return true;
}
else // !gAssetStorage
{
LL_WARNS() << "Not connected to an asset storage system." << LL_ENDL;
return false;
}
+ // FIRE-9039: Close notecard after choosing "Save" in close confirmation
+ //if(mCloseAfterSave)
+ //{
+ // closeFloater();
+ //}
+ //
}
}
return true;
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 9a4a1ddd06..98f88e1768 100755
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -1479,7 +1479,7 @@ void LLScriptEdCore::onBtnSaveToFile( void* userdata )
if( self->mSaveCallback )
{
LLFilePicker& file_picker = LLFilePicker::instance();
- if( file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT ) )
+ if( file_picker.getSaveFile( LLFilePicker::FFSAVE_SCRIPT, self->mScriptName ) )
{
std::string filename = file_picker.getFirstFile();
std::string scriptText=self->mEditor->getText();
@@ -2447,6 +2447,7 @@ void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType
mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
mScriptEd->mEditor->makePristine();
+ mScriptEd->setScriptName(getItem()->getName());
}
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
index 2889c21eab..b3a171e01a 100755
--- a/indra/newview/llpreviewscript.h
+++ b/indra/newview/llpreviewscript.h
@@ -134,6 +134,8 @@ public:
virtual bool hasAccelerators() const { return true; }
+ void setScriptName(const std::string& name){mScriptName = name;};
+
private:
// NaCl - LSL Preprocessor
static void onToggleProc(void* userdata);
@@ -166,6 +168,7 @@ protected:
private:
std::string mSampleText;
+ std::string mScriptName;
LLScriptEditor* mEditor;
void (*mLoadCallback)(void* userdata);
// FIRE-7514: Script in external editor needs to be saved twice
diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp
index 11b81a58fc..105c5e8cbe 100755
--- a/indra/newview/llpreviewsound.cpp
+++ b/indra/newview/llpreviewsound.cpp
@@ -95,7 +95,6 @@ void LLPreviewSound::auditionSound( void *userdata )
if(item && gAudiop)
{
- LLVector3d lpos_global = gAgent.getPositionGlobal();
- gAudiop->triggerSound(item->getAssetUUID(), gAgent.getID(), SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_SFX, lpos_global);
+ gAudiop->triggerSound(item->getAssetUUID(), gAgent.getID(), SOUND_GAIN, LLAudioEngine::AUDIO_TYPE_SFX);
}
}
diff --git a/indra/newview/llscenemonitor.cpp b/indra/newview/llscenemonitor.cpp
index 2b28fa9581..eb0129b3a1 100644
--- a/indra/newview/llscenemonitor.cpp
+++ b/indra/newview/llscenemonitor.cpp
@@ -712,9 +712,22 @@ void LLSceneMonitorView::closeFloater(bool app_quitting)
setVisible(false);
}
+// FIRE-14144 / MAINT-4256 / BUG-6664: Crash when opening stats after closing via X
+//void LLSceneMonitorView::onClickCloseBtn(bool app_quitting)
+//{
+// setVisible(false);
+//}
+//
+
void LLSceneMonitorView::onVisibilityChange(BOOL visible)
{
- visible = visible && LLGLSLShader::sNoFixedFunction;
+ if (!LLGLSLShader::sNoFixedFunction && visible)
+ {
+ visible = false;
+ // keep Scene monitor and its view in sycn
+ setVisible(false);
+ LL_WARNS("SceneMonitor") << "Incompatible graphical settings, Scene Monitor can't be turned on" << LL_ENDL;
+ }
LLSceneMonitor::getInstance()->setDebugViewerVisible(visible);
// FIRE-14144 / MAINT-4256 / BUG-6664: Crash when opening stats after closing via X
diff --git a/indra/newview/llscenemonitor.h b/indra/newview/llscenemonitor.h
index 427ce00c55..3bba4b8c95 100644
--- a/indra/newview/llscenemonitor.h
+++ b/indra/newview/llscenemonitor.h
@@ -117,6 +117,7 @@ public:
protected:
// FIRE-14144 / MAINT-4256 / BUG-6664: Crash when opening stats after closing via X
//virtual void onClose(bool app_quitting=false);
+ //virtual void onClickCloseBtn(bool app_quitting=false);
virtual void closeFloater(bool app_qutting = false);
//
};
diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp
index 3b6451dccf..f7647b013c 100755
--- a/indra/newview/llsceneview.cpp
+++ b/indra/newview/llsceneview.cpp
@@ -59,6 +59,12 @@ void LLSceneView::closeFloater(bool)
setVisible(false);
}
+// FIRE-14144 / MAINT-4256 / BUG-6664: Crash when opening stats after closing via X
+//void LLSceneView::onClickCloseBtn(bool)
+//{
+// setVisible(false);
+//}
+//
void LLSceneView::draw()
{
diff --git a/indra/newview/llsceneview.h b/indra/newview/llsceneview.h
index 89a6569b7d..e675956049 100755
--- a/indra/newview/llsceneview.h
+++ b/indra/newview/llsceneview.h
@@ -40,6 +40,7 @@ public:
protected:
// FIRE-14144 / MAINT-4256 / BUG-6664: Crash when opening stats after closing via X
//virtual void onClose(bool app_qutting = false);
+ //virtual void onClickCloseBtn(bool app_qutting = false);
virtual void closeFloater(bool app_qutting = false);
//
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 3d538bbba0..d30dda3543 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -2822,7 +2822,6 @@ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x,
return TRUE;
}
- LL_WARNS("AppInit") << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << LL_ENDL;
return TRUE;
}
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
index c6bfa00c3c..fe7e42eace 100755
--- a/indra/newview/llstatusbar.cpp
+++ b/indra/newview/llstatusbar.cpp
@@ -334,6 +334,7 @@ BOOL LLStatusBar::postBuild()
sgp.stat.count_stat_float(&LLStatViewer::ACTIVE_MESSAGE_DATA_RECEIVED);
sgp.units("Kbps");
sgp.precision(0);
+ sgp.per_sec(true);
mSGBandwidth = LLUICtrlFactory::create(sgp);
addChild(mSGBandwidth);
x -= SIM_STAT_WIDTH + 2;
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index da4720b3e4..9e9164500a 100755
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -510,7 +510,7 @@ private:
void LLGLTexMemBar::draw()
{
S32Megabytes bound_mem = LLViewerTexture::sBoundTextureMemory;
- S32Megabytes max_bound_mem = LLViewerTexture::sMaxBoundTextureMem;
+ S32Megabytes max_bound_mem = LLViewerTexture::sMaxBoundTextureMemory;
S32Megabytes total_mem = LLViewerTexture::sTotalTextureMemory;
S32Megabytes max_total_mem = LLViewerTexture::sMaxTotalTextureMem;
F32 discard_bias = LLViewerTexture::sDesiredDiscardBias;
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index 85664ab28b..b6b18d1905 100755
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -244,6 +244,8 @@ void LLToast::closeToast()
{
mOnDeleteToastSignal(this);
+ setSoundFlags(SILENT);
+
closeFloater();
}
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 8733d2a245..f694676ba6 100755
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -269,6 +269,11 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
mLineEditor->setMaxTextChars(edit_text_max_chars);
mLineEditor->setText(edit_text_contents);
+ if("SaveOutfitAs" == mNotification->getName())
+ {
+ mLineEditor->setPrevalidate(&LLTextValidate::validateASCII);
+ }
+
// decrease limit of line editor of teleport offer dialog to avoid truncation of
// location URL in invitation message, see EXT-6891
if ("OfferTeleport" == mNotification->getName())
diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp
index 56f0f8be25..e3eb8ba7af 100755
--- a/indra/newview/lltoolbrush.cpp
+++ b/indra/newview/lltoolbrush.cpp
@@ -52,7 +52,7 @@
#include "llworld.h"
#include "llappviewer.h"
#include "llparcel.h"
-
+#include "roles_constants.h"
#include "llglheaders.h"
const std::string REGION_BLOCKS_TERRAFORM_MSG = "This region does not allow terraforming.\n"
@@ -239,9 +239,9 @@ void LLToolBrushLand::modifyLandInSelectionGlobal()
iter != mLastAffectedRegions.end(); ++iter)
{
LLViewerRegion* regionp = *iter;
- if (!canTerraform(regionp))
+ if (!canTerraformRegion(regionp))
{
- alertNoTerraform(regionp);
+ alertNoTerraformRegion(regionp);
return;
}
}
@@ -376,12 +376,17 @@ BOOL LLToolBrushLand::handleMouseDown(S32 x, S32 y, MASK mask)
LLRegionPosition region_position( spot );
LLViewerRegion* regionp = region_position.getRegion();
- if (!canTerraform(regionp))
+ if (!canTerraformRegion(regionp))
{
- alertNoTerraform(regionp);
+ alertNoTerraformRegion(regionp);
return TRUE;
}
+ if (!canTerraformParcel(regionp))
+ {
+ alertNoTerraformParcel();
+ }
+
LLVector3 pos_region = region_position.getPositionRegion();
U32 grids = regionp->getLand().mGridsPerEdge;
S32 i = llclamp( (S32)pos_region.mV[VX], 0, (S32)grids );
@@ -408,6 +413,16 @@ BOOL LLToolBrushLand::handleHover( S32 x, S32 y, MASK mask )
mMouseY = y;
mGotHover = TRUE;
gViewerWindow->setCursor(UI_CURSOR_TOOLLAND);
+
+ LLVector3d spot;
+ if( gViewerWindow->mousePointOnLandGlobal( mMouseX, mMouseY, &spot ) )
+ {
+
+ spot.mdV[VX] = floor( spot.mdV[VX] + 0.5 );
+ spot.mdV[VY] = floor( spot.mdV[VY] + 0.5 );
+
+ LLViewerParcelMgr::getInstance()->setHoverParcel(spot);
+ }
return TRUE;
}
@@ -653,7 +668,7 @@ void LLToolBrushLand::redo()
}*/
// static
-bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const
+bool LLToolBrushLand::canTerraformRegion(LLViewerRegion* regionp) const
{
if (!regionp) return false;
if (regionp->canManageEstate()) return true;
@@ -661,7 +676,22 @@ bool LLToolBrushLand::canTerraform(LLViewerRegion* regionp) const
}
// static
-void LLToolBrushLand::alertNoTerraform(LLViewerRegion* regionp)
+bool LLToolBrushLand::canTerraformParcel(LLViewerRegion* regionp) const
+{
+ LLParcel* selected_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
+ bool is_terraform_allowed = false;
+ if (selected_parcel)
+ {
+ BOOL owner_release = LLViewerParcelMgr::isParcelOwnedByAgent(selected_parcel, GP_LAND_ALLOW_EDIT_LAND);
+ is_terraform_allowed = ( gAgent.canManageEstate() || (selected_parcel->getOwnerID() == regionp->getOwner()) || owner_release);
+ }
+
+ return is_terraform_allowed;
+}
+
+
+// static
+void LLToolBrushLand::alertNoTerraformRegion(LLViewerRegion* regionp)
{
if (!regionp) return;
@@ -671,6 +701,19 @@ void LLToolBrushLand::alertNoTerraform(LLViewerRegion* regionp)
}
+// static
+void LLToolBrushLand::alertNoTerraformParcel()
+{
+ LLParcel* selected_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
+ if (selected_parcel)
+ {
+ LLSD args;
+ args["PARCEL"] = selected_parcel->getName();
+ LLNotificationsUtil::add("ParcelNoTerraforming", args);
+ }
+
+}
+
///============================================================================
/// Local function definitions
///============================================================================
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
index 1c7f198900..2ec6911de9 100755
--- a/indra/newview/lltoolbrush.h
+++ b/indra/newview/lltoolbrush.h
@@ -81,10 +81,14 @@ protected:
const LLVector3& pos_world);
// Does region allow terraform, or are we a god?
- bool canTerraform(LLViewerRegion* regionp) const;
+ bool canTerraformRegion(LLViewerRegion* regionp) const;
+
+ bool canTerraformParcel(LLViewerRegion* regionp) const;
// Modal dialog that you can't terraform the region
- void alertNoTerraform(LLViewerRegion* regionp);
+ void alertNoTerraformRegion(LLViewerRegion* regionp);
+
+ void alertNoTerraformParcel();
protected:
F32 mStartingZ;
diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp
index cf4543dcb4..9e6800f645 100755
--- a/indra/newview/lltoolcomp.cpp
+++ b/indra/newview/lltoolcomp.cpp
@@ -130,12 +130,20 @@ void LLToolComposite::handleSelect()
mSelected = TRUE;
}
+void LLToolComposite::handleDeselect()
+{
+ mCur->handleDeselect();
+ mCur = mDefault;
+ mSelected = FALSE;
+}
+
//----------------------------------------------------------------------------
// LLToolCompInspect
//----------------------------------------------------------------------------
LLToolCompInspect::LLToolCompInspect()
-: LLToolComposite(std::string("Inspect"))
+: LLToolComposite(std::string("Inspect")),
+ mIsToolCameraActive(FALSE)
{
mSelectRect = new LLToolSelectRect(this);
mDefault = mSelectRect;
@@ -150,37 +158,49 @@ LLToolCompInspect::~LLToolCompInspect()
BOOL LLToolCompInspect::handleMouseDown(S32 x, S32 y, MASK mask)
{
- mMouseDown = TRUE;
- gViewerWindow->pickAsync(x, y, mask, pickCallback);
- return TRUE;
+ BOOL handled = FALSE;
+
+ if (mCur == LLToolCamera::getInstance())
+ {
+ handled = mCur->handleMouseDown(x, y, mask);
+ }
+ else
+ {
+ mMouseDown = TRUE;
+ gViewerWindow->pickAsync(x, y, mask, pickCallback);
+ handled = TRUE;
+ }
+
+ return handled;
+}
+
+BOOL LLToolCompInspect::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ BOOL handled = LLToolComposite::handleMouseUp(x, y, mask);
+ mIsToolCameraActive = getCurrentTool() == LLToolCamera::getInstance();
+ return handled;
}
void LLToolCompInspect::pickCallback(const LLPickInfo& pick_info)
{
LLViewerObject* hit_obj = pick_info.getObject();
+ LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance();
- if (!LLToolCompInspect::getInstance()->mMouseDown)
+ if (!tool_inspectp->mMouseDown)
{
// fast click on object, but mouse is already up...just do select
- LLToolCompInspect::getInstance()->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
+ tool_inspectp->mSelectRect->handleObjectSelection(pick_info, gSavedSettings.getBOOL("EditLinkedParts"), FALSE);
return;
}
- if( hit_obj )
- {
- if (LLSelectMgr::getInstance()->getSelection()->getObjectCount())
- {
- LLEditMenuHandler::gEditMenuHandler = LLSelectMgr::getInstance();
- }
- LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
- LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
+ LLSelectMgr * mgr_selectp = LLSelectMgr::getInstance();
+ if( hit_obj && mgr_selectp->getSelection()->getObjectCount()) {
+ LLEditMenuHandler::gEditMenuHandler = mgr_selectp;
+ }
- }
- else
- {
- LLToolCompInspect::getInstance()->setCurrentTool( LLToolCompInspect::getInstance()->mSelectRect );
- LLToolCompInspect::getInstance()->mSelectRect->handlePick( pick_info );
- }
+ tool_inspectp->setCurrentTool( tool_inspectp->mSelectRect );
+ tool_inspectp->mIsToolCameraActive = FALSE;
+ tool_inspectp->mSelectRect->handlePick( pick_info );
}
BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask)
@@ -188,6 +208,39 @@ BOOL LLToolCompInspect::handleDoubleClick(S32 x, S32 y, MASK mask)
return TRUE;
}
+BOOL LLToolCompInspect::handleKey(KEY key, MASK mask)
+{
+ BOOL handled = FALSE;
+
+ if(KEY_ALT == key)
+ {
+ setCurrentTool(LLToolCamera::getInstance());
+ mIsToolCameraActive = TRUE;
+ handled = TRUE;
+ }
+ else
+ {
+ handled = LLToolComposite::handleKey(key, mask);
+ }
+
+ return handled;
+}
+
+void LLToolCompInspect::onMouseCaptureLost()
+{
+ LLToolComposite::onMouseCaptureLost();
+ mIsToolCameraActive = FALSE;
+}
+
+void LLToolCompInspect::keyUp(KEY key, MASK mask)
+{
+ if (KEY_ALT == key && mCur == LLToolCamera::getInstance())
+ {
+ setCurrentTool(mDefault);
+ mIsToolCameraActive = FALSE;
+ }
+}
+
//----------------------------------------------------------------------------
// LLToolCompTranslate
//----------------------------------------------------------------------------
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
index 9f8a0bb599..6f91369e65 100755
--- a/indra/newview/lltoolcomp.h
+++ b/indra/newview/lltoolcomp.h
@@ -65,7 +65,7 @@ public:
virtual BOOL clipMouseWhenDown() { return mCur->clipMouseWhenDown(); }
virtual void handleSelect();
- virtual void handleDeselect() { mCur->handleDeselect(); mCur = mDefault; mSelected = FALSE; }
+ virtual void handleDeselect();
virtual void render() { mCur->render(); }
virtual void draw() { mCur->draw(); }
@@ -81,9 +81,10 @@ public:
{ mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
BOOL isSelecting();
+ LLTool* getCurrentTool() { return mCur; }
+
protected:
void setCurrentTool( LLTool* new_tool );
- LLTool* getCurrentTool() { return mCur; }
// In hover handler, call this to auto-switch tools
void setToolFromMask( MASK mask, LLTool *normal );
@@ -111,9 +112,18 @@ public:
// Overridden from LLToolComposite
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleKey(KEY key, MASK mask);
+ virtual void onMouseCaptureLost();
+ void keyUp(KEY key, MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
+
+ BOOL isToolCameraActive() const { return mIsToolCameraActive; }
+
+private:
+ BOOL mIsToolCameraActive;
};
//-----------------------------------------------------------------------
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 93d13891c6..d90bd490ce 100755
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -521,6 +521,7 @@ void LLToolDragAndDrop::onMouseCaptureLost()
mSource = SOURCE_AGENT;
mSourceID.setNull();
mObjectID.setNull();
+ mCustomMsg.clear();
}
BOOL LLToolDragAndDrop::handleMouseUp( S32 x, S32 y, MASK mask )
@@ -564,6 +565,12 @@ ECursorType LLToolDragAndDrop::acceptanceToCursor( EAcceptance acceptance )
mCursor = UI_CURSOR_NOLOCKED;
break;
+ case ACCEPT_NO_CUSTOM:
+ mToolTipMsg = mCustomMsg;
+ mCursor = UI_CURSOR_NO;
+ break;
+
+
case ACCEPT_NO:
mCursor = UI_CURSOR_NO;
break;
@@ -638,6 +645,7 @@ BOOL LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask)
void LLToolDragAndDrop::handleDeselect()
{
mToolTipMsg.clear();
+ mCustomMsg.clear();
LLToolTipMgr::instance().blockToolTips();
}
@@ -2269,6 +2277,26 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory(
// TODO: investigate wearables may not be loaded at this point EXT-8231
}
+ U32 max_items = gSavedSettings.getU32("WearFolderLimit");
+ if (category->getDescendentCount()>max_items)
+ {
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ false);
+ gInventory.collectDescendentsIf(category->getUUID(),
+ cats,
+ items,
+ LLInventoryModel::EXCLUDE_TRASH,
+ not_worn);
+ if (items.size() > max_items)
+ {
+ LLStringUtil::format_map_t args;
+ args["AMOUNT"] = llformat("%d", max_items);
+ mCustomMsg = LLTrans::getString("TooltipTooManyWearables",args);
+ return ACCEPT_NO_CUSTOM;
+ }
+ }
+
if(mSource == SOURCE_AGENT)
{
const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index 99b794ce58..de501ea32a 100755
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -149,6 +149,7 @@ protected:
BOOL mDrop;
S32 mCurItemIndex;
std::string mToolTipMsg;
+ std::string mCustomMsg;
enddrag_signal_t mEndDragSignal;
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
index 3039bac5c1..b25d31de2f 100755
--- a/indra/newview/lltoolfocus.cpp
+++ b/indra/newview/lltoolfocus.cpp
@@ -54,6 +54,7 @@
#include "llmorphview.h"
#include "llfloaterreg.h"
#include "llfloatercamera.h"
+#include "llmenugl.h"
// Globals
BOOL gCameraBtnZoom = TRUE;
@@ -76,6 +77,7 @@ LLToolCamera::LLToolCamera()
mOutsideSlopX(FALSE),
mOutsideSlopY(FALSE),
mValidClickPoint(FALSE),
+ mValidSelection(FALSE),
mMouseSteering(FALSE),
mMouseUpX(0),
mMouseUpY(0),
@@ -92,6 +94,8 @@ void LLToolCamera::handleSelect()
if (gFloaterTools)
{
gFloaterTools->setStatusText("camera");
+ // in case we start from tools floater, we count any selection as valid
+ mValidSelection = gFloaterTools->getVisible();
}
}
@@ -99,6 +103,14 @@ void LLToolCamera::handleSelect()
void LLToolCamera::handleDeselect()
{
// gAgent.setLookingAtAvatar(FALSE);
+
+ // Make sure that temporary selection won't pass anywhere except pie tool.
+ MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0;
+ if (!mValidSelection && (override_mask != MASK_NONE || (gFloaterTools && gFloaterTools->getVisible())))
+ {
+ LLMenuGL::sMenuContainer->hideMenus();
+ LLSelectMgr::getInstance()->validateSelection();
+ }
}
BOOL LLToolCamera::handleMouseDown(S32 x, S32 y, MASK mask)
diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h
index d88606cc09..4521680441 100755
--- a/indra/newview/lltoolfocus.h
+++ b/indra/newview/lltoolfocus.h
@@ -67,6 +67,7 @@ protected:
BOOL mOutsideSlopX;
BOOL mOutsideSlopY;
BOOL mValidClickPoint;
+ BOOL mValidSelection;
BOOL mMouseSteering;
S32 mMouseUpX; // needed for releaseMouse()
S32 mMouseUpY;
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
index 2a349c26d1..511bdeeccd 100755
--- a/indra/newview/lltoolgrab.cpp
+++ b/indra/newview/lltoolgrab.cpp
@@ -56,6 +56,7 @@
#include "llviewerregion.h"
#include "llvoavatarself.h"
#include "llworld.h"
+#include "llmenugl.h"
// [RLVa:KB] - Checked: 2010-04-11 (RLVa-1.2.0e)
#include "rlvhandler.h"
// [/RLVa:KB]
@@ -86,6 +87,7 @@ LLToolGrab::LLToolGrab( LLToolComposite* composite )
mLastFace(0),
mSpinGrabbing( FALSE ),
mSpinRotation(),
+ mClickedInMouselook( FALSE ),
mHideBuildHighlight(FALSE)
{ }
@@ -100,6 +102,8 @@ void LLToolGrab::handleSelect()
{
// viewer can crash during startup if we don't check.
gFloaterTools->setStatusText("grab");
+ // in case we start from tools floater, we count any selection as valid
+ mValidSelection = gFloaterTools->getVisible();
}
gGrabBtnVertical = FALSE;
gGrabBtnSpin = FALSE;
@@ -112,6 +116,14 @@ void LLToolGrab::handleDeselect()
setMouseCapture( FALSE );
}
+ // Make sure that temporary(invalid) selection won't pass anywhere except pie tool.
+ MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0;
+ if (!mValidSelection && (override_mask != MASK_NONE || (gFloaterTools && gFloaterTools->getVisible())))
+ {
+ LLMenuGL::sMenuContainer->hideMenus();
+ LLSelectMgr::getInstance()->validateSelection();
+ }
+
}
BOOL LLToolGrab::handleDoubleClick(S32 x, S32 y, MASK mask)
@@ -139,6 +151,7 @@ BOOL LLToolGrab::handleMouseDown(S32 x, S32 y, MASK mask)
// can grab transparent objects (how touch event propagates, scripters rely on this)
gViewerWindow->pickAsync(x, y, mask, pickCallback, TRUE);
}
+ mClickedInMouselook = gAgentCamera.cameraMouselook();
return TRUE;
}
@@ -954,13 +967,21 @@ BOOL LLToolGrab::handleMouseUp(S32 x, S32 y, MASK mask)
{
setMouseCapture( FALSE );
}
+
mMode = GRAB_INACTIVE;
- // HACK: Make some grabs temporary
- if (gGrabTransientTool)
+ if(mClickedInMouselook && !gAgentCamera.cameraMouselook())
{
- gBasicToolset->selectTool( gGrabTransientTool );
- gGrabTransientTool = NULL;
+ mClickedInMouselook = FALSE;
+ }
+ else
+ {
+ // HACK: Make some grabs temporary
+ if (gGrabTransientTool)
+ {
+ gBasicToolset->selectTool( gGrabTransientTool );
+ gGrabTransientTool = NULL;
+ }
}
//gAgent.setObjectTracking(gSavedSettings.getBOOL("TrackFocusObject"));
diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h
index 06a3b662c8..4e22732124 100755
--- a/indra/newview/lltoolgrab.h
+++ b/indra/newview/lltoolgrab.h
@@ -119,6 +119,7 @@ private:
BOOL mHasMoved; // has mouse moved off center at all?
BOOL mOutsideSlop; // has mouse moved outside center 5 pixels?
BOOL mDeselectedThisClick;
+ BOOL mValidSelection;
S32 mLastFace;
LLVector2 mLastUVCoords;
@@ -133,6 +134,8 @@ private:
LLQuaternion mSpinRotation;
BOOL mHideBuildHighlight;
+
+ BOOL mClickedInMouselook;
};
extern BOOL gGrabBtnVertical;
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
index d227a14009..0b4294e870 100755
--- a/indra/newview/lltoolmgr.cpp
+++ b/indra/newview/lltoolmgr.cpp
@@ -34,6 +34,7 @@
//#include "llfirstuse.h"
// tools and manipulators
+#include "llfloaterinspect.h"
#include "lltool.h"
#include "llmanipscale.h"
#include "llselectmgr.h"
@@ -224,7 +225,20 @@ LLTool* LLToolMgr::getCurrentTool()
}
if (cur_tool)
{
- cur_tool->handleSelect();
+ if ( LLToolCompInspect::getInstance()->isToolCameraActive()
+ && prev_tool == LLToolCamera::getInstance()
+ && cur_tool == LLToolPie::getInstance() )
+ {
+ LLFloaterInspect * inspect_instance = LLFloaterReg::getTypedInstance("inspect");
+ if(inspect_instance && inspect_instance->getVisible())
+ {
+ setTransientTool(LLToolCompInspect::getInstance());
+ }
+ }
+ else
+ {
+ cur_tool->handleSelect();
+ }
}
}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index eaebc3196c..13561423b5 100755
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -483,8 +483,12 @@ ECursorType LLToolPie::cursorFromObject(LLViewerObject* object)
break;
case CLICK_ACTION_BUY:
if ( mClickActionBuyEnabled )
- {
- cursor = UI_CURSOR_TOOLBUY;
+ {
+ LLSelectNode* node = LLSelectMgr::getInstance()->getHoverNode();
+ if (!node || node->mSaleInfo.isForSale())
+ {
+ cursor = UI_CURSOR_TOOLBUY;
+ }
}
break;
case CLICK_ACTION_OPEN:
@@ -604,6 +608,7 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
return TRUE;
}
// [/RLVa:KB]
+ LLSelectMgr::getInstance()->setHoverObject(object, mHoverPick.mObjectFace);
if (object)
{
@@ -1606,7 +1611,16 @@ void LLToolPie::handleDeselect()
}
// remove temporary selection for pie menu
LLSelectMgr::getInstance()->setHoverObject(NULL);
- LLSelectMgr::getInstance()->validateSelection();
+
+ // Menu may be still up during transfer to different tool.
+ // toolfocus and toolgrab should retain menu, they will clear it if needed
+ MASK override_mask = gKeyboard ? gKeyboard->currentMask(TRUE) : 0;
+ if (gMenuHolder && (!gMenuHolder->getVisible() || (override_mask & (MASK_ALT | MASK_CONTROL)) == 0))
+ {
+ // in most cases menu is useless without correct selection, so either keep both or discard both
+ gMenuHolder->hideMenus();
+ LLSelectMgr::getInstance()->validateSelection();
+ }
}
LLTool* LLToolPie::getOverrideTool(MASK mask)
@@ -2097,6 +2111,12 @@ BOOL LLToolPie::handleRightClickPick()
}
}
+ // non UI object - put focus back "in world"
+ if (gFocusMgr.getKeyboardFocus())
+ {
+ gFocusMgr.setKeyboardFocus(NULL);
+ }
+
LLTool::handleRightMouseDown(x, y, mask);
// We handled the event.
return TRUE;
diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp
index c6c45d3a0f..2ffe3c8496 100755
--- a/indra/newview/lltoolselect.cpp
+++ b/indra/newview/lltoolselect.cpp
@@ -36,6 +36,7 @@
#include "llmanip.h"
#include "llmenugl.h"
#include "llselectmgr.h"
+#include "llviewermediafocus.h"
#include "lltoolmgr.h"
#include "llfloaterscriptdebug.h"
#include "llviewercamera.h"
@@ -150,6 +151,21 @@ LLObjectSelectionHandle LLToolSelect::handleObjectSelection(const LLPickInfo& pi
{
BOOL already_selected = object->isSelected();
+ if (already_selected &&
+ object->getNumTEs() > 0 &&
+ !LLSelectMgr::getInstance()->getSelection()->contains(object,SELECT_ALL_TES))
+ {
+ const LLTextureEntry* tep = object->getTE(pick.mObjectFace);
+ if (tep && !tep->isSelected() && !LLViewerMediaFocus::getInstance()->getFocusedObjectID().isNull())
+ {
+ // we were interacting with media and clicked on non selected face, drop media focus
+ LLViewerMediaFocus::getInstance()->clearFocus();
+ // selection was removed and zoom preserved by clearFocus(), continue with regular selection
+ already_selected = false;
+ extend_select = true;
+ }
+ }
+
if ( extend_select )
{
if ( already_selected )
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index dc1d2a37ad..489ebb7c32 100755
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -76,6 +76,7 @@
#include "llfloaterinspect.h"
#include "llfloaterinventory.h"
#include "llfloaterjoystick.h"
+#include "llfloaterlagmeter.h"
#include "llfloaterland.h"
#include "llfloaterlandholdings.h"
#include "llfloatermap.h"
@@ -288,6 +289,7 @@ void LLViewerFloaterReg::registerFloaters()
LLNotificationsUI::registerFloater();
LLFloaterDisplayNameUtil::registerFloater();
+ LLFloaterReg::add("lagmeter", "floater_lagmeter.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("land_holdings", "floater_land_holdings.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("mem_leaking", "floater_mem_leaking.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
index aa88e0fd49..4ebc739a2c 100755
--- a/indra/newview/llviewerkeyboard.cpp
+++ b/indra/newview/llviewerkeyboard.cpp
@@ -202,12 +202,10 @@ void agent_push_backward( EKeystate s )
{
camera_move_backward(s);
}
- // Comment out what shouldn't be here at all but got back in LL merge fail
- //else if (!gAgent.backwardGrabbed() && gAgentAvatarp->isSitting())
- //{
- // gAgentCamera.changeCameraToThirdPerson();
- //}
- //
+ else if (!gAgent.backwardGrabbed() && gAgentAvatarp->isSitting() && gSavedSettings.getBOOL("LeaveMouselook"))
+ {
+ gAgentCamera.changeCameraToThirdPerson();
+ }
else
{
agent_push_forwardbackward(s, -1, LLAgent::DOUBLETAP_BACKWARD);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 7d6947c031..abdd9bce74 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -64,6 +64,7 @@
#include "llfloaterinventory.h"
#include "llfloaterimcontainer.h"
#include "llfloaterland.h"
+#include "llfloaterimnearbychat.h"
#include "llfloaterpathfindingcharacters.h"
#include "llfloaterpathfindinglinksets.h"
#include "llfloaterpay.h"
@@ -92,6 +93,7 @@
#include "llparcel.h"
#include "llrootview.h"
#include "llsceneview.h"
+#include "llscenemonitor.h"
#include "llselectmgr.h"
#include "llspellcheckmenuhandler.h"
#include "llstatusbar.h"
@@ -658,12 +660,10 @@ class LLAdvancedToggleConsole : public view_listener_t
{
toggle_visibility( (void*)gSceneView);
}
- // Scene monitor view not working
else if ("scene monitor" == console_type)
{
toggle_visibility( (void*)gSceneMonitorView);
}
- //
return true;
}
@@ -690,12 +690,10 @@ class LLAdvancedCheckConsole : public view_listener_t
{
new_value = get_visibility( (void*) gSceneView);
}
- // Scene monitor view not working
else if ("scene monitor" == console_type)
{
new_value = get_visibility( (void*) gSceneMonitorView);
}
- //
return new_value;
}
@@ -6728,6 +6726,27 @@ void toggle_debug_menus(void*)
// gExportDialog = LLUploadDialog::modalUploadDialog("Exporting selected objects...");
// }
//
+
+// [FS Communication UI]
+//class LLCommunicateNearbyChat : public view_listener_t
+//{
+// bool handleEvent(const LLSD& userdata)
+// {
+// LLFloaterIMContainer* im_box = LLFloaterIMContainer::getInstance();
+// bool nearby_visible = LLFloaterReg::getTypedInstance("nearby_chat")->isInVisibleChain();
+// if(nearby_visible && im_box->getSelectedSession() == LLUUID() && im_box->getConversationListItemSize() > 1)
+// {
+// im_box->selectNextorPreviousConversation(false);
+// }
+// else
+// {
+// LLFloaterReg::toggleInstanceOrBringToFront("nearby_chat");
+// }
+// return true;
+// }
+//};
+// [FS Communication UI]
+
class LLWorldSetHomeLocation : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@@ -7517,7 +7536,7 @@ class LLPromptShowURL : public view_listener_t
std::string alert = param.substr(0, offset);
std::string url = param.substr(offset+1);
- if(gSavedSettings.getBOOL("UseExternalBrowser"))
+ if (LLWeb::useExternalBrowser(url))
{
// FS-1951: LLWeb::loadURL() will spawn the WebLaunchExternalTarget
// confirmation if opening with an external browser
@@ -9610,7 +9629,7 @@ void handle_web_content_test(const LLSD& param)
void handle_show_url(const LLSD& param)
{
std::string url = param.asString();
- if(gSavedSettings.getBOOL("UseExternalBrowser"))
+ if (LLWeb::useExternalBrowser(url))
{
LLWeb::loadURLExternal(url);
}
@@ -10085,9 +10104,9 @@ class LLWorldEnableEnvSettings : public view_listener_t
bool result = false;
std::string tod = userdata.asString();
- if (tod == "region")
+ if (LLEnvManagerNew::instance().getUseRegionSettings())
{
- return LLEnvManagerNew::instance().getUseRegionSettings();
+ return (tod == "region");
}
if (LLEnvManagerNew::instance().getUseFixedSky())
@@ -10599,6 +10618,10 @@ void initialize_menus()
// Me > Movement
view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying");
+ //Communicate Nearby chat
+ // [FS Communication UI]
+ //view_listener_t::addMenu(new LLCommunicateNearbyChat(), "Communicate.NearbyChat");
+
// Communicate > Voice morphing > Subscribe...
commit.add("Communicate.VoiceMorphing.Subscribe", boost::bind(&handle_voice_morphing_subscribe));
LLVivoxVoiceClient * voice_clientp = LLVivoxVoiceClient::getInstance();
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 80e1160ebc..a7e2ac01fe 100755
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -657,8 +657,10 @@ class LLFileEnableCloseWindow : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- bool new_value = NULL != gFloaterView->getFrontmostClosableFloater();
- return new_value;
+ bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater());
+ bool frontmost_snapshot_fl_exists = (NULL != gSnapshotFloaterView->getFrontmostClosableFloater());
+
+ return frontmost_fl_exists || frontmost_snapshot_fl_exists;
}
};
@@ -666,7 +668,21 @@ class LLFileCloseWindow : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
- LLFloater::closeFrontmostFloater();
+ bool frontmost_fl_exists = (NULL != gFloaterView->getFrontmostClosableFloater());
+ LLFloater* snapshot_floater = gSnapshotFloaterView->getFrontmostClosableFloater();
+
+ if(snapshot_floater && (!frontmost_fl_exists || snapshot_floater->hasFocus()))
+ {
+ snapshot_floater->closeFloater();
+ if (gFocusMgr.getKeyboardFocus() == NULL)
+ {
+ gFloaterView->focusFrontFloater();
+ }
+ }
+ else
+ {
+ LLFloater::closeFrontmostFloater();
+ }
return true;
}
};
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 7d367c1417..3e598df0d3 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -4788,6 +4788,15 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
LLNotificationsUI::LLNotificationManager::instance().onChat(chat, args);
}
+ // don't call notification for debug messages from not owned objects
+ if (chat.mChatType == CHAT_TYPE_DEBUG_MSG)
+ {
+ if (gAgentID != chat.mOwnerID)
+ {
+ return;
+ }
+ }
+
LLSD msg_notify = LLSD(LLSD::emptyMap());
msg_notify["session_id"] = LLUUID();
msg_notify["from_id"] = chat.mFromID;
@@ -7246,7 +7255,7 @@ bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notific
tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
returnValue = true;
}
- }
+ }
} // End of special handling for "TeleportEntryAccessBlocked"
else
{ // Normal case, no message munging
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index b30624686d..c89c9a2daa 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -2847,8 +2847,8 @@ void LLViewerObject::dirtyInventory()
mInventory->clear(); // will deref and delete entries
delete mInventory;
mInventory = NULL;
- mInventoryDirty = TRUE;
}
+ mInventoryDirty = TRUE;
}
void LLViewerObject::registerInventoryListener(LLVOInventoryListener* listener, void* user_data)
@@ -2885,12 +2885,15 @@ void LLViewerObject::clearInventoryListeners()
void LLViewerObject::requestInventory()
{
- mInventoryDirty = FALSE;
+ if(mInventoryDirty && mInventory && !mInventoryCallbacks.empty())
+ {
+ mInventory->clear(); // will deref and delete entries
+ delete mInventory;
+ mInventory = NULL;
+ mInventoryDirty = FALSE; //since we are going to request it now
+ }
if(mInventory)
{
- //mInventory->clear() // will deref and delete it
- //delete mInventory;
- //mInventory = NULL;
doInventoryCallback();
}
// throw away duplicate requests
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 42845ea016..f9305a8194 100755
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -118,6 +118,7 @@ LLViewerParcelMgr::LLViewerParcelMgr()
mHoverRequestResult(0),
mHoverWestSouth(),
mHoverEastNorth(),
+ mTeleportInProgressPosition(),
mRenderCollision(FALSE),
mRenderSelection(TRUE),
mCollisionBanned(0),
@@ -1369,12 +1370,6 @@ void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos)
static U32 last_west, last_south;
- // only request parcel info when tooltip is shown
- if (!gSavedSettings.getBOOL("ShowLandHoverTip"))
- {
- return;
- }
-
// only request parcel info if position has changed outside of the
// last parcel grid step
U32 west_parcel_step = (U32) floor( pos.mdV[VX] / PARCEL_GRID_STEP_METERS );
@@ -1646,7 +1641,15 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
if (instance->mTeleportInProgress)
{
instance->mTeleportInProgress = FALSE;
- instance->mTeleportFinishedSignal(gAgent.getPositionGlobal(), false);
+ if(instance->mTeleportInProgressPosition.isNull())
+ {
+ //initial update
+ instance->mTeleportFinishedSignal(gAgent.getPositionGlobal(), false);
+ }
+ else
+ {
+ instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false);
+ }
}
//KC: check for parcel changes for WL settings
@@ -2583,6 +2586,7 @@ void LLViewerParcelMgr::onTeleportFinished(bool local, const LLVector3d& new_pos
// Non-local teleport (inter-region or between different parcels of the same region).
// The agent parcel data has not been updated yet.
// Let's wait for the update and then emit the signal.
+ mTeleportInProgressPosition = new_pos;
mTeleportInProgress = TRUE;
}
}
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
index dfbbba5bfc..d3fa3d6575 100755
--- a/indra/newview/llviewerparcelmgr.h
+++ b/indra/newview/llviewerparcelmgr.h
@@ -346,6 +346,7 @@ private:
std::vector mObservers;
BOOL mTeleportInProgress;
+ LLVector3d mTeleportInProgressPosition;
teleport_finished_signal_t mTeleportFinishedSignal;
teleport_failed_signal_t mTeleportFailedSignal;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index 207e0a6107..fdf6dd104f 100755
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -88,7 +88,7 @@ F32 LLViewerTexture::sDesiredDiscardBias = 0.f;
F32 LLViewerTexture::sDesiredDiscardScale = 1.1f;
S32Bytes LLViewerTexture::sBoundTextureMemory;
S32Bytes LLViewerTexture::sTotalTextureMemory;
-S32Megabytes LLViewerTexture::sMaxBoundTextureMem;
+S32Megabytes LLViewerTexture::sMaxBoundTextureMemory;
S32Megabytes LLViewerTexture::sMaxTotalTextureMem;
S32Bytes LLViewerTexture::sMaxDesiredTextureMem;
S8 LLViewerTexture::sCameraMovingDiscardBias = 0;
@@ -541,7 +541,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
sBoundTextureMemory = LLImageGL::sBoundTextureMemory;
sTotalTextureMemory = LLImageGL::sGlobalTextureMemory;
- sMaxBoundTextureMem = gTextureList.getMaxResidentTexMem();
+ sMaxBoundTextureMemory = gTextureList.getMaxResidentTexMem();
sMaxTotalTextureMem = gTextureList.getMaxTotalTextureMem();
sMaxDesiredTextureMem = sMaxTotalTextureMem; //in Bytes, by default and when total used texture memory is small.
@@ -549,7 +549,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
// textures will be destroyed
static LLCachedControl fsDestroyGLTexturesThreshold(gSavedSettings, "FSDestroyGLTexturesThreshold");
- if (sBoundTextureMemory >= sMaxBoundTextureMem ||
+ if (sBoundTextureMemory >= sMaxBoundTextureMemory ||
sTotalTextureMemory >= sMaxTotalTextureMem)
{
//when texture memory overflows, lower down the threshold to release the textures more aggressively.
@@ -563,7 +563,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
LL_INFOS() << "new bias " << sDesiredDiscardBias
<< " sBoundTextureMemory " << sBoundTextureMemory
<< " sTotalTextureMemory " << sTotalTextureMemory
- << " sMaxBoundTextureMem " << sMaxBoundTextureMem
+ << " sMaxBoundTextureMemory " << sMaxBoundTextureMemory
<< " sMaxTotalTextureMem " << sMaxTotalTextureMem
<< LL_ENDL;
sEvaluationTimer.reset();
@@ -578,7 +578,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
sEvaluationTimer.reset();
}
else if (sDesiredDiscardBias > 0.0f &&
- sBoundTextureMemory < sMaxBoundTextureMem * texmem_lower_bound_scale &&
+ sBoundTextureMemory < sMaxBoundTextureMemory * texmem_lower_bound_scale &&
// Link threshold factor for lowering bias based on total texture memory to the same value
// textures will be destroyed
//sTotalTextureMemory < sMaxTotalTextureMem * texmem_lower_bound_scale)
@@ -600,7 +600,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
sCameraMovingBias = llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1);
sCameraMovingDiscardBias = (S8)(sCameraMovingBias);
- LLViewerTexture::sFreezeImageScalingDown = (sBoundTextureMemory < 0.75f * sMaxBoundTextureMem * texmem_middle_bound_scale) &&
+ LLViewerTexture::sFreezeImageScalingDown = (sBoundTextureMemory < 0.75f * sMaxBoundTextureMemory * texmem_middle_bound_scale) &&
(sTotalTextureMemory < 0.75f * sMaxTotalTextureMem * texmem_middle_bound_scale);
}
@@ -3173,7 +3173,7 @@ void LLViewerLODTexture::processTextureStats()
scaleDown();
}
// Limit the amount of GL memory bound each frame
- else if ( sBoundTextureMemory > sMaxBoundTextureMem * texmem_middle_bound_scale &&
+ else if ( sBoundTextureMemory > sMaxBoundTextureMemory * texmem_middle_bound_scale &&
(!getBoundRecently() || mDesiredDiscardLevel >= mCachedRawDiscardLevel))
{
scaleDown();
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index 7670b50e9e..8caf38eff7 100755
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -210,7 +210,7 @@ public:
static F32 sDesiredDiscardScale;
static S32Bytes sBoundTextureMemory;
static S32Bytes sTotalTextureMemory;
- static S32Megabytes sMaxBoundTextureMem;
+ static S32Megabytes sMaxBoundTextureMemory;
static S32Megabytes sMaxTotalTextureMem;
static S32Bytes sMaxDesiredTextureMem ;
static S8 sCameraMovingDiscardBias;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index a80c029ef7..30dce493aa 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1473,6 +1473,13 @@ BOOL LLViewerWindow::handleTranslatedKeyUp(KEY key, MASK mask)
// Let the voice chat code check for its PTT key. Note that this never affects event processing.
LLVoiceClient::getInstance()->keyUp(key, mask);
+ // Let the inspect tool code check for ALT key to set LLToolSelectRect active instead LLToolCamera
+ LLToolCompInspect * tool_inspectp = LLToolCompInspect::getInstance();
+ if (LLToolMgr::getInstance()->getCurrentTool() == tool_inspectp)
+ {
+ tool_inspectp->keyUp(key, mask);
+ }
+
return FALSE;
}
@@ -2108,7 +2115,7 @@ void LLViewerWindow::initWorldUI()
// Force gFloaterTools to initialize
LLFloaterReg::getInstance("build");
- LLFloaterReg::hideInstance("build");
+
// Status bar
LLPanel* status_bar_container = getRootView()->getChild("status_bar_container");
@@ -3627,6 +3634,8 @@ void LLViewerWindow::updateUI()
}
append_xui_tooltip(tooltip_view, params);
+ params.styled_message.add().text("\n");
+
screen_sticky_rect.intersectWith(tooltip_view->calcScreenRect());
params.sticky_rect = screen_sticky_rect;
@@ -3676,7 +3685,7 @@ void LLViewerWindow::updateUI()
updateLayout();
- saveLastMouse(mCurrentMousePoint);
+ mLastMousePoint = mCurrentMousePoint;
// Backout MAINT-3250
mLastMousePoint = mCurrentMousePoint;
@@ -3921,9 +3930,6 @@ void LLViewerWindow::saveLastMouse(const LLCoordGL &point)
// Store last mouse location.
// If mouse leaves window, pretend last point was on edge of window
- // Backout MAINT-3250
- //mLastMousePoint = mCurrentMousePoint;
-
if (point.mX < 0)
{
mCurrentMousePoint.mX = 0;
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 5acdae1f18..b078b2ac47 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -2136,8 +2136,8 @@ void LLVOAvatar::idleUpdate(LLAgent &agent, const F64 &time)
// Use LLCachedControl
static LLCachedControl disable_all_render_types(gSavedSettings, "DisableAllRenderTypes");
if (!(gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_AVATAR))
- //&& !(gSavedSettings.getBOOL("DisableAllRenderTypes")))
- && !(disable_all_render_types))
+ //&& !(gSavedSettings.getBOOL("DisableAllRenderTypes")) && !isSelf())
+ && !(disable_all_render_types) && !isSelf())
//
{
return;
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
index 3c3dc33772..9a84cae403 100755
--- a/indra/newview/llvoicechannel.cpp
+++ b/indra/newview/llvoicechannel.cpp
@@ -280,14 +280,14 @@ void LLVoiceChannel::deactivate()
if (callStarted())
{
setState(STATE_HUNG_UP);
-
+
//Default mic is OFF when leaving voice calls
- if (gSavedSettings.getBOOL("AutoDisengageMic") &&
+ if (gSavedSettings.getBOOL("AutoDisengageMic") &&
sCurrentVoiceChannel == this &&
LLVoiceClient::getInstance()->getUserPTTState())
{
gSavedSettings.setBOOL("PTTCurrentlyEnabled", true);
- LLVoiceClient::getInstance()->inputUserControlState(true);
+ LLVoiceClient::getInstance()->setUserPTTState(false);
}
}
LLVoiceClient::getInstance()->removeObserver(this);
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
index 34e00d67da..bfbc88557f 100755
--- a/indra/newview/llvoiceclient.cpp
+++ b/indra/newview/llvoiceclient.cpp
@@ -36,6 +36,7 @@
#include "llsdserialize.h"
#include "llui.h"
#include "llkeyboard.h"
+#include "llagent.h"
const F32 LLVoiceClient::OVERDRIVEN_POWER_LEVEL = 0.7f;
@@ -658,7 +659,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
return;
}
- if(!mPTTIsMiddleMouse)
+ if(!mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak"))
{
bool down = (mPTTKey != KEY_NONE)
&& gKeyboard->getKeyDown(mPTTKey);
@@ -677,12 +678,9 @@ void LLVoiceClient::keyUp(KEY key, MASK mask)
}
void LLVoiceClient::middleMouseState(bool down)
{
- if(mPTTIsMiddleMouse)
+ if(mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak"))
{
- if(mPTTIsMiddleMouse)
- {
- inputUserControlState(down);
- }
+ inputUserControlState(down);
}
}
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index c47242fe36..d3f4ddf6bc 100755
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -50,6 +50,8 @@
#include "llviewerwindow.h"
#include "llnotificationsutil.h"
+#include
+
bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
@@ -87,7 +89,8 @@ void LLWeb::loadURL(const std::string& url, const std::string& target, const std
// Force load in the internal browser, as if with a blank target.
loadURLInternal(url, "", uuid);
}
- else if (gSavedSettings.getBOOL("UseExternalBrowser") || (target == "_external"))
+
+ else if (useExternalBrowser(url) || (target == "_external"))
{
loadURLExternal(url);
}
@@ -229,3 +232,19 @@ std::string LLWeb::expandURLSubstitutions(const std::string &url,
return LLWeb::escapeURL(expanded_url);
}
+
+//static
+bool LLWeb::useExternalBrowser(const std::string &url)
+{
+ if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_EXTERNAL_ONLY)
+ {
+ return true;
+ }
+ else if (gSavedSettings.getU32("PreferredBrowserBehavior") == BROWSER_INT_LL_EXT_OTHERS)
+ {
+ boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)\\b", boost::regex::perl|boost::regex::icase);
+ boost::match_results matches;
+ return !(boost::regex_search(url, matches, pattern));
+ }
+ return false;
+}
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
index 0b95f664d6..7c90badbfe 100755
--- a/indra/newview/llweb.h
+++ b/indra/newview/llweb.h
@@ -40,6 +40,13 @@
class LLWeb
{
public:
+ enum PreferredBrowser
+ {
+ BROWSER_EXTERNAL_ONLY = 0,
+ BROWSER_INT_LL_EXT_OTHERS = 1,
+ BROWSER_INTERNAL_ONLY = 2
+ };
+
static void initClass();
/// Load the given url in the operating system's web browser, async if we want to return immediately
@@ -57,6 +64,7 @@ public:
/// Expands various strings like [LANG], [VERSION], etc. in a URL
static std::string expandURLSubstitutions(const std::string &url,
const LLSD &default_subs);
+ static bool useExternalBrowser(const std::string &url);
};
#endif
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 873fbafbab..d7ca8f5839 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1809,7 +1809,6 @@ BOOL LLWorldMapView::handleHover( S32 x, S32 y, MASK mask )
sTargetPanX = sPanX;
sTargetPanY = sPanY;
- // Backout MAINT-3250
gViewerWindow->moveCursorToCenter();
}
diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
new file mode 100644
index 0000000000..149d174c34
--- /dev/null
+++ b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Lag måler
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ Klient
+
+
+ 10
+
+
+ 15
+
+
+ Normal, vindue i baggrund
+
+
+ Klients billeder/sek under [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Klients billeder/sek mellem [CLIENT_FRAME_RATE_CRITICAL] og [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Mulig årsag: 'Vis afstand' sat for højt i grafik indstillinger
+
+
+ Mulig årsag: Billeder hentes
+
+
+ Mulig årsag: For mange billeder i hukommelse
+
+
+ Mulig årsag: For mange komplekse objekter i scenariet
+
+
+ Netværk
+
+
+ 10
+
+
+ 5
+
+
+ Forbindelsen mister over [NETWORK_PACKET_LOSS_CRITICAL]% pakker
+
+
+ Forbindelsen mister [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% pakker
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Forbindelsens ping tider er over [NETWORK_PING_CRITICAL] ms
+
+
+ Forbindelsens ping tider er [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Muligvis dårlig forbindelse eller 'båndbredde' sat for højt i netværksopsætning.
+
+
+ Muligvis dårlig forbindelse eller fil delings program.
+
+
+ Server
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Simulator framerate er under [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Simulator framerate er mellem [SERVER_FRAME_RATE_CRITICAL] og [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Mulig årsag: For mange fysiske objekter
+
+
+ Mulig årsag: For mange objekter med script
+
+
+ Mulig årsag: For meget netværks trafik
+
+
+ Mulig årsag: For mange avatarer i bevægelse i regionen
+
+
+ Mulig årsag: For mange billed udregninger
+
+
+ Mulig årsag: Simulator belastning for stor
+
+
+ >>
+
+
+ <<
+
+
+
+ Klient
+
+
+ Normal
+
+
+
+ Netværk
+
+
+ Normal
+
+
+
+ Server
+
+
+ Normal
+
+
+
diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
new file mode 100644
index 0000000000..45ff37c147
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Lag-Anzeige
+
+
+ 350
+
+
+ Lag
+
+
+ 90
+
+
+ Client
+
+
+ 10
+
+
+ 15
+
+
+ Normal, Fenster im Hintergrund
+
+
+ Client-Frame-Rate unter [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Client-Frame-Rate zwischen [CLIENT_FRAME_RATE_CRITICAL] und [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Mögliche Ursache: Sichtweite zu groß
+
+
+ Mögliche Ursache: Bilder werden geladen
+
+
+ Mögliche Ursache: Zu viele Bilder im Speicher
+
+
+ Mögliche Ursache: Zu viele komplexe Objekte in der Szene
+
+
+ Netzwerk
+
+
+ 10
+
+
+ 5
+
+
+ Paketverlust der Verbindung übersteigt [NETWORK_PACKET_LOSS_CRITICAL]%
+
+
+ Paketverlust der Verbindung liegt bei [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]%
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Ping-Zeit der Verbindung übersteigt [NETWORK_PING_CRITICAL] ms
+
+
+ Ping-Zeit der Verbindung liegt bei [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Möglicherweise schlechte Verbindung oder zu hoher Wert für „Bandbreite“.
+
+
+ Möglicherweise schlechte Verbindung oder File-Sharing-Anwendung.
+
+
+ Server
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Simulator-Frame-Rate liegt unter [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Simulator-Frame-Rate liegt zwischen [SERVER_FRAME_RATE_CRITICAL] und [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Mögliche Ursache: Zu viele physische Objekte
+
+
+ Mögliche Ursache: Zu viele geskriptete Objekte
+
+
+ Mögliche Ursache: Zu viel Netzwerktraffic
+
+
+ Mögliche Ursache: Zu viele Personen in Bewegung in der Region
+
+
+ Mögliche Ursache: Zu viele Bildberechnungen
+
+
+ Mögliche Ursache: Zu hohe Simulator-Last
+
+
+ >>
+
+
+ <<
+
+
+
+ Client
+
+
+ Normal
+
+
+
+ Netzwerk
+
+
+ Normal
+
+
+
+ Server
+
+
+ Normal
+
+
+
diff --git a/indra/newview/skins/default/xui/de/floater_region_restarting.xml b/indra/newview/skins/default/xui/de/floater_region_restarting.xml
index a8312bac7f..581b4f6a99 100644
--- a/indra/newview/skins/default/xui/de/floater_region_restarting.xml
+++ b/indra/newview/skins/default/xui/de/floater_region_restarting.xml
@@ -1,9 +1,9 @@
- Die Region, in der Sie sich gerade befinden ([NAME]), ist dabei neu zu starten.
+ Die Region, in der Sie sich gerade befinden ([NAME]), wird gleich neu gestartet.
-Falls Sie in dieser Region bleiben, werden Sie ausgeloggt.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
Sekunden bis Neustart
@@ -11,13 +11,13 @@ Falls Sie in dieser Region bleiben, werden Sie ausgeloggt.
- Die Region, in der Sie sich gerade befinden (-The longest region name-), ist dabei neu zu starten.
+ Die Region, in der Sie sich gerade befinden (-längster Regionsname-), wird gleich neu gestartet.
-Falls Sie in dieser Region bleiben, werden Sie ausgeloggt.
+Wenn Sie in dieser Region bleiben, werden Sie abgemeldet.
Sekunden bis Neustart
-32767
+ 32767
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index d3150fd54e..d904cefd1c 100755
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -109,7 +109,7 @@
-
+
@@ -410,6 +410,7 @@
+
@@ -430,7 +431,7 @@
-
+
@@ -505,7 +506,6 @@
-
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index fa221b6a31..e7a8fec499 100755
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -4077,16 +4077,16 @@ Sie ist voll oder startet in Kürze neu.
Land kann nicht geteilt werden.
Mehr als eine Parzelle ist ausgewählt.
-Wählen Sie ein kleineres Stück Land aus.
+Wählen Sie eine kleinere Landfläche aus.
Land kann nicht geteilt werden.
-Parzelle nicht auffindbar.
-Melden Sie das Problem über „Hilfe“ -> „Fehler melden“.
+Parzelle kann nicht gefunden werden.
+Bitte melden Sie den Fehler über „Hilfe“ -> „Fehler melden“.
Land kann nicht geteilt werden. Die gesamte Parzelle ist ausgewählt.
-Wählen Sie ein kleineres Stück Land aus.
+Wählen Sie eine kleinere Landfläche aus.
Land wurde geteilt.
diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml
index b55365af97..98ea78071d 100755
--- a/indra/newview/skins/default/xui/de/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_debug.xml
@@ -7,11 +7,8 @@
unbekannt
-
-
-
Objekt zurückgeben
@@ -31,11 +28,8 @@
-
-
-
-
+
Sekunden:
diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml
index db0b807c56..561051a5b0 100755
--- a/indra/newview/skins/default/xui/de/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_region_general.xml
@@ -35,7 +35,6 @@
-
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
index d8915195cf..1501bee372 100755
--- a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 7d10362913..15bc97543b 100755
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -36,27 +36,27 @@
[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
- Kompiliert mit [COMPILER] version [COMPILER_VERSION]
+ Kompiliert mit [COMPILER], Version [COMPILER_VERSION]
Sie befinden sich an [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] auf <nolink>[HOSTNAME]</nolink> ([HOSTIP])
SLURL: <nolink>[SLURL]</nolink>
-(globalen Koordinaten [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+(globale Koordinaten [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
[SERVER_VERSION]
[SERVER_RELEASE_NOTES_URL]
CPU: [CPU]
Speicher: [MEMORY_MB] MB
-Betriebssystem: [OS_VERSION]
-Grafikkarten-Hersteller: [GRAPHICS_CARD_VENDOR]
+Betriebssystemversion: [OS_VERSION]
+Grafikkartenhersteller: [GRAPHICS_CARD_VENDOR]
Grafikkarte: [GRAPHICS_CARD]
- Windows Grafiktreiber-Version: [GRAPHICS_DRIVER_VERSION]
+ Windows-Grafiktreiberversion: [GRAPHICS_DRIVER_VERSION]
- OpenGL Version: [OPENGL_VERSION]
+ OpenGL-Version: [OPENGL_VERSION]
RestrainedLove API: [RLV_VERSION]
libcurl-Version: [LIBCURL_VERSION]
@@ -1064,15 +1064,15 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Kamerasteuerung übernehmen
+
+ Sie teleportieren
+
Nicht verbunden
(Sie)
-
- Sie teleportieren
-
Grundbesitz leise verwalten
@@ -1433,7 +1433,7 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Sie haben keine Kopie dieser Textur in Ihrem Inventar.
-
+
Einkäufe aus dem Marktplatz erscheinen hier. Sie können diese dann zur Verwendung in Ihr Inventar ziehen.
@@ -1466,20 +1466,16 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Ziehen Sie Ordner in dien Bereich und klicken Sie auf „In Marktplatz übertragen“, um sie im [[MARKETPLACE_DASHBOARD_URL] Marktplatz] zum Verkauf anzubieten.
- Initialisiere Marktplatz.
-
-
+ Marktplatz wird initialisiert.
- Wir greifen auf Ihre Konto im [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Shop] zu.
+ Wir greifen auf Ihr Konto im [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Laden] zu.
- Marktplatz-Fehler
-
-
+ Marktplatzfehler.
- Der [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Shop] hat Fehler zurückgeliefert.
+ Der [[MARKETPLACE_CREATE_STORE_URL] Marktplatz-Laden] gibt Fehler zurück.
Keine Fehler
@@ -1920,6 +1916,9 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
Kein Skriptkompilierungsdienst verfügbar
+
+ Kein Skriptkompilierungsdienst verfügbar
+
Skript wurde auf Server nicht gefunden.
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
index dad81aca4f..c64ee5565a 100755
--- a/indra/newview/skins/default/xui/en/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_im_session.xml
@@ -209,7 +209,7 @@
default_tab_group="3"
tab_group="2"
name="right_part_holder"
- min_width="230">
+ min_width="207">
+
+
+ Lag Meter
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ Client
+
+
+ 10
+
+
+ 15
+
+
+ Normal, window in background
+
+
+ Client frame rate below [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Possible cause: Draw distance set too high
+
+
+ Possible cause: Images loading
+
+
+ Possible cause: Too many images in memory
+
+
+ Possible cause: Too many complex objects in scene
+
+
+ Network
+
+
+ 10
+
+
+ 5
+
+
+ Connection is dropping over [NETWORK_PACKET_LOSS_CRITICAL]% of packets
+
+
+ Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Connection ping time is over [NETWORK_PING_CRITICAL] ms
+
+
+ Connection ping time is [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Possible bad connection or 'Bandwidth' pref too high.
+
+
+ Possible bad connection or file-sharing app.
+
+
+ Server
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Simulator framerate below [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Simulator framerate between [SERVER_FRAME_RATE_CRITICAL] and [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Possible Cause: Too many physical objects
+
+
+ Possible Cause: Too many scripted objects
+
+
+ Possible Cause: Too much network traffic
+
+
+ Possible Cause: Too many moving people in region
+
+
+ Possible Cause: Too many image calculations
+
+
+ Possible Cause: Simulator load too heavy
+
+
+ >>
+
+
+ <<
+
+
+
+ Client
+
+
+ Normal
+
+
+
+
+ Network
+
+
+ Normal
+
+
+
+
+ Server
+
+
+ Normal
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
index 16d3facaef..61a6e14237 100755
--- a/indra/newview/skins/default/xui/en/floater_openobject.xml
+++ b/indra/newview/skins/default/xui/en/floater_openobject.xml
@@ -7,7 +7,7 @@
height="350"
layout="topleft"
min_height="160"
- min_width="270"
+ min_width="280"
name="objectcontents"
help_topic="objectcontents"
save_rect="true"
@@ -40,10 +40,10 @@
+ width="135">
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
index ad2171eb46..685754fcfe 100755
--- a/indra/newview/skins/default/xui/en/floater_report_abuse.xml
+++ b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
@@ -264,7 +264,7 @@
name="Land__Encroachment__Objects_textures"
value="63" />
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 6204d63aea..5b4ce3847e 100755
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -8,6 +8,7 @@
height="455"
layout="topleft"
name="Snapshot"
+ single_instance="true"
help_topic="snapshot"
save_rect="true"
save_visibility="false"
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index ead9fce7e7..8286372f2f 100755
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -334,6 +334,7 @@
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 4ea640eabc..9d1dd6b066 100755
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -1725,7 +1725,7 @@
name="Grid Options"
shortcut="control|shift|B">
diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml
index a585069faa..f5f2223330 100755
--- a/indra/newview/skins/default/xui/en/mime_types.xml
+++ b/indra/newview/skins/default/xui/en/mime_types.xml
@@ -101,6 +101,27 @@
true
+
+
+ No Content
+
+
+ none/none
+
+
+ icn_media_web.tga
+
+
+ No media here
+
+
+
+ false
+
+
+ false
+
+
Real Time Streaming
diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml
index e95b371d00..84aeaf3b54 100755
--- a/indra/newview/skins/default/xui/en/mime_types_linux.xml
+++ b/indra/newview/skins/default/xui/en/mime_types_linux.xml
@@ -101,6 +101,27 @@
true
+
+
+ No Content
+
+
+ none/none
+
+
+ icn_media_web.tga
+
+
+ No media here
+
+
+
+ false
+
+
+ false
+
+
Real Time Streaming
diff --git a/indra/newview/skins/default/xui/en/mime_types_mac.xml b/indra/newview/skins/default/xui/en/mime_types_mac.xml
index 7931e55c0a..90230f12dd 100755
--- a/indra/newview/skins/default/xui/en/mime_types_mac.xml
+++ b/indra/newview/skins/default/xui/en/mime_types_mac.xml
@@ -101,6 +101,27 @@
true
+
+
+ No Content
+
+
+ none/none
+
+
+ icn_media_web.tga
+
+
+ No media here
+
+
+
+ false
+
+
+ false
+
+
Real Time Streaming
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 15937c4933..b41a03a3f4 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -1464,6 +1464,14 @@ Graphics Quality can be raised in Preferences > Graphics.
The region [REGION] does not allow terraforming.
fail
+
+
+You are not allowed to terraform parcel [PARCEL].
+ fail
+
+
+Unable to leave group: [reason].
+ reason
+
+
+
+
+You have left the group [group_name].
+ group_name
+
+
+
+
+ You can't wear a folder containing more than [AMOUNT] items. You can change this limit in Advanced > Show Debug Settings > WearFolderLimit.
+ fail
+
+
confirm
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml
index 234d316069..e9dcd6ab5a 100755
--- a/indra/newview/skins/default/xui/fr/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
index ec7dd8c095..372d61263f 100755
--- a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
@@ -31,10 +31,10 @@
-
+
-
-
+
+
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 45ab603d34..a514e24683 100755
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -28,6 +28,45 @@
Échec d'initialisation des graphiques. Veuillez mettre votre pilote graphique à jour.
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [Notes de version]]
+
+
+ Compilé avec [COMPILER] version [COMPILER_VERSION]
+
+
+ Vous êtes à [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] dans [REGION], se trouvant à <nolink>[HOSTNAME]</nolink> ([HOSTIP])
+SLURL : <nolink>[SLURL]</nolink>
+(coordonnées globales [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ CPU : [CPU]
+Mémoire : [MEMORY_MB] Mo
+Version OS : [OS_VERSION]
+Distributeur de cartes graphiques : [GRAPHICS_CARD_VENDOR]
+Carte graphique : [GRAPHICS_CARD]
+
+
+ Version Windows Graphics Driver : [GRAPHICS_DRIVER_VERSION]
+
+
+ Version OpenGL : [OPENGL_VERSION]
+
+Version libcurl : [LIBCURL_VERSION]
+Version J2C Decoder : [J2C_VERSION]
+Version Audio Driver : [AUDIO_DRIVER_VERSION]
+Version Qt Webkit : [QT_WEBKIT_VERSION]
+Version serveur vocal : [VOICE_VERSION]
+
+
+ Paquets perdus : [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ Erreur lors de la récupération de l'URL des notes de version du serveur.
+
Restauration...
@@ -936,15 +975,15 @@ Veuillez réessayer de vous connecter dans une minute.
Contrôler votre caméra
+
+ Vous téléporter
+
Pas connecté(e)
(Vous)
-
- Vous téléporter
-
Rejoindre une expérience
@@ -1269,8 +1308,7 @@ Veuillez réessayer de vous connecter dans une minute.
Les achats que vous avez effectués sur la Place du marché s'affichent ici. Vous pouvez alors les faire glisser vers votre inventaire afin de les utiliser.
- Sans contraintes
-
+
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
@@ -1299,6 +1337,18 @@ Veuillez réessayer de vous connecter dans une minute.
Pour mettre des dossiers en vente sur la [[MARKETPLACE_DASHBOARD_URL] Place du marché], faites-les glisser vers cette zone et cliquez sur "Envoyer vers la Place du marché".
+
+ Initialisation de la Place du marché...
+
+
+ Nous sommes en train d'accéder à votre compte dans la [[MARKETPLACE_CREATE_STORE_URL] boutique de la Place du marché].
+
+
+ Erreurs de la Place du marché.
+
+
+ La [[MARKETPLACE_CREATE_STORE_URL] boutique de la Place du marché] renvoie des erreurs.
+
Aucune erreur
@@ -1326,6 +1376,9 @@ Veuillez réessayer de vous connecter dans une minute.
Ouvrir les repères
+
+ Sans contraintes
+
@@ -1726,6 +1779,9 @@ Veuillez réessayer de vous connecter dans une minute.
Téléchargé, compilation en cours
+
+ Service de compilation de script indisponible.
+
Script introuvable sur le serveur.
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
new file mode 100644
index 0000000000..f7b2b1ab4a
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
@@ -0,0 +1,154 @@
+
+
+
+ Misuratore del lag
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ Programma in locale
+
+
+ 10
+
+
+ 15
+
+
+ Normale, finestra sullo sfondo
+
+
+ Velocità dei frame al di sotto di [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Velocità dei frame tra [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normale
+
+
+ Possibile causa: Campo visivo impostato troppo alto
+
+
+ Possibile causa: Caricamento immagini
+
+
+ Possibile causa: Troppe immagini in memoria
+
+
+ Possibile causa: Troppi oggetti complessi intorno
+
+
+ Network
+
+
+ 10
+
+
+ 5
+
+
+ La connessione sta calando al di sotto del [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti
+
+
+ La connessione sta calando tra il [NETWORK_PACKET_LOSS_WARNING]% e il [NETWORK_PACKET_LOSS_CRITICAL]% di pacchetti
+
+
+ Normale
+
+
+ 600
+
+
+ 300
+
+
+ Il tempo di ping della connessione è al di sopra di [NETWORK_PING_CRITICAL] ms
+
+
+ Il tempo di ping della connessione è tra [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Possibile cattiva connessione o la larghezza di banda impostata nelle preferenze troppo alta.
+
+
+ Possibile cattiva connessione o l'apertura di un programma di scambio files.
+
+
+ Server
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Velocità dei frame al di sotto di [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Velocità dei frame tra [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
+
+
+ Normale
+
+
+ Possibile causa: troppi oggetti fisici
+
+
+ Possibile causa: troppi oggetti scriptati
+
+
+ Possibile causa: eccessivo traffico sulla rete
+
+
+ Possibile causa: troppi residenti in movimento nella regione
+
+
+ Possibile causa: troppe elaborazioni di immagini
+
+
+ Possibile causa: carico eccessivo del simulatore
+
+
+ >>
+
+
+ <<
+
+
+
+ Client
+
+
+ Normale
+
+
+
+
+ Rete
+
+
+ Normale
+
+
+
+
+ Server
+
+
+ Normale
+
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_region_restarting.xml b/indra/newview/skins/default/xui/it/floater_region_restarting.xml
new file mode 100644
index 0000000000..d4497288e0
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ La regione in cui ti trovi ([NAME]) verrà riavviata tra breve.
+
+Se rimani in questa regione verrai scollegato da Second Life.
+
+
+ Secondi prima del riavvio
+[SECONDS]
+
+
+
+ La regione in cui ti trovi (il nome di regione più lungo) verrà riavviata tra breve.
+
+Se rimani in questa regione verrai scollegato da Second Life.
+
+
+ Secondi prima del riavvio
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..ca18812eb7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml
index 825b2ce57a..1d850516b7 100755
--- a/indra/newview/skins/default/xui/it/floater_stats.xml
+++ b/indra/newview/skins/default/xui/it/floater_stats.xml
@@ -4,17 +4,20 @@
-
+
-
-
+
+
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -53,7 +73,8 @@
-
+
+
@@ -62,7 +83,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
index b93b695300..215eb836c8 100755
--- a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
index 4606bfd699..14d72760ce 100755
--- a/indra/newview/skins/default/xui/it/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/it/menu_inventory.xml
@@ -73,6 +73,7 @@
+
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
index 81053fbd65..31236895fa 100755
--- a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
index c7fb23d5d9..3e0e59c078 100755
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -114,13 +114,13 @@ Per ulteriori informazioni consulta il [[MARKETPLACE_IMPORTS_URL] registro error
- Trasferimento non riuscito
+ Trasferimento non riuscito, errore '[ERROR_CODE]'
Nessuna cartella è stata inviata a Marketplace, a causa di un errore di sistema o di rete. Riprova più tardi.
- Inizializzazione Marketplace non riuscita
+ Inizializzazione Marketplace non riuscita, errore '[ERROR_CODE]'
L'inizializzazione con il Marketplace non ha avuto successo a causa di un errore di sistema o di rete. Riprova più tardi.
@@ -1735,6 +1735,10 @@ più del limite [LIMIT].
Sei sicuro di volere il teleport a <nolink>[LOCATION]</nolink>?
+
+ Sei sicuro di volere il teleport a <nolink>[LOCATION]</nolink>?
+
+
Teleport a [PICK]?
@@ -1945,6 +1949,9 @@ Cambierà migliaia di regioni e produrrà seri problemi ai vari server.
Si sono riscontrati problemi nell'aggiungere un nuovo manager della proprietà. Una o più proprietà potrebbero avere la lista dei manager piena.
+
+ Impossibile aggiungere il gestore o il proprietario della proprietà alla lista degli espulsi.
+
Si sono riscontrati problemi nell'aggiunta a questo elenco della proprietà. Una o più proprietà potrebbe avere una lista piena.
@@ -3044,13 +3051,13 @@ Per informazioni dettagliate, vedi il file del registro.
Non è stata ottenuta la capacità della regione '[CAPABILITY]'.
- Sei sicuro di volere condividere gli oggetti
+ Sei sicuro di volere condividere gli oggetti seguenti:
-<nolink>[MSG]</nolink>
+<nolink>[ITEMS]</nolink>
-Con i seguenti residenti?
+Con i seguenti residenti:
-[RESIDENTS]
+<nolink>[RESIDENTS]</nolink>
@@ -3062,7 +3069,7 @@ Sei sicuro di volere condividere gli oggetti seguenti:
Con i seguenti residenti:
-[RESIDENTS]
+<nolink>[RESIDENTS]</nolink>
@@ -3518,10 +3525,6 @@ Riprova tra un minuto.
Non sei più benvenuto qui e hai [EJECT_TIME] secondi per andartene.
-
- Non puoi entrare in questa regione perché
-il server è pieno.
-
Opzione Salva nell'inventario disattivata
@@ -3711,6 +3714,9 @@ il server è pieno.
L'oggetto usa troppe risorse per la fisica -- le sue dinamiche sono state disattivate.
+
+ L'oggetto '[OBJECT_NAME]' a [SLURL] non può eseguire il teleport del gestore della proprietà alla sua casa.
+
Sei stato teleportato nella posizione iniziale dall'oggetto '[OBJECT_NAME]' del lotto '[PARCEL_NAME]'
@@ -3901,13 +3907,18 @@ il server è pieno.
Non sono stati selezionati abbastanza lotti affittati da collegare.
- Terreno non divisibile. Hai selezionato più di un lotto. Prova a selezionare una quantità di terreno più piccola.
+ Impossibile suddividere il terreno.
+È stato selezionato più di un lotto.
+Prova a selezionare un pezzo di terreno più piccolo.
- impossibile suddividere il terreno. Impossibile trovare il lotto. Invia una segnalazione con Aiuto -> Segnala bug...
+ Impossibile suddividere il terreno.
+Lotto non trovato.
+Invia una segnalazione con Aiuto -> Segnala Bug...
- Impossibile suddividere il terreno. È stato selezionato l'intero lotto. Prova a selezionare un pezzo di terreno più piccolo.
+ Impossibile suddividere il terreno. È stato selezionato un intero lotto.
+Prova a selezionare un pezzo di terreno più piccolo.
Il terreno è stato diviso.
@@ -4047,4 +4058,8 @@ il server è pieno.
Impossibile spostare i file. Il percorso precedente è stato ripristinato.
+
+ Il file della cronologia del file sta ancora eseguendo l'operazione precedente. Riprova nuovamente tra qualche minuto oppure chatta con un'altra persona.
+
+
diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
index 79edb70da4..e7a532a5d7 100755
--- a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml
index 88acdac528..4e725ff4cc 100755
--- a/indra/newview/skins/default/xui/it/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_roles.xml
@@ -21,6 +21,7 @@ cliccando sui loro nomi.
+
diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml
index 3268b239c4..f259d31bb1 100755
--- a/indra/newview/skins/default/xui/it/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_debug.xml
@@ -7,11 +7,8 @@
sconosciuta
-
-
-
Restituisci oggetti
@@ -31,10 +28,8 @@
-
-
-
-
+
+
diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml
index c550e005ae..3e2f593d2f 100755
--- a/indra/newview/skins/default/xui/it/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
index 907857bf5a..2f00a023bb 100755
--- a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
index 36bf6e5236..b3c2b86906 100755
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -25,6 +25,45 @@
Inizializzazione grafica non riuscita. Aggiorna il driver della scheda grafica!
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+
+
+ Generato con [COMPILER] versione [COMPILER_VERSION]
+
+
+ Tu sei a [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] che si trova a <nolink>[HOSTNAME]</nolink> ([HOSTIP])
+SLURL: <nolink>[SLURL]</nolink>
+(coordinate globali [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ CPU: [CPU]
+Memoria: [MEMORY_MB] MB
+Versione sistema operativo: [OS_VERSION]
+Venditore scheda grafica: [GRAPHICS_CARD_VENDOR]
+Scheda grafica: [GRAPHICS_CARD]
+
+
+ Versione driver Windows per grafica: [GRAPHICS_DRIVER_VERSION]
+
+
+ Versione OpenGL: [OPENGL_VERSION]
+
+Versione libcurl: [LIBCURL_VERSION]
+Versione J2C Decoder: [J2C_VERSION]
+Versione Driver audio: [AUDIO_DRIVER_VERSION]
+Versione Qt Webkit: [QT_WEBKIT_VERSION]
+Versione Server voice: [VOICE_VERSION]
+
+
+ Pacchetti perduti: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ Errore nel recupero URL note rilascio versione
+
Ripristino in corso...
@@ -930,12 +969,12 @@ Prova ad accedere nuovamente tra un minuto.
Controllare la tua fotocamera
-
- (Tu)
-
Teleportarti
+
+ (Tu)
+
Partecipa a un'esperienza
@@ -1260,8 +1299,7 @@ Prova ad accedere nuovamente tra un minuto.
Gli acquissti dal mercato verranno mostrati qui. Potrai quindi trascinarli nel tuo inventario per usarli.
- Libero
-
+
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
@@ -1290,6 +1328,18 @@ Prova ad accedere nuovamente tra un minuto.
Trascina le cartelle in questa area e clicca su "Invia a Marketplace" per metterle in vendita su [[MARKETPLACE_DASHBOARD_URL] Marketplace].
+
+ Inizializzazione Marketplace.in corso
+
+
+ Stiamo eseguendo l'accesso al tuo account sul [[MARKETPLACE_CREATE_STORE_URL] negozio Marketplace].
+
+
+ Errori in Marketplace.
+
+
+ Il [[MARKETPLACE_CREATE_STORE_URL] negozio nel Marketplace] ha riportato errori.
+
Nessun errore
@@ -1317,6 +1367,9 @@ Prova ad accedere nuovamente tra un minuto.
Apri luoghi di riferimento
+
+ Libero
+
@@ -1713,6 +1766,9 @@ Prova ad accedere nuovamente tra un minuto.
Scaricato, in compilazione
+
+ Il servizio di compilazione degli script non è disponibile
+
Script non trovato sul server.
diff --git a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml
new file mode 100644
index 0000000000..e3546cd837
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ ラグ メーター
+
+
+ 350
+
+
+ ラグ
+
+
+ 90
+
+
+ クライアント
+
+
+ 10
+
+
+ 15
+
+
+ ノーマル、ウィンドウは背景に
+
+
+ クライアント フレームレート < [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ クライアント フレームレート: [CLIENT_FRAME_RATE_CRITICAL] ~ [CLIENT_FRAME_RATE_WARNING]
+
+
+ ノーマル
+
+
+ 考えられる原因: 描画距離の設定が大きすぎる
+
+
+ 考えられる原因: 画像のロード中
+
+
+ 考えられる原因: メモリ内の画像数が多すぎる
+
+
+ 考えられる原因: 画面に含まれる複雑なオブジェクトが多すぎる
+
+
+ ネットワーク
+
+
+ 10
+
+
+ 5
+
+
+ 接続でドロップされるパケットの割合: > [NETWORK_PACKET_LOSS_CRITICAL]
+
+
+ 接続でドロップされるパケットの割合:[NETWORK_PACKET_LOSS_WARNING] ~ [NETWORK_PACKET_LOSS_CRITICAL]
+
+
+ ノーマル
+
+
+ 600
+
+
+ 300
+
+
+ 接続の ping 時間: > [NETWORK_PING_CRITICAL] ミリ秒
+
+
+ 接続の ping 時間: [NETWORK_PING_WARNING] ~ [NETWORK_PING_CRITICAL] ミリ秒
+
+
+ 接続不良になっているか、帯域幅設定が高すぎます。
+
+
+ 接続不良になっているか、ファイル共有アプリケーションに問題があります。
+
+
+ サーバー
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ シミュレーターのフレームレート: < [SERVER_FRAME_RATE_CRITICAL]
+
+
+ シミュレーターのフレームレート: [SERVER_FRAME_RATE_CRITICAL] ~ [SERVER_FRAME_RATE_WARNING]
+
+
+ ノーマル
+
+
+ 考えられる原因: 物理的オブジェクトが多すぎる
+
+
+ 考えられる原因: スクリプトを含むオブジェクトが多すぎる
+
+
+ 考えられる原因: ネットワーク トラフィック過大
+
+
+ 考えられる原因: 地域内にて動いているアバターが多すぎる
+
+
+ 考えられる原因: 画像計算が多すぎる
+
+
+ 考えられる原因: シミュレーターの過負荷
+
+
+ >>
+
+
+ <<
+
+
+
+ クライアント
+
+
+ ノーマル
+
+
+
+ ネットワーク
+
+
+ ノーマル
+
+
+
+ サーバー
+
+
+ ノーマル
+
+
+
diff --git a/indra/newview/skins/default/xui/ja/floater_region_restarting.xml b/indra/newview/skins/default/xui/ja/floater_region_restarting.xml
new file mode 100644
index 0000000000..e9ba9d230d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ 今 ([NAME]) がいるリージョンを再起動しようとしています。
+
+このままここにいるとログアウトされます。
+
+
+ 再起動までの秒数
+[SECONDS]
+
+
+
+ 今 (-最長リージョン名-) がいるリージョンを再起動しようとしています。
+
+このままここにいるとログアウトされます。
+
+
+ 再起動までの秒数
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..f6edce026f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml
index 300058a31e..bd66294d15 100755
--- a/indra/newview/skins/default/xui/ja/floater_stats.xml
+++ b/indra/newview/skins/default/xui/ja/floater_stats.xml
@@ -4,17 +4,20 @@
-
+
-
-
+
+
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -64,8 +84,8 @@
-
-
+
+
@@ -74,7 +94,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
index b04f602134..80ce080e39 100755
--- a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
index 106b09453a..8d6c983aa7 100755
--- a/indra/newview/skins/default/xui/ja/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/menu_inventory.xml
@@ -70,6 +70,7 @@
+
diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml
index 66bc32214f..61642048b8 100755
--- a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml
index 169da27ce5..908af3d66a 100755
--- a/indra/newview/skins/default/xui/ja/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_debug.xml
@@ -7,11 +7,8 @@
未知
-
-
-
オブジェクトの返却
@@ -31,10 +28,8 @@
-
-
-
-
+
+
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml
index 65148cf1ee..d23007dc6b 100755
--- a/indra/newview/skins/default/xui/ja/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
index 32e84ce542..5aa0e86a5b 100755
--- a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
@@ -28,12 +28,12 @@
-
+
-
+
-
+
diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
new file mode 100644
index 0000000000..8038550bcb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Pomiar lagów
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ Klient
+
+
+ 10
+
+
+ 15
+
+
+ W normie, okno w tle
+
+
+ Ilość klatek na sekundę klienta poniżej [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Ilość klatek na sekundę pomiędzy [CLIENT_FRAME_RATE_CRITICAL] i [CLIENT_FRAME_RATE_WARNING]
+
+
+ W normie
+
+
+ Przyczyna: dystans rysowania jest za wysoki
+
+
+ Przyczyna: ładowanie obrazu
+
+
+ Przyczyna: za dużo obrazów w pamięci
+
+
+ Przyczyna: za dużo złożonych obiektów
+
+
+ Sieć
+
+
+ 10
+
+
+ 5
+
+
+ Utrata pakietów przekracza [NETWORK_PACKET_LOSS_CRITICAL]%
+
+
+ Utrata pakietów przekracza [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]%
+
+
+ W normie
+
+
+ 600
+
+
+ 300
+
+
+ Fatalny ping - [NETWORK_PING_CRITICAL] ms
+
+
+ Wolny ping - [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Złe połączenie lub przepustowość.
+
+
+ Złe połączenie lub aplikacja współdzieląca pliki.
+
+
+ Serwer
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Ilość klatek na sekundę poniżej [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Ilość klatek na sekundę pomiędzy [SERVER_FRAME_RATE_CRITICAL] i [SERVER_FRAME_RATE_WARNING]
+
+
+ W normie
+
+
+ Przyczyna: za dużo obiektów fizycznych
+
+
+ Przyczyna: za dużo obieków skryptowanych
+
+
+ Przyczyna: za duży ruch w sieci
+
+
+ Przyczyna: za dużo poruszających się awatarów w regionie
+
+
+ Przyczyna: za dużo kalkulacji obrazu
+
+
+ Przyczyna: symulator ładuje się zbyt powoli
+
+
+ >>
+
+
+ <<
+
+
+
+ Klient
+
+
+ W normie
+
+
+
+ Sieć
+
+
+ W normie
+
+
+
+ Serwer
+
+
+ W normie
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
new file mode 100644
index 0000000000..9932318293
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
@@ -0,0 +1,154 @@
+
+
+
+ Medidor de Atraso
+
+
+ 360
+
+
+ Atraso
+
+
+ 90
+
+
+ Cliente
+
+
+ 10
+
+
+ 15
+
+
+ Normal, janela por baixo
+
+
+ Taxa de quadros do Cliente abaixo de [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Taxa de quadros do Cliente entre [CLIENT_FRAME_RATE_CRITICAL] e [CLIENT_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Causa possível: Distância de desenho ajustada muito alta
+
+
+ Causa possível: Carregamento de Imagens
+
+
+ Causa possível: Muitas imagens na memória
+
+
+ Causa possível: Muitos objetos complexos na cena
+
+
+ Rede
+
+
+ 10
+
+
+ 5
+
+
+ Conexão está caindo para cerca de [NETWORK_PACKET_LOSS_CRITICAL]% de pacotes
+
+
+ Conexão está caindo [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% de pacotes
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Tempo de conexão de ping é cerca de [NETWORK_PING_CRITICAL] ms
+
+
+ Tempo de conexão de ping é [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Possível conexão ruim ou 'Largura de Banda' escolhida muito alta.
+
+
+ Possível conexão ruim ou aplicativos compartilhando arquivos.
+
+
+ Servidor
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Taxa de quadros abaixo de [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Taxa de quadros entre [SERVER_FRAME_RATE_CRITICAL] e [SERVER_FRAME_RATE_WARNING]
+
+
+ Normal
+
+
+ Causa possível: Muitos objetos físicos
+
+
+ Causa possível: Muitos objetos com scripts
+
+
+ Causa possível: Muito tráfego na rede
+
+
+ Causa possível: Muitas pessoas se movendo na região
+
+
+ Causa possível: Muitos cálculos de imagem
+
+
+ Causa possível: Carga no simulador muito pesada
+
+
+ >>
+
+
+ <<
+
+
+
+ Cliente
+
+
+ Normal
+
+
+
+
+ Rede
+
+
+ Normal
+
+
+
+
+ Servidor
+
+
+ Normal
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_region_restarting.xml b/indra/newview/skins/default/xui/pt/floater_region_restarting.xml
new file mode 100644
index 0000000000..7fd13c0d75
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ A região na qual você está ([NAME]) está prestes a ser reiniciada.
+
+Se permanecer aqui, você será desconectado.
+
+
+ Segundos até o reinício
+[SECONDS]
+
+
+
+ A região na qual você está (-Nome mais longo da região-) está prestes a ser reiniciada.
+
+Se permanecer aqui, você será desconectado.
+
+
+ Segundos até o reinício
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..027e1ef311
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pt/floater_stats.xml b/indra/newview/skins/default/xui/pt/floater_stats.xml
index be53624145..ef3307f54a 100755
--- a/indra/newview/skins/default/xui/pt/floater_stats.xml
+++ b/indra/newview/skins/default/xui/pt/floater_stats.xml
@@ -4,17 +4,20 @@
-
+
-
-
+
+
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -53,7 +73,8 @@
-
+
+
@@ -62,7 +83,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml
index beba969b7e..f6211790a8 100755
--- a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
index a3a648eb34..636b356c8b 100755
--- a/indra/newview/skins/default/xui/pt/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory.xml
@@ -70,6 +70,7 @@
+
diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
index ec1e7a0950..3a2b3a8847 100755
--- a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 78fc9b5f24..ed13932bb1 100755
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -113,15 +113,15 @@ Consulte o [[MARKETPLACE_IMPORTS_URL] log de erros] para mais informações.
- Falha de transferência
+ Falha na transferência com o erro '[ERROR_CODE]'
-Nenhuma pasta enviada para o Mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde.
+Nenhuma pasta foi enviada ao Marketplace devido a um erro do sistema ou da rede. Tente novamente mais tarde.
- Falha na inicialização do Mercado
+ Falha na inicialização do Marketplace com o erro '[ERROR_CODE]'
-Falha na inicialização do mercado devido a um erro do sistema ou da rede. Tente novamente mais tarde.
+Ocorreu uma falha na inicialização do Marketplace devido a um erro do sistema ou da rede. Tente novamente mais tarde.
@@ -1723,6 +1723,10 @@ Por favor volte mais tarde.
Tem certeza de quer ser teletransportado para <nolink>[LOCATION]</nolink>?
+
+ Tem certeza de quer ser teletransportado para <nolink>[LOCATION]</nolink>?
+
+
Teletransportar para [PICK]?
@@ -1933,6 +1937,9 @@ Isto mudará milhares de regiões e fará o spaceserver soluçar.
Problemas em adicionar um novo gerente da propriedade. Uma ou mais propriedades podem ter uma lista de gerentes cheia.
+
+ Não é possível adicionar proprietários ou gerentes de terreno à lista de bloqueio.
+
Problemas em adicionar a esta lista de propriedades. Uma ou mais propriedades podem ter uma lista cheia.
@@ -3028,19 +3035,25 @@ Mais detalhes no log.
Não foi possível obter o recurso '[CAPABILITY]' da região.
- Tem certeza de que quer compartilhar os itens abaixo?
+ Tem certeza de que deseja compartilhar os itens abaixo?
<nolink>[ITEMS]</nolink>
Com os seguintes residentes:
-[RESIDENTS]
+<nolink>[RESIDENTS]</nolink>
- Apenas uma pasta pode ser compartilhada por vez.
+ É possível compartilhar apenas uma pasta de cada vez.
-Tem certeza de que quer compartilhar os itens abaixo?
+Tem certeza de que deseja compartilhar os itens abaixo?
+
+<nolink>[ITEMS]</nolink>
+
+Com os seguintes residentes:
+
+<nolink>[RESIDENTS]</nolink>
@@ -3494,10 +3507,6 @@ Tente novamente em instantes.
Você não tem mais permissão para ficar aqui e tem [EJECT_TIME] segundos para sair.
-
- Você não pode entrar nesta região porque
-o servidor está cheio.
-
Salvar no inventário foi desativado.
@@ -3687,6 +3696,9 @@ o servidor está cheio.
O objeto usa muitos recursos físicos – sua dinâmica foi desativada.
+
+ O objeto '[OBJECT_NAME]' em [SLURL] não pode teleportar gerentes de terreno de volta para casa.
+
Você foi teletransportado para seu início pelo objeto '[OBJECT_NAME]' no lote '[PARCEL_NAME]'
@@ -3877,13 +3889,18 @@ o servidor está cheio.
Não há lotes alugados suficientes na seleção para reunir.
- Não é possível dividir o terreno. Há mais de um lote selecionado. Tente selecionar um pedaço menor de terreno.
+ Não é possível dividir o terreno.
+Mais de um lote foi selecionado.
+Tente selecionar uma quantidade menor de terreno.
- Não é possível dividir o terreno. Não é possível encontrar o lote. Comunique isso em Ajuda -> Relatar bug...
+ Não é possível dividir o terreno.
+Não é possível encontrar o lote.
+Reporte em Ajuda -> Relatar bug...
- Não é possível dividir o terreno. O lote inteiro está selecionado. Tente selecionar um pedaço menor do terreno.
+ Não é possível dividir o terreno. Todo o lote foi selecionado.
+Tente selecionar uma quantidade menor de terreno.
O terreno foi dividido.
@@ -4023,4 +4040,8 @@ o servidor está cheio.
Não foi possível mover arquivos. Caminho anterior restaurado.
+
+ O arquivo de histórico de bate-papo está ocupado com uma operação anterior. Tente novamente em alguns minutos ou selecione outra pessoa para bater papo.
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
index 3928a8468b..a71d221408 100755
--- a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
index 9f48e60ad5..4879da8b86 100755
--- a/indra/newview/skins/default/xui/pt/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
@@ -19,8 +19,9 @@
+
-
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
index be15d40d74..9070563fd0 100755
--- a/indra/newview/skins/default/xui/pt/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
@@ -7,11 +7,8 @@
desconhecido
-
-
-
Devolver objeto
@@ -31,10 +28,8 @@
-
-
-
-
+
+
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml
index 4be1cd11c0..a0d4579a04 100755
--- a/indra/newview/skins/default/xui/pt/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
index c44345323f..4747d14101 100755
--- a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
@@ -33,7 +33,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 1d3a24c02c..2e28fd81a9 100755
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -25,6 +25,45 @@
Falha na inicialização dos gráficos. Atualize seu driver gráfico!
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [Notas da versão]]
+
+
+ Construído com [COMPILER] versão [COMPILER_VERSION]
+
+
+ Você está em [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] em [REGION] localizado em <nolink>[HOSTNAME]</nolink> ([HOSTIP])
+SLURL: <nolink>[SLURL]</nolink>
+(coordenadas globais [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ CPU: [CPU]
+Memória: [MEMORY_MB] MBs
+Versão OS: [OS_VERSION]
+Placa de vídeo: [GRAPHICS_CARD_VENDOR]
+Placa gráfica: [GRAPHICS_CARD]
+
+
+ Versão do driver de vídeo Windows: [GRAPHICS_CARD_VENDOR]
+
+
+ Versão OpenGL: [OPENGL_VERSION]
+
+Versão libcurl: [LIBCURL_VERSION]
+Versão J2C Decoder: [J2C_VERSION]
+Versão do driver de áudio: [AUDIO_DRIVER_VERSION]
+Versão Qt Webkit: [QT_WEBKIT_VERSION]
+Versão do servidor de voz: [VOICE_VERSION]
+
+
+ Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ Erro ao obter URL de notas de versão do servidor.
+
Restaurando...
@@ -891,12 +930,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
Controle sua camera
-
- (Você)
-
Teletransportá-lo
+
+ (Você)
+
Participar de uma experiência
@@ -1221,8 +1260,7 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
Suas compras do Marketplace aparecerão aqui. Depois, você poderá arrastá-las para seu inventário para usá-las.
- Sem limites
-
+
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
@@ -1251,6 +1289,18 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
Arraste as pastas para estas áreas e então clique em "Enviar para Mercado" para listar os itens para venda no [[MARKETPLACE_DASHBOARD_URL] Mercado].
+
+ Inicializando o Marketplace.
+
+
+ Estamos acessando sua conta na [loja [MARKETPLACE_CREATE_STORE_URL] do Marketplace].
+
+
+ Erros do Marketplace.
+
+
+ A loja [[MARKETPLACE_CREATE_STORE_URL] no Marketplace] está retornando erros.
+
Sem erros
@@ -1278,6 +1328,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
Marcos abertos
+
+ Sem limites
+
@@ -1672,6 +1725,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
Baixado, agora compilando
+
+ Serviço de compilação de scripts não disponível
+
Script não encontrado no servidor.
diff --git a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
new file mode 100644
index 0000000000..c420006a03
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Уровень лагов
+
+
+ 360
+
+
+ Лаг
+
+
+ 90
+
+
+ Клиент
+
+
+ 10
+
+
+ 15
+
+
+ Нормально, окно в фоне
+
+
+ Частота кадров клиента ниже [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Частота кадров клиента от [CLIENT_FRAME_RATE_CRITICAL] до [CLIENT_FRAME_RATE_WARNING]
+
+
+ Нормально
+
+
+ Возможная причина: дальность отрисовки слишком велика
+
+
+ Возможная причина: загрузка изображений
+
+
+ Возможная причина: слишком много изображений в памяти
+
+
+ Возможная причина: слишком много сложных объектов в сцене
+
+
+ Сеть
+
+
+ 10
+
+
+ 5
+
+
+ Сеть теряет более [NETWORK_PACKET_LOSS_CRITICAL]% пакетов
+
+
+ Сеть теряет [NETWORK_PACKET_LOSS_WARNING]–[NETWORK_PACKET_LOSS_CRITICAL]% пакетов
+
+
+ Нормально
+
+
+ 600
+
+
+ 300
+
+
+ Пинг соединения более [NETWORK_PING_CRITICAL] мс
+
+
+ Пинг соединения [NETWORK_PING_WARNING]–[NETWORK_PING_CRITICAL] мс
+
+
+ Возможно, плохое соединение, или параметр «Ширина канала» слишком велик.
+
+
+ Возможно, плохое соединение или есть работающие файлообменные программы.
+
+
+ Сервер
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Частота кадров сервера ниже [SERVER_FRAME_RATE_CRITICAL]
+
+
+ Частота кадров сервера [SERVER_FRAME_RATE_CRITICAL]–[SERVER_FRAME_RATE_WARNING]
+
+
+ Нормально
+
+
+ Возможная причина: слишком много физических объектов
+
+
+ Возможная причина: слишком много скриптовых объектов
+
+
+ Возможная причина: слишком большой сетевой трафик
+
+
+ Возможная причина: слишком много людей в регионе
+
+
+ Возможная причина: слишком много изображений
+
+
+ Возможная причина: сервер сильно загружен
+
+
+ >>
+
+
+ <<
+
+
+
+ Клиент
+
+
+ Нормально
+
+
+
+ Сеть
+
+
+ Нормально
+
+
+
+ Сервер
+
+
+ Нормально
+
+
+
diff --git a/indra/newview/skins/default/xui/ru/floater_region_restarting.xml b/indra/newview/skins/default/xui/ru/floater_region_restarting.xml
new file mode 100644
index 0000000000..1b4c0e33dc
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ Регион, в котором вы находитесь ([NAME]), будет перезапущен.
+
+Если вы останетесь в этом регионе, вы выйдете из системы.
+
+
+ Секунд до перезапуска
+[SECONDS]
+
+
+
+ Регион, в котором вы находитесь (-длинное название региона-), будет перезапущен.
+
+Если вы останетесь в этом регионе, вы выйдете из системы.
+
+
+ Секунд до перезапуска
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..a101e62627
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/ru/floater_stats.xml b/indra/newview/skins/default/xui/ru/floater_stats.xml
index 46426495dc..33a14adca9 100755
--- a/indra/newview/skins/default/xui/ru/floater_stats.xml
+++ b/indra/newview/skins/default/xui/ru/floater_stats.xml
@@ -4,7 +4,7 @@
-
+
@@ -15,6 +15,9 @@
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -64,8 +84,8 @@
-
-
+
+
@@ -74,7 +94,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml
index ac2b4be003..049001e8c3 100755
--- a/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml
index 37ee19fc1d..308549c254 100755
--- a/indra/newview/skins/default/xui/ru/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/menu_inventory.xml
@@ -70,6 +70,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml
index 835c4e186e..885f6195b6 100755
--- a/indra/newview/skins/default/xui/ru/menu_login.xml
+++ b/indra/newview/skins/default/xui/ru/menu_login.xml
@@ -5,7 +5,15 @@
-
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml
index 6a22fd00dc..f495d27bf3 100755
--- a/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
index 9075422a82..4690c02112 100755
--- a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/ru/panel_group_roles.xml b/indra/newview/skins/default/xui/ru/panel_group_roles.xml
index c76de7b68a..d62bb200f1 100755
--- a/indra/newview/skins/default/xui/ru/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_roles.xml
@@ -21,6 +21,7 @@
+
diff --git a/indra/newview/skins/default/xui/ru/panel_region_debug.xml b/indra/newview/skins/default/xui/ru/panel_region_debug.xml
index 4be1e781fa..d294a9e22e 100755
--- a/indra/newview/skins/default/xui/ru/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_debug.xml
@@ -28,7 +28,8 @@
-
+
+
diff --git a/indra/newview/skins/default/xui/ru/panel_region_general.xml b/indra/newview/skins/default/xui/ru/panel_region_general.xml
index 8559be6c9e..8b4a127d7e 100755
--- a/indra/newview/skins/default/xui/ru/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
index 1741f63074..725b680050 100755
--- a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
@@ -28,13 +28,13 @@
-
+
-
+
-
-
+
+
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
index b96461dec1..482d69e6b6 100755
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -37,6 +37,45 @@
Ошибка инициализации графики. Обновите графический драйвер!
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+
+
+ Использован компилятор [COMPILER], версия [COMPILER_VERSION]
+
+
+ Вы в точке [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] в регионе «[REGION]», расположенном на <nolink>[HOSTNAME]</nolink> ([HOSTIP])
+SLURL: <nolink>[SLURL]</nolink>
+(глобальные координаты [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ ЦП: [CPU]
+Память: [MEMORY_MB] МБ
+Версия ОС: [OS_VERSION]
+Производитель графической платы: [GRAPHICS_CARD_VENDOR]
+Графическая плата: [GRAPHICS_CARD]
+
+
+ Версия графического драйвера Windows: [GRAPHICS_DRIVER_VERSION]
+
+
+ Версия OpenGL: [OPENGL_VERSION]
+
+Версия libcurl: [LIBCURL_VERSION]
+Версия декодера J2C: [J2C_VERSION]
+Версия драйвера звука: [AUDIO_DRIVER_VERSION]
+Версия Qt Webkit: [QT_WEBKIT_VERSION]
+Версия голосового сервера: [VOICE_VERSION]
+
+
+ Потеряно пакетов: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ Ошибка при получении URL-адреса заметок о выпуске сервера.
+
Восстановление...
@@ -934,15 +973,15 @@ support@secondlife.com.
Управлять камерой
+
+ Телепортировать вас
+
Нет подключения
(Вы)
-
- Телепортировать вас
-
Присоединитесь
@@ -1267,8 +1306,7 @@ support@secondlife.com.
Здесь будут показаны ваши покупки из торгового центра. Их можно будет перетащить в ваш инвентарь для использования.
- Без ограничения
-
+
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
@@ -1297,6 +1335,18 @@ support@secondlife.com.
Перетащите папки в эту область и щелкните «Отправить в торговый центр», чтобы выставить их на продажу в [[MARKETPLACE_DASHBOARD_URL] Торговом центре].
+
+ Инициализация Торгового центра.
+
+
+ Мы обращаемся к вашему аккаунту в [[MARKETPLACE_CREATE_STORE_URL] магазине].
+
+
+ Ошибки торгового центра.
+
+
+ [[MARKETPLACE_CREATE_STORE_URL] Магазин] возвращает ошибки.
+
Ошибок нет
@@ -1324,6 +1374,9 @@ support@secondlife.com.
Открыть закладки
+
+ Без ограничения
+
@@ -1724,6 +1777,9 @@ support@secondlife.com.
Загружено, компилируется
+
+ Служба компилирования скриптов недоступна
+
Скрипт не найден на сервере.
diff --git a/indra/newview/skins/default/xui/tr/floater_lagmeter.xml b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml
new file mode 100644
index 0000000000..736c50be90
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Gecikme Ölçer
+
+
+ 360
+
+
+ Gecikme
+
+
+ 90
+
+
+ İstemci
+
+
+ 10
+
+
+ 15
+
+
+ Normal, pencere alt zeminde
+
+
+ İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] altında
+
+
+ İstemci kare hızı [CLIENT_FRAME_RATE_CRITICAL] ile [CLIENT_FRAME_RATE_WARNING] arasınad
+
+
+ Normal
+
+
+ Muhtemel neden: Çizme mesafesi çok yüksek
+
+
+ Muhtemel neden: Görüntüler yükleniyor
+
+
+ Muhtemel neden: Bellekte çok fazla görüntü
+
+
+ Muhtemel neden: Sahnede çok fazla karmaşık nesne
+
+
+ Ağ
+
+
+ 10
+
+
+ 5
+
+
+ Bağlantı paketlerin % [NETWORK_PACKET_LOSS_CRITICAL]'sinden fazlasını bırakıyor
+
+
+ Bağlantı paketlerin % [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]'sini bırakıyor
+
+
+ Normal
+
+
+ 600
+
+
+ 300
+
+
+ Bağlantı ping süresi [NETWORK_PING_CRITICAL] ms.den fazla
+
+
+ Bağlantı ping süresi [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Muhtemel yetersiz bağlantı veya 'Bant Genişliği' tercihi çok yüksek.
+
+
+ Muhtemel yetersiz bağlantı veya dosya paylaşım uygulaması.
+
+
+ Sunucu
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ Simülatör kare hızı [SERVER_FRAME_RATE_CRITICAL] altında
+
+
+ Simülatör kare hızı [SERVER_FRAME_RATE_CRITICAL] ve [SERVER_FRAME_RATE_WARNING] arasında
+
+
+ Normal
+
+
+ Muhtemel Neden: Çok fazla fiziki nesne
+
+
+ Muhtemel Neden: Çok fazla komut dosyalı nesne
+
+
+ Muhtemel Neden: Çok fazla ağ trafiği
+
+
+ Muhtemel Neden: Bölgede hareket eden çok fazla insan var
+
+
+ Muhtemel Neden: Çok fazla görüntü hesabı
+
+
+ Muhtemel Neden: Simülatör yükü çok ağır
+
+
+ >>
+
+
+ <<
+
+
+
+ İstemci
+
+
+ Normal
+
+
+
+ Ağ
+
+
+ Normal
+
+
+
+ Sunucu
+
+
+ Normal
+
+
+
diff --git a/indra/newview/skins/default/xui/tr/floater_region_restarting.xml b/indra/newview/skins/default/xui/tr/floater_region_restarting.xml
new file mode 100644
index 0000000000..1f9ead8bdd
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ Şu anda içinde bulunduğunuz bölge ([NAME]) yeniden başlatılmak üzere.
+
+Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
+
+
+ Yeniden başlatma için kalan süre
+[SECONDS]
+
+
+
+ Şu anda içinde bulunduğunuz bölge (-Bölgenin uzun adı-) yeniden başlatılmak üzere.
+
+Bu bölgede kalmaya devam ederseniz oturumunuz sonlandırılacak.
+
+
+ Yeniden başlatma için kalan süre
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..ae0a94595d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/tr/floater_stats.xml b/indra/newview/skins/default/xui/tr/floater_stats.xml
index afce87bdaa..2c0c33737f 100755
--- a/indra/newview/skins/default/xui/tr/floater_stats.xml
+++ b/indra/newview/skins/default/xui/tr/floater_stats.xml
@@ -4,17 +4,20 @@
-
+
-
-
+
+
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -64,8 +84,8 @@
-
-
+
+
@@ -74,7 +94,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml
index d3ef490735..dc3724cfc8 100755
--- a/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/tr/menu_inventory.xml b/indra/newview/skins/default/xui/tr/menu_inventory.xml
index 51049427af..7239c4be06 100755
--- a/indra/newview/skins/default/xui/tr/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/tr/menu_inventory.xml
@@ -70,6 +70,7 @@
+
diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml
index 79c95407e8..ecd29370a5 100755
--- a/indra/newview/skins/default/xui/tr/menu_login.xml
+++ b/indra/newview/skins/default/xui/tr/menu_login.xml
@@ -5,7 +5,15 @@
-
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml
index 93984162e7..d7ff807c3d 100755
--- a/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
index 3d1cbf15e7..937d2a0d63 100755
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -70,11 +70,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -163,8 +163,6 @@
-
-
@@ -186,6 +184,7 @@
+
@@ -248,6 +247,7 @@
+
@@ -284,6 +284,7 @@
+
@@ -302,6 +303,7 @@
+
@@ -334,6 +336,7 @@
+
@@ -365,7 +368,6 @@
-
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
index 3fffd5ebe3..136b3d6ffb 100755
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -114,13 +114,13 @@ Daha fazla bilgi için bkz. [[MARKETPLACE_IMPORTS_URL] hata günlüğü].
- Aktarım başarılamadı
+ Aktarım '[ERROR_CODE]' hatası nedeniyle başarısız oldu
Bir sistem veya ağ hatası nedeniyle Pazaryerine hiçbir klasör gönderilemedi. Daha sonra tekrar deneyin.
- Pazaryeri başlatılamadı.
+ Pazaryeri başlatılması '[ERROR_CODE]' hatası nedeniyle başarısız oldu
Bir sistem veya ağ hatası nedeniyle Pazaryeri başlatılamadı. Daha sonra tekrar deneyin.
@@ -1731,6 +1731,10 @@ Lütfen daha sonra tekrar deneyin.
<nolink>[LOCATION]</nolink> konumuna ışınlanmak istediğinize emin misiniz?
+
+ <nolink>[LOCATION]</nolink> konumuna ışınlanmak istediğinize emin misiniz?
+
+
[PICK] konumuna ışınlanılsın mı?
@@ -1940,6 +1944,9 @@ Binlerce bölgeyi değiştirecek ve alan sunucusunu kesintiye uğratacaktır.
Yeni bir gayrimenkul yöneticisi eklenirken problem oluştu. Bir veya birden fazla gayrimenkulün yönetici listesi dolu olabilir.
+
+ Gayri menkul sahibi ya da yöneticisi yasaklı listesine eklenemedi.
+
Bu gayrimenkul listesine eklenirken problem oluştu. Bir veya birden fazla gayrimenkulün listesi dolu olabilir.
@@ -3042,9 +3049,9 @@ Ayrıntılar için günlük dosyasına bakın.
<nolink>[ITEMS]</nolink>
-Paylaşmanın yapılacağı Sakinler:
+Paylaşmanın yapılacağı Second Life Sakinleri:
-[RESIDENTS]
+<nolink>[RESIDENTS]</nolink>
@@ -3056,7 +3063,7 @@ Aşağıdaki öğeleri paylaşmak istediğinize emin misiniz?
Paylaşmanın yapılacağı Second Life Sakinleri:
-[RESIDENTS]
+<nolink>[RESIDENTS]</nolink>
@@ -3511,10 +3518,6 @@ Lütfen bir dakika sonra tekrar deneyin.
Daha fazla burada olma izniniz yok ve ayrılmak için [EJECT_TIME] saniyeniz var.
-
- Bu bölgeye giremezsiniz çünkü
-sunucu dolu.
-
Envantere Geri Kaydet devre dışı bırakıldı.
@@ -3698,6 +3701,9 @@ sunucu dolu.
Nesne çok fazla fizik kaynağı kullanıyor -- dinamikleri devre dışı bırakıldı.
+
+ [SLURL] adresindeki '[OBJECT_NAME]' nesnesi gayri menkul yöneticilerini ana konuma ışınlayamıyor.
+
'[PARCEL_NAME]' parseli üzerindeki '[OBJECT_NAME]' nesnesi tarafından ana konuma ışınlandınız
@@ -3888,13 +3894,18 @@ sunucu dolu.
Seçimde birleştirilecek yeterli sayıda lease edilmiş parsel yok.
- Arazi bölünemedi. Birden fazla parsel seçili durumda. Daha küçük bir arazi parçası seçmeyi deneyin.
+ Arazi bölünemiyor.
+Birden fazla parsel seçili.
+Daha küçük bir arazi parçası seçmeyi deneyin.
- Arazi bölünemiyor. Parsel bulunamıyor. Lütfen Yardım -> Hata Bildir ile bildirin...
+ Arazi bölünemiyor.
+Parsel bulunamıyor.
+Lütfen Yardım -> Hata Bildir... sekmesinden hatayı bildirin
- Arazi bölünemiyor. Tüm parsel seçilidir. Daha küçük bir arazi parçası seçmeyi deneyin.
+ Arazi bölünemiyor. Tüm parsel seçili.
+Daha küçük bir arazi parçası seçmeyi deneyin.
Arazi bölündü.
@@ -4034,4 +4045,8 @@ sunucu dolu.
Dosyalar taşınamıyor. Önceki yol geri yüklendi.
+
+ Sohbet geçmişi dosyası önceki işlemi gerçekleştirmekle meşgul. Lütfen bir kaç dakika sonra tekrar deneyin veya başka bir kişiyle sohbet etmeyi deneyin.
+
+
diff --git a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml
index 775d0ff876..974d359a52 100755
--- a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/tr/panel_group_roles.xml b/indra/newview/skins/default/xui/tr/panel_group_roles.xml
index 7a9ea61da7..ce0a5c5de6 100755
--- a/indra/newview/skins/default/xui/tr/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_roles.xml
@@ -20,6 +20,7 @@ Ctrl tuşuna basıp adlarına tıklayarak birden fazla Üye seçebilirsiniz.
+
diff --git a/indra/newview/skins/default/xui/tr/panel_region_debug.xml b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
index 834ece563f..74a0a1569e 100755
--- a/indra/newview/skins/default/xui/tr/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
@@ -28,7 +28,8 @@
-
+
+
diff --git a/indra/newview/skins/default/xui/tr/panel_region_general.xml b/indra/newview/skins/default/xui/tr/panel_region_general.xml
index 37da0f2cca..e6abef883d 100755
--- a/indra/newview/skins/default/xui/tr/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/tr/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
index d78f4eb726..9cf1c49ae8 100755
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -37,6 +37,45 @@
Grafik başlatma başarılamadı. Lütfen grafik sürücünüzü güncelleştirin!
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [Sürüm Notları]]
+
+
+ [COMPILER] [COMPILER_VERSION] sürümü ile oluşturuldu
+
+
+ <nolink>[HOSTNAME]</nolink> ([HOSTIP]) üzerinde bulunan [REGION] içerisinde [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] konumundasınız
+SLURL: <nolink>[SLURL]</nolink>
+(küresel koordinatlar [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ CPU: [CPU]
+Bellek: [MEMORY_MB] MB
+İşl. Sis. Sürümü: [OS_VERSION]
+Grafik Kartı Üreticisi: [GRAPHICS_CARD_VENDOR]
+Grafik Kartı: [GRAPHICS_CARD]
+
+
+ Windows Grafik Sürücüsü Sürümü: [GRAPHICS_DRIVER_VERSION]
+
+
+ OpenGL Sürümü: [OPENGL_VERSION]
+
+libcurl Sürümü: [LIBCURL_VERSION]
+J2C Kod Çözücü Sürümü: [J2C_VERSION]
+Ses Sürücüsü Sürümü: [AUDIO_DRIVER_VERSION]
+Qt Web Kit Sürümü: [QT_WEBKIT_VERSION]
+Ses Sunucusu Sürümü: [VOICE_VERSION]
+
+
+ Kaybolan Paketler: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ Sunucu sürümü notları URL'si alınırken hata oluştu.
+
Geri yükleniyor...
@@ -934,15 +973,15 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Kameranızı kontrol etmek
+
+ Sizi ışınlama
+
Bağlı Değil
(Siz)
-
- Sizi ışınlama
-
Bir tecrübeye katıl
@@ -1267,8 +1306,7 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Pazaryerinda satın aldıklarınız burada görünecektir. Bunları kullanmak için envanterinize sürükleyebilirsiniz.
- Kısıtsız
-
+
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/
@@ -1297,6 +1335,18 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Bu alana klasörleri sürükleyin ve bunları [[MARKETPLACE_DASHBOARD_URL] Pazaryerinde] satılık olarak duyurmak için "Pazaryerine Gönder" üzerine tıklayın.
+
+ Pazaryeri Başlatılıyor.
+
+
+ [[MARKETPLACE_CREATE_STORE_URL] Mağazası] üzerindeki hesabınıza erişiyoruz.
+
+
+ Pazaryeri Hataları
+
+
+ [[MARKETPLACE_CREATE_STORE_URL] Mağazası] hata döndürüyor.
+
Hata yok
@@ -1324,6 +1374,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Açık yer imleri
+
+ Kısıtsız
+
@@ -1724,6 +1777,9 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
Karşıdan yüklendi, şimdi derleniyor
+
+ Komut dosyası derleme hizmeti kullanılamıyor
+
Komut dosyası sunucuda bulunamadı.
diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
new file mode 100644
index 0000000000..6e58e7332f
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
@@ -0,0 +1,151 @@
+
+
+
+ Lag 測量器
+
+
+ 360
+
+
+ Lag
+
+
+ 90
+
+
+ 客戶端
+
+
+ 10
+
+
+ 15
+
+
+ Normal, window in background
+
+
+ Client frame rate below [CLIENT_FRAME_RATE_CRITICAL]
+
+
+ Client frame rate between [CLIENT_FRAME_RATE_CRITICAL] and [CLIENT_FRAME_RATE_WARNING]
+
+
+ 正常
+
+
+ Possible cause: Draw distance set too high
+
+
+ Possible cause: Images loading
+
+
+ Possible cause: Too many images in memory
+
+
+ Possible cause: Too many complex objects in scene
+
+
+ 網路
+
+
+ 10
+
+
+ 5
+
+
+ Connection is dropping over [NETWORK_PACKET_LOSS_CRITICAL]% of packets
+
+
+ Connection is dropping [NETWORK_PACKET_LOSS_WARNING]%-[NETWORK_PACKET_LOSS_CRITICAL]% of packets
+
+
+ 正常
+
+
+ 600
+
+
+ 300
+
+
+ Connection ping time is over [NETWORK_PING_CRITICAL] ms
+
+
+ Connection ping time is [NETWORK_PING_WARNING]-[NETWORK_PING_CRITICAL] ms
+
+
+ Possible bad connection or 'Bandwidth' pref too high.
+
+
+ Possible bad connection or file-sharing app.
+
+
+ 伺服器
+
+
+ 20
+
+
+ 30
+
+
+ 20
+
+
+ 模擬器 framerate 低於 [SERVER_FRAME_RATE_CRITICAL]
+
+
+ 模擬器 framerate 介於 [SERVER_FRAME_RATE_CRITICAL] 與 [SERVER_FRAME_RATE_WARNING] 之間
+
+
+ 正常
+
+
+ 可能原因:太多物理物件
+
+
+ 可能原因:太多腳本物件
+
+
+ 可能原因:太多網路流量
+
+
+ 可能原因:地區有太多移動的人
+
+
+ 可能原因:太多圖像計算
+
+
+ 可能原因:模擬器負載過重
+
+
+ >>
+
+
+ <<
+
+
+
+ 客戶端
+
+
+ 正常
+
+
+
+ 網路
+
+
+ 正常
+
+
+
+ 伺服器
+
+
+ 正常
+
+
+
diff --git a/indra/newview/skins/default/xui/zh/floater_region_restarting.xml b/indra/newview/skins/default/xui/zh/floater_region_restarting.xml
new file mode 100644
index 0000000000..afac7da203
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_region_restarting.xml
@@ -0,0 +1,23 @@
+
+
+
+ 你所在的地區([NAME])即將重新啟動。
+
+如果你繼續留在這地區,你將會被登出。
+
+
+ 重新啟動倒數秒數:
+[SECONDS]
+
+
+
+ 你所在的地區(-最長地區名-)即將重新啟動。
+
+如果你繼續留在這地區,你將會被登出。
+
+
+ 重新啟動倒數秒數:
+ 32767
+
+
+
diff --git a/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml b/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml
new file mode 100644
index 0000000000..1a5c20abeb
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_scene_load_stats.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
index 4af5684ec1..282e61e73d 100755
--- a/indra/newview/skins/default/xui/zh/floater_stats.xml
+++ b/indra/newview/skins/default/xui/zh/floater_stats.xml
@@ -4,17 +4,20 @@
-
+
-
-
+
+
+
+
+
@@ -26,15 +29,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -64,8 +84,8 @@
-
-
+
+
@@ -74,7 +94,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
index ef0986a13b..cefb395256 100755
--- a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
+++ b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
@@ -2,6 +2,7 @@
+
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml
index 7f745ffaa7..478f987035 100755
--- a/indra/newview/skins/default/xui/zh/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/zh/menu_inventory.xml
@@ -70,6 +70,7 @@
+
diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml
index c636e108ad..bf60983896 100755
--- a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml
+++ b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml
@@ -2,5 +2,5 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
index 5dcdd135b6..bc257165c1 100755
--- a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
@@ -28,7 +28,7 @@
-
+
diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
index decc6cb9e4..15e56e6d34 100755
--- a/indra/newview/skins/default/xui/zh/panel_group_roles.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
@@ -21,6 +21,7 @@
+
diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
index e5d5e6eaf7..0bb59a7b14 100755
--- a/indra/newview/skins/default/xui/zh/panel_region_debug.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
@@ -28,7 +28,8 @@
-
+
+
diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml
index f6b2c46354..0ce3b659b2 100755
--- a/indra/newview/skins/default/xui/zh/panel_region_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_region_general.xml
@@ -20,12 +20,12 @@
+
-
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml
index 4034a7154f..54ea7cab22 100755
--- a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml
@@ -25,15 +25,15 @@
-
+
-
+
-
+
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
index 1656b216f5..852f3423c3 100755
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -37,6 +37,45 @@
顯像初始化失敗。 請更新你的顯像卡驅動程式!
+
+ [APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL])
+[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]]
+
+
+ 以 [COMPILER_VERSION] 版本 [COMPILER] 建置
+
+
+ 你的方位是 [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1],地區名:[REGION],主機:<nolink>[HOSTNAME]</nolink> ([HOSTIP])
+第二人生URL:<nolink>[SLURL]</nolink>
+(全域坐標:[POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1])
+[SERVER_VERSION]
+[SERVER_RELEASE_NOTES_URL]
+
+
+ CPU:[CPU]
+記憶體:[MEMORY_MB] MB
+作業系統版本:[OS_VERSION]
+顯示卡供應商:[GRAPHICS_CARD_VENDOR]
+顯示卡:[GRAPHICS_CARD]
+
+
+ Windows 顯示驅動程式版本:[GRAPHICS_DRIVER_VERSION]
+
+
+ OpenGL 版本:[OPENGL_VERSION]
+
+libcurl 版本: [LIBCURL_VERSION]
+J2C 解碼器版本: [J2C_VERSION]
+音效驅動程式版本: [AUDIO_DRIVER_VERSION]
+Qt Webkit 版本: [QT_WEBKIT_VERSION]
+語音伺服器版本: [VOICE_VERSION]
+
+
+ 封包丟失:[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%)
+
+
+ 擷取伺服器版本說明 URL 時出錯。
+
回存中...
@@ -929,15 +968,15 @@ http://secondlife.com/viewer-access-faq
控制你的攝影機
+
+ 瞬間傳送你本人
+
未聯接
(你)
-
- 瞬間傳送你本人
-
加入體驗
@@ -1291,6 +1330,18 @@ http://secondlife.com/viewer-access-faq
將資料夾拖曳到這個區域,再點按「送往第二人生購物市集」,即可在[[MARKETPLACE_DASHBOARD_URL]第二人生購物市集]登列出售。
+
+ 正在初始化購物市集。
+
+
+ 我們正在求取你的[[MARKETPLACE_CREATE_STORE_URL] 購物市集商店]帳戶。
+
+
+ 購物市集出錯。
+
+
+ [[MARKETPLACE_CREATE_STORE_URL] 購物市集商店]正傳回錯誤。
+
零錯誤
@@ -1318,6 +1369,9 @@ http://secondlife.com/viewer-access-faq
開啟地標
+
+ 不受限
+
@@ -1718,6 +1772,9 @@ http://secondlife.com/viewer-access-faq
已下載,正在編譯中
+
+ 腳本編譯服務無法使用
+
伺服器上未發現腳本。