summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/CMakeLists.txt2
-rw-r--r--indra/newview/VIEWER_VERSION.txt2
-rwxr-xr-xindra/newview/app_settings/keywords_lsl_default.xml2
-rwxr-xr-xindra/newview/llfloaterpreference.cpp10
-rwxr-xr-xindra/newview/llfloatersnapshot.cpp18
-rwxr-xr-xindra/newview/llhudeffectlookat.cpp2
-rwxr-xr-xindra/newview/llmanipscale.cpp66
-rwxr-xr-xindra/newview/llmanipscale.h4
-rwxr-xr-xindra/newview/llpanelgrouplandmoney.cpp45
-rwxr-xr-xindra/newview/llpanellogin.cpp26
-rwxr-xr-xindra/newview/llpanelobject.cpp6
-rwxr-xr-xindra/newview/llpanelobject.h1
-rwxr-xr-xindra/newview/llpanelsnapshot.cpp35
-rwxr-xr-xindra/newview/llviewermedia.cpp2
-rwxr-xr-xindra/newview/llviewermenu.cpp10
-rwxr-xr-xindra/newview/llviewerobject.cpp1
-rwxr-xr-xindra/newview/llviewerparcelmgr.cpp6
-rwxr-xr-xindra/newview/llviewerregion.cpp18
-rwxr-xr-xindra/newview/llviewerregion.h2
-rwxr-xr-xindra/newview/llvoavatar.cpp9
-rwxr-xr-xindra/newview/llvoavatar.h1
-rwxr-xr-xindra/newview/llvoavatarself.cpp8
-rwxr-xr-xindra/newview/llvoavatarself.h1
-rwxr-xr-xindra/newview/llweb.cpp20
-rw-r--r--indra/newview/skins/default/textures/icons/hand.pngbin0 -> 957 bytes
-rwxr-xr-xindra/newview/skins/default/textures/textures.xml2
-rwxr-xr-xindra/newview/skins/default/xui/de/floater_stats.xml6
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_stats.xml1
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml12
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_general.xml14
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_preferences_sound.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/panel_status_bar.xml2
-rwxr-xr-xindra/newview/skins/default/xui/ru/menu_viewer.xml12
33 files changed, 224 insertions, 124 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 5f4c1c5aa9..318e3c8688 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -49,6 +49,7 @@ include(CMakeCopyIfDifferent)
include(LLAppearance)
include(PNG)
include(ZLIB)
+include(URIPARSER)
if (NOT HAVOK_TPV)
# When using HAVOK_TPV, the library is precompiled, so no need for this
@@ -1926,6 +1927,7 @@ endif (WINDOWS)
target_link_libraries(${VIEWER_BINARY_NAME}
${PNG_PRELOAD_ARCHIVES}
${ZLIB_PRELOAD_ARCHIVES}
+ ${URIPARSER_PRELOAD_ARCHIVES}
${UPDATER_LIBRARIES}
${GOOGLE_PERFTOOLS_LIBRARIES}
${LLAUDIO_LIBRARIES}
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index c282746153..e5403775b2 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.7.25
+3.7.26
diff --git a/indra/newview/app_settings/keywords_lsl_default.xml b/indra/newview/app_settings/keywords_lsl_default.xml
index 37dd2db93f..cea7a58949 100755
--- a/indra/newview/app_settings/keywords_lsl_default.xml
+++ b/indra/newview/app_settings/keywords_lsl_default.xml
@@ -10980,7 +10980,7 @@
</map>
</array>
<key>tooltip</key>
- <string>Rez directly off of a UUID if owner has dog-bit set.</string>
+ <string>Rez directly off of a UUID if owner has god-bit set.</string>
</map>
<key>llGround</key>
<map>
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index d3773767d0..598c7f9feb 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -701,13 +701,13 @@ void LLFloaterPreference::onOpen(const LLSD& key)
maturity_list->deleteItems(LLSD(SIM_ACCESS_ADULT));
}
}
- getChildView("maturity_desired_combobox")->setVisible( true);
+ getChildView("maturity_desired_combobox")->setEnabled( true);
getChildView("maturity_desired_textbox")->setVisible( false);
}
else
{
getChild<LLUICtrl>("maturity_desired_textbox")->setValue(maturity_combo->getSelectedItemLabel());
- getChildView("maturity_desired_combobox")->setVisible( false);
+ getChildView("maturity_desired_combobox")->setEnabled( false);
}
// Forget previous language changes.
@@ -2011,6 +2011,12 @@ void LLPanelPreference::cancel()
{
LLControlVariable* control = iter->first;
LLSD ctrl_value = iter->second;
+
+ if((control->getName() == "InstantMessageLogPath") && (ctrl_value.asString() == ""))
+ {
+ continue;
+ }
+
control->set(ctrl_value);
}
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
index 8677028942..04329ff66e 100755
--- a/indra/newview/llfloatersnapshot.cpp
+++ b/indra/newview/llfloatersnapshot.cpp
@@ -383,12 +383,20 @@ void LLFloaterSnapshot::Impl::updateControls(LLFloaterSnapshot* floater)
S32 w = gViewerWindow->getWindowWidthRaw();
LL_DEBUGS() << "Initializing width spinner (" << width_ctrl->getName() << "): " << w << LL_ENDL;
width_ctrl->setValue(w);
+ if(getActiveSnapshotType(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ width_ctrl->setIncrement(w >> 1);
+ }
}
if (height_ctrl->getValue().asInteger() == 0)
{
S32 h = gViewerWindow->getWindowHeightRaw();
LL_DEBUGS() << "Initializing height spinner (" << height_ctrl->getName() << "): " << h << LL_ENDL;
height_ctrl->setValue(h);
+ if(getActiveSnapshotType(floater) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ height_ctrl->setIncrement(h >> 1);
+ }
}
// Clamp snapshot resolution to window size when showing UI or HUD in snapshot.
@@ -823,6 +831,11 @@ void LLFloaterSnapshot::Impl::updateResolution(LLUICtrl* ctrl, void* data, BOOL
{
getWidthSpinner(view)->setValue(width);
getHeightSpinner(view)->setValue(height);
+ if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ getWidthSpinner(view)->setIncrement(width >> 1);
+ getHeightSpinner(view)->setIncrement(height >> 1);
+ }
}
if(original_width != width || original_height != height)
@@ -942,6 +955,11 @@ void LLFloaterSnapshot::Impl::setImageSizeSpinnersValues(LLFloaterSnapshot *view
{
getWidthSpinner(view)->forceSetValue(width);
getHeightSpinner(view)->forceSetValue(height);
+ if (getActiveSnapshotType(view) == LLSnapshotLivePreview::SNAPSHOT_TEXTURE)
+ {
+ getWidthSpinner(view)->setIncrement(width >> 1);
+ getHeightSpinner(view)->setIncrement(height >> 1);
+ }
}
// static
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index f3a48625a4..73120a0242 100755
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -39,8 +39,6 @@
#include "llrendersphere.h"
#include "llselectmgr.h"
#include "llglheaders.h"
-
-
#include "llxmltree.h"
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 2810941d83..52222c3727 100755
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -85,7 +85,6 @@ const LLManip::EManipPart MANIPULATOR_IDS[LLManipScale::NUM_MANIPULATORS] =
LLManip::LL_FACE_NEGZ
};
-
F32 get_default_max_prim_scale(bool is_flora)
{
// a bit of a hack, but if it's foilage, we don't want to use the
@@ -292,10 +291,6 @@ void LLManipScale::render()
LLGLEnable poly_offset(GL_POLYGON_OFFSET_FILL);
glPolygonOffset( -2.f, -2.f);
- // JC - Band-aid until edge stretch working similar to side stretch
- // in non-uniform.
- // renderEdges( bbox );
-
renderCorners( bbox );
renderFaces( bbox );
@@ -352,6 +347,10 @@ BOOL LLManipScale::handleMouseDownOnPart( S32 x, S32 y, MASK mask )
updateSnapGuides(bbox);
+ mFirstClickX = x;
+ mFirstClickY = y;
+ mIsFirstClick = true;
+
mDragStartPointGlobal = gAgent.getPosGlobalFromAgent(box_corner_agent);
mDragStartCenterGlobal = gAgent.getPosGlobalFromAgent(box_center_agent);
LLVector3 far_corner_agent = bbox.localToAgent( unitVectorToLocalBBoxExtent( -1.f * partToUnitVector( mManipPart ), bbox ) );
@@ -415,7 +414,15 @@ BOOL LLManipScale::handleHover(S32 x, S32 y, MASK mask)
}
else
{
- drag( x, y );
+ if((mFirstClickX != x) || (mFirstClickY != y))
+ {
+ mIsFirstClick = false;
+ }
+
+ if(!mIsFirstClick)
+ {
+ drag( x, y );
+ }
}
LL_DEBUGS("UserInput") << "hover handled by LLManipScale (active)" << LL_ENDL;
}
@@ -681,63 +688,38 @@ void LLManipScale::renderFaces( const LLBBox& bbox )
{
case 0:
conditionalHighlight( LL_FACE_POSZ, &z_highlight_color, &z_normal_color );
- renderAxisHandle( LL_FACE_POSZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
+ renderAxisHandle( 8, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], max.mV[VZ] ) );
break;
case 1:
conditionalHighlight( LL_FACE_POSX, &x_highlight_color, &x_normal_color );
- renderAxisHandle( LL_FACE_POSX, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 9, ctr, LLVector3( max.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
break;
case 2:
conditionalHighlight( LL_FACE_POSY, &y_highlight_color, &y_normal_color );
- renderAxisHandle( LL_FACE_POSY, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 10, ctr, LLVector3( ctr.mV[VX], max.mV[VY], ctr.mV[VZ] ) );
break;
case 3:
conditionalHighlight( LL_FACE_NEGX, &x_highlight_color, &x_normal_color );
- renderAxisHandle( LL_FACE_NEGX, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 11, ctr, LLVector3( min.mV[VX], ctr.mV[VY], ctr.mV[VZ] ) );
break;
case 4:
conditionalHighlight( LL_FACE_NEGY, &y_highlight_color, &y_normal_color );
- renderAxisHandle( LL_FACE_NEGY, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
+ renderAxisHandle( 12, ctr, LLVector3( ctr.mV[VX], min.mV[VY], ctr.mV[VZ] ) );
break;
case 5:
conditionalHighlight( LL_FACE_NEGZ, &z_highlight_color, &z_normal_color );
- renderAxisHandle( LL_FACE_NEGZ, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
+ renderAxisHandle( 13, ctr, LLVector3( ctr.mV[VX], ctr.mV[VY], min.mV[VZ] ) );
break;
}
}
}
}
-void LLManipScale::renderEdges( const LLBBox& bbox )
-{
- LLVector3 extent = bbox.getExtentLocal();
-
- for( U32 part = LL_EDGE_MIN; part <= LL_EDGE_MAX; part++ )
- {
- F32 edge_width = mBoxHandleSize[part] * .6f;
- LLVector3 direction = edgeToUnitVector( part );
- LLVector3 center_to_edge = unitVectorToLocalBBoxExtent( direction, bbox );
-
- gGL.pushMatrix();
- {
- gGL.translatef( center_to_edge.mV[0], center_to_edge.mV[1], center_to_edge.mV[2] );
- conditionalHighlight( part );
- gGL.scalef(
- direction.mV[0] ? edge_width : extent.mV[VX],
- direction.mV[1] ? edge_width : extent.mV[VY],
- direction.mV[2] ? edge_width : extent.mV[VZ] );
- gBox.render();
- }
- gGL.popMatrix();
- }
-}
-
-
void LLManipScale::renderCorners( const LLBBox& bbox )
{
U32 part = LL_CORNER_NNN;
@@ -780,14 +762,14 @@ void LLManipScale::renderBoxHandle( F32 x, F32 y, F32 z )
}
-void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end )
+void LLManipScale::renderAxisHandle( U32 handle_index, const LLVector3& start, const LLVector3& end )
{
if( getShowAxes() )
{
// Draws a single "jacks" style handle: a long, retangular box from start to end.
LLVector3 offset_start = end - start;
offset_start.normalize();
- offset_start = start + mBoxHandleSize[part] * offset_start;
+ offset_start = start + mBoxHandleSize[handle_index] * offset_start;
LLVector3 delta = end - offset_start;
LLVector3 pos = offset_start + 0.5f * delta;
@@ -796,9 +778,9 @@ void LLManipScale::renderAxisHandle( U32 part, const LLVector3& start, const LLV
{
gGL.translatef( pos.mV[VX], pos.mV[VY], pos.mV[VZ] );
gGL.scalef(
- mBoxHandleSize[part] + llabs(delta.mV[VX]),
- mBoxHandleSize[part] + llabs(delta.mV[VY]),
- mBoxHandleSize[part] + llabs(delta.mV[VZ]));
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VX]),
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VY]),
+ mBoxHandleSize[handle_index] + llabs(delta.mV[VZ]));
gBox.render();
}
gGL.popMatrix();
diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h
index 7cc3c99810..11ade9b7d0 100755
--- a/indra/newview/llmanipscale.h
+++ b/indra/newview/llmanipscale.h
@@ -96,7 +96,6 @@ public:
private:
void renderCorners( const LLBBox& local_bbox );
void renderFaces( const LLBBox& local_bbox );
- void renderEdges( const LLBBox& local_bbox );
void renderBoxHandle( F32 x, F32 y, F32 z );
void renderAxisHandle( U32 part, const LLVector3& start, const LLVector3& end );
void renderGuidelinesPart( const LLBBox& local_bbox );
@@ -172,6 +171,9 @@ private:
ESnapRegimes mSnapRegime; //<! Which, if any, snap regime the cursor is currently residing in.
F32 mManipulatorScales[NUM_MANIPULATORS];
F32 mBoxHandleSize[NUM_MANIPULATORS]; // The size of the handles at the corners of the bounding box
+ S32 mFirstClickX;
+ S32 mFirstClickY;
+ bool mIsFirstClick;
};
#endif // LL_MANIPSCALE_H
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
index 375c54479d..2f7c44f899 100755
--- a/indra/newview/llpanelgrouplandmoney.cpp
+++ b/indra/newview/llpanelgrouplandmoney.cpp
@@ -421,20 +421,51 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
msg->getUUID("QueryData", "OwnerID", owner_id, 0);
msg->getUUID("TransactionData", "TransactionID", trans_id);
- S32 total_contribution = 0;
if(owner_id.isNull())
{
// special block which has total contribution
++first_block;
+ S32 committed = 0;
+ S32 billable_area = 0;
+
+ if(count == 1)
+ {
+ msg->getS32("QueryData", "BillableArea", committed, 0);
+ }
+ else
+ {
+ for(S32 i = first_block; i < count; ++i)
+ {
+ msg->getS32("QueryData", "BillableArea", billable_area, i);
+ committed+=billable_area;
+ }
+ }
+
+ S32 total_contribution;
msg->getS32("QueryData", "ActualArea", total_contribution, 0);
mPanel.getChild<LLUICtrl>("total_contributed_land_value")->setTextArg("[AREA]", llformat("%d", total_contribution));
+
+ mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
+ S32 available = total_contribution - committed;
+ mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
+
+
+ if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
+
+ {
+ mGroupOverLimitIconp->setVisible(available < 0);
+ mGroupOverLimitTextp->setVisible(available < 0);
+ }
+
}
if ( trans_id != mTransID ) return;
+
// This power was removed to make group roles simpler
//if ( !gAgent.hasPowerInGroup(mGroupID, GP_LAND_VIEW_OWNED) ) return;
if (!gAgent.isInGroup(mPanel.mGroupID)) return;
+
mGroupParcelsp->setCommentText(mEmptyParcelsText);
std::string name;
@@ -447,7 +478,6 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
std::string sim_name;
std::string land_sku;
std::string land_type;
- S32 committed = 0;
for(S32 i = first_block; i < count; ++i)
{
@@ -477,7 +507,6 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
std::string location = sim_name + llformat(" (%d, %d)", region_x, region_y);
std::string area;
- committed+=billable_area;
if(billable_area == actual_area)
@@ -516,16 +545,6 @@ void LLPanelGroupLandMoney::impl::processGroupLand(LLMessageSystem* msg)
mGroupParcelsp->addElement(row);
}
-
- mPanel.getChild<LLUICtrl>("total_land_in_use_value")->setTextArg("[AREA]", llformat("%d", committed));
-
- S32 available = total_contribution - committed;
- mPanel.getChild<LLUICtrl>("land_available_value")->setTextArg("[AREA]", llformat("%d", available));
- if ( mGroupOverLimitTextp && mGroupOverLimitIconp )
- {
- mGroupOverLimitIconp->setVisible(available < 0);
- mGroupOverLimitTextp->setVisible(available < 0);
- }
}
}
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index bbc3b85bf0..34f3bbf73e 100755
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -291,38 +291,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
loadLoginPage();
- // Show last logged in user favorites in "Start at" combo.
- addUsersWithFavoritesToUsername();
LLComboBox* username_combo(getChild<LLComboBox>("username_combo"));
username_combo->setTextChangedCallback(boost::bind(&LLPanelLogin::addFavoritesToStartLocation, this));
// STEAM-14: When user presses Enter with this field in focus, initiate login
username_combo->setCommitCallback(boost::bind(&LLPanelLogin::onClickConnect, this));
}
-void LLPanelLogin::addUsersWithFavoritesToUsername()
-{
- LLComboBox* combo = getChild<LLComboBox>("username_combo");
- if (!combo) return;
- 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())
- {
- 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)
- {
- combo->add(iter->first);
- mUsernameLength = iter->first.length();
- updateLoginButtons();
- }
-}
-
void LLPanelLogin::addFavoritesToStartLocation()
{
// Clear the combo.
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 9123252f4c..2fece32449 100755
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -285,7 +285,8 @@ LLPanelObject::LLPanelObject()
mIsPhantom(FALSE),
mSelectedType(MI_BOX),
mSculptTextureRevert(LLUUID::null),
- mSculptTypeRevert(0)
+ mSculptTypeRevert(0),
+ mSizeChanged(FALSE)
{
}
@@ -1620,9 +1621,10 @@ void LLPanelObject::sendScale(BOOL btn_down)
LLVector3 newscale(mCtrlScaleX->get(), mCtrlScaleY->get(), mCtrlScaleZ->get());
LLVector3 delta = newscale - mObject->getScale();
- if (delta.magVec() >= 0.0005f)
+ if (delta.magVec() >= 0.0005f || (mSizeChanged && !btn_down))
{
// scale changed by more than 1/2 millimeter
+ mSizeChanged = btn_down;
// check to see if we aren't scaling the textures
// (in which case the tex coord's need to be recomputed)
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
index c4cf27ab1a..8829f493fa 100755
--- a/indra/newview/llpanelobject.h
+++ b/indra/newview/llpanelobject.h
@@ -140,6 +140,7 @@ protected:
LLSpinCtrl* mCtrlScaleX;
LLSpinCtrl* mCtrlScaleY;
LLSpinCtrl* mCtrlScaleZ;
+ BOOL mSizeChanged;
LLTextBox* mLabelRotation;
LLSpinCtrl* mCtrlRotX;
diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp
index 56569e3207..106fb4997e 100755
--- a/indra/newview/llpanelsnapshot.cpp
+++ b/indra/newview/llpanelsnapshot.cpp
@@ -37,6 +37,19 @@
#include "llsidetraypanelcontainer.h"
#include "llviewercontrol.h" // gSavedSettings
+const S32 MAX_TEXTURE_SIZE = 512 ; //max upload texture size 512 * 512
+
+S32 power_of_two(S32 sz, S32 upper)
+{
+ S32 res = upper;
+ while( upper >= sz)
+ {
+ res = upper;
+ upper >>= 1;
+ }
+ return res;
+}
+
// virtual
BOOL LLPanelSnapshot::postBuild()
{
@@ -164,8 +177,26 @@ void LLPanelSnapshot::cancel()
void LLPanelSnapshot::onCustomResolutionCommit()
{
LLSD info;
- info["w"] = getChild<LLUICtrl>(getWidthSpinnerName())->getValue().asInteger();
- info["h"] = getChild<LLUICtrl>(getHeightSpinnerName())->getValue().asInteger();
+ LLSpinCtrl *widthSpinner = getChild<LLSpinCtrl>(getWidthSpinnerName());
+ LLSpinCtrl *heightSpinner = getChild<LLSpinCtrl>(getHeightSpinnerName());
+ if (getName() == "panel_snapshot_inventory")
+ {
+ S32 width = widthSpinner->getValue().asInteger();
+ width = power_of_two(width, MAX_TEXTURE_SIZE);
+ info["w"] = width;
+ widthSpinner->setIncrement(width >> 1);
+ widthSpinner->forceSetValue(width);
+ S32 height = heightSpinner->getValue().asInteger();
+ height = power_of_two(height, MAX_TEXTURE_SIZE);
+ heightSpinner->setIncrement(height >> 1);
+ heightSpinner->forceSetValue(height);
+ info["h"] = height;
+ }
+ else
+ {
+ info["w"] = widthSpinner->getValue().asInteger();
+ info["h"] = heightSpinner->getValue().asInteger();
+ }
LLFloaterSnapshot::getInstance()->notify(LLSD().with("custom-res-change", info));
}
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 8499012cfc..721ee1f0f5 100755
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -2703,7 +2703,7 @@ bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask)
{
// FIXME: THIS IS SO WRONG.
// Menu keys should be handled by the menu system and not passed to UI elements, but this is how LLTextEditor and LLLineEditor do it...
- if( MASK_CONTROL & mask )
+ if( MASK_CONTROL & mask && key != KEY_LEFT && key != KEY_RIGHT && key != KEY_HOME && key != KEY_END)
{
result = true;
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index c7bf8a1c31..a23d02a00a 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -3590,7 +3590,7 @@ class LLSelfSitDown : public view_listener_t
bool enable_sitdown_self()
{
- return isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gAgent.getFlying();
+ return isAgentAvatarValid() && !gAgentAvatarp->isSitting() && !gAgentAvatarp->isEditingAppearance() && !gAgent.getFlying();
}
class LLCheckPanelPeopleTab : public view_listener_t
@@ -7034,10 +7034,6 @@ void handle_selected_texture_info(void*)
std::string msg;
msg.assign("Texture info for: ");
msg.append(node->mName);
-
- LLSD args;
- args["MESSAGE"] = msg;
- LLNotificationsUtil::add("SystemMessage", args);
U8 te_count = node->getObject()->getNumTEs();
// map from texture ID to list of faces using it
@@ -7061,10 +7057,10 @@ void handle_selected_texture_info(void*)
S32 height = img->getHeight();
S32 width = img->getWidth();
S32 components = img->getComponents();
- msg = llformat("%dx%d %s on face ",
+ msg.append(llformat("\n%dx%d %s on face ",
width,
height,
- (components == 4 ? "alpha" : "opaque"));
+ (components == 4 ? "alpha" : "opaque")));
for (U8 i = 0; i < it->second.size(); ++i)
{
msg.append( llformat("%d ", (S32)(it->second[i])));
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 820249e181..74b8e693c4 100755
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -5205,7 +5205,6 @@ void LLViewerObject::setAttachedSound(const LLUUID &audio_uuid, const LLUUID& ow
{
if (!gAudiop)
{
- LL_WARNS("AudioEngine") << "LLAudioEngine instance doesn't exist!" << LL_ENDL;
return;
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 7c94442f09..2f4365036c 100755
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1562,6 +1562,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
if (parcel == parcel_mgr.mAgentParcel)
{
+ // new agent parcel
S32 bitmap_size = parcel_mgr.mParcelsPerEdge
* parcel_mgr.mParcelsPerEdge
/ 8;
@@ -1591,6 +1592,11 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
}
}
+ else if (local_id == parcel_mgr.mAgentParcel->getLocalID())
+ {
+ // updated agent parcel
+ parcel_mgr.mAgentParcel->unpackMessage(msg);
+ }
}
// Handle updating selections, if necessary.
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index b05e771f96..7ebe12cc07 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -66,6 +66,7 @@
#include "llviewerstatsrecorder.h"
#include "llvlmanager.h"
#include "llvlcomposition.h"
+#include "llvoavatarself.h"
#include "llvocache.h"
#include "llworld.h"
#include "llspatialpartition.h"
@@ -1486,16 +1487,27 @@ void LLViewerRegion::killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>&
if(drawablep && !drawablep->getParent())
{
- LLViewerObject::const_child_list_t& child_list = drawablep->getVObj()->getChildren();
+ LLViewerObject* v_obj = drawablep->getVObj();
+ if (v_obj->isSelected()
+ || (v_obj->flagAnimSource() && isAgentAvatarValid() && gAgentAvatarp->hasMotionFromSource(v_obj->getID())))
+ {
+ // do not remove objects user is interacting with
+ ((LLViewerOctreeEntryData*)drawablep)->setVisible();
+ return;
+ }
+ LLViewerObject::const_child_list_t& child_list = v_obj->getChildren();
for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin();
iter != child_list.end(); iter++)
{
LLViewerObject* child = *iter;
if(child->mDrawable)
{
- if(!child->mDrawable->getEntry() || !child->mDrawable->getEntry()->hasVOCacheEntry())
+ if( !child->mDrawable->getEntry()
+ || !child->mDrawable->getEntry()->hasVOCacheEntry()
+ || child->isSelected()
+ || (child->flagAnimSource() && isAgentAvatarValid() && gAgentAvatarp->hasMotionFromSource(child->getID())))
{
- //do not remove parent if any of its children non-cacheable
+ //do not remove parent if any of its children non-cacheable, animating or selected
//especially for the case that an avatar sits on a cache-able object
((LLViewerOctreeEntryData*)drawablep)->setVisible();
return;
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
index aaa1466939..c14fa5aee8 100755
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -392,7 +392,7 @@ public:
private:
void addToVOCacheTree(LLVOCacheEntry* entry);
LLViewerObject* addNewObject(LLVOCacheEntry* entry);
- void killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& delete_list);
+ void killObject(LLVOCacheEntry* entry, std::vector<LLDrawable*>& delete_list); //adds entry into list if it is safe to move into cache
void removeFromVOCacheTree(LLVOCacheEntry* entry);
void killCacheEntry(LLVOCacheEntry* entry, bool for_rendering = false); //physically delete the cache entry
void killInvisibleObjects(F32 max_time);
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 38420a31bc..3f75131780 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5018,6 +5018,15 @@ BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
}
//-----------------------------------------------------------------------------
+// hasMotionFromSource()
+//-----------------------------------------------------------------------------
+// virtual
+bool LLVOAvatar::hasMotionFromSource(const LLUUID& source_id)
+{
+ return false;
+}
+
+//-----------------------------------------------------------------------------
// stopMotionFromSource()
//-----------------------------------------------------------------------------
// virtual
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 0daf679e8e..82b95145e5 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -191,6 +191,7 @@ public:
/*virtual*/ LLUUID remapMotionID(const LLUUID& id);
/*virtual*/ BOOL startMotion(const LLUUID& id, F32 time_offset = 0.f);
/*virtual*/ BOOL stopMotion(const LLUUID& id, BOOL stop_immediate = FALSE);
+ virtual bool hasMotionFromSource(const LLUUID& source_id);
virtual void stopMotionFromSource(const LLUUID& source_id);
virtual void requestStopMotion(LLMotion* motion);
LLMotion* findMotion(const LLUUID& id) const;
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index bd7ab41258..ae7a233876 100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -806,6 +806,13 @@ void LLVOAvatarSelf::requestStopMotion(LLMotion* motion)
}
// virtual
+bool LLVOAvatarSelf::hasMotionFromSource(const LLUUID& source_id)
+{
+ AnimSourceIterator motion_it = mAnimationSources.find(source_id);
+ return motion_it != mAnimationSources.end();
+}
+
+// virtual
void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id)
{
for (AnimSourceIterator motion_it = mAnimationSources.find(source_id); motion_it != mAnimationSources.end(); )
@@ -814,6 +821,7 @@ void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id)
mAnimationSources.erase(motion_it++);
}
+
LLViewerObject* object = gObjectList.findObject(source_id);
if (object)
{
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
index 6d190b5cfe..b8e9bbb77a 100755
--- a/indra/newview/llvoavatarself.h
+++ b/indra/newview/llvoavatarself.h
@@ -85,6 +85,7 @@ public:
// LLCharacter interface and related
//--------------------------------------------------------------------
public:
+ /*virtual*/ bool hasMotionFromSource(const LLUUID& source_id);
/*virtual*/ void stopMotionFromSource(const LLUUID& source_id);
/*virtual*/ void requestStopMotion(LLMotion* motion);
/*virtual*/ LLJoint* getJoint(const std::string &name);
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
index 0312972a22..0f0d9ce703 100755
--- a/indra/newview/llweb.cpp
+++ b/indra/newview/llweb.cpp
@@ -50,6 +50,8 @@
#include "llviewerwindow.h"
#include "llnotificationsutil.h"
+#include "uriparser/Uri.h"
+
#include <boost/regex.hpp>
bool on_load_url_external_response(const LLSD& notification, const LLSD& response, bool async );
@@ -238,9 +240,23 @@ bool LLWeb::useExternalBrowser(const std::string &url)
}
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);
+ UriParserStateA state;
+ UriUriA uri;
+ state.uri = &uri;
+
+ std::string uri_string = url;
+ uriParseUriA(&state, uri_string.c_str());
+ if (uri.hostText.first)
+ {
+ S32 length = uri.hostText.afterLast - uri.hostText.first;
+ std::string buf = uri.hostText.first;
+ uri_string = buf.substr(0,length);
+ }
+ uriFreeUriMembersA(&uri);
+
+ boost::regex pattern = boost::regex("\\b(lindenlab.com|secondlife.com)$", boost::regex::perl|boost::regex::icase);
boost::match_results<std::string::const_iterator> matches;
- return !(boost::regex_search(url, matches, pattern));
+ return !(boost::regex_search(uri_string, matches, pattern));
}
return false;
}
diff --git a/indra/newview/skins/default/textures/icons/hand.png b/indra/newview/skins/default/textures/icons/hand.png
new file mode 100644
index 0000000000..41b9600da6
--- /dev/null
+++ b/indra/newview/skins/default/textures/icons/hand.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 1f10d966d5..9c2d55e7b4 100755
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -229,6 +229,8 @@ with the same filename but different name
<texture name="Generic_Person" file_name="icons/Generic_Person.png" preload="false" />
<texture name="Generic_Person_Large" file_name="icons/Generic_Person_Large.png" preload="false" />
+ <texture name="Hand" file_name="icons/hand.png" preload="false" />
+
<texture name="Help_Press" file_name="navbar/Help_Press.png" preload="false" />
<texture name="Hierarchy_View_Disabled" file_name="icons/Hierarchy_View_Disabled.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
index 993316134a..4e6f56cd94 100755
--- a/indra/newview/skins/default/xui/de/floater_stats.xml
+++ b/indra/newview/skins/default/xui/de/floater_stats.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater name="Statistics" title="STATISTIKEN" width="280">
- <scroll_container name="statistics_scroll" width="280">
- <container_view name="statistics_view" width="280">
+<floater name="Statistics" title="STATISTIKEN">
+ <scroll_container name="statistics_scroll">
+ <container_view name="statistics_view">
<stat_view label="Basic" name="basic">
<stat_bar label="FPS" name="fps"/>
<stat_bar label="Empfangene UDP-Daten" name="bandwidth"/>
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
index fbf262441f..2aa582beea 100755
--- a/indra/newview/skins/default/xui/en/floater_stats.xml
+++ b/indra/newview/skins/default/xui/en/floater_stats.xml
@@ -37,6 +37,7 @@
<stat_bar name="bandwidth"
label="UDP Data Received"
stat="activemessagedatareceived"
+ decimal_digits="0"
show_bar="true"/>
<stat_bar name="packet_loss"
label="Packet Loss"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index ea1bc66236..b4d8046d18 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -34,6 +34,12 @@
</form>
</template>
+ <template name="notifyignore">
+ <form>
+ <ignore text="$ignoretext"/>
+ </form>
+ </template>
+
<template name="okcancelbuttons">
<form>
<button
@@ -9490,6 +9496,9 @@ You have been teleported home by the object '[OBJECT_NAME]'
type="notify">
<tag>fail</tag>
You have been teleported by an attachment on [ITEM_ID]
+ <usetemplate
+ ignoretext="Teleport: You have been teleported by an attachment"
+ name="notifyignore"/>
</notification>
<notification
@@ -9498,6 +9507,9 @@ You have been teleported by an attachment on [ITEM_ID]
type="notify">
<tag>fail</tag>
You have been teleported by the object '[OBJECT_NAME]' on the parcel '[PARCEL_NAME]'
+ <usetemplate
+ ignoretext="Teleport: You have been teleported by an object on a parcel"
+ name="notifyignore"/>
</notification>
<notification
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 9da044ab64..f6665a1d5d 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -39,12 +39,7 @@
enabled="true"
label="English"
name="English"
- value="en" />
- <combo_box.item
- enabled="true"
- label="Dansk (Danish) - Beta"
- name="Danish"
- value="da" />
+ value="en" />
<combo_box.item
enabled="true"
label="Deutsch (German) - Beta"
@@ -64,12 +59,7 @@
enabled="true"
label="Italiano (Italian) - Beta"
name="Italian"
- value="it" />
- <combo_box.item
- enabled="true"
- label="Polski (Polish) - Beta"
- name="Polish"
- value="pl" />
+ value="it" />
<combo_box.item
enabled="true"
label="Português (Portuguese) - Beta"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index b71586aab1..615abbaa89 100755
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -398,7 +398,7 @@
follows="left|top"
layout="topleft"
left_delta="-168"
- width="221"
+ width="360"
height="20"
name="ear_location">
<radio_item
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
index 064ece6e4b..dbf7bc031f 100755
--- a/indra/newview/skins/default/xui/en/panel_status_bar.xml
+++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml
@@ -51,7 +51,7 @@
v_pad="4"
top="0"
wrap="false"
- value="L$20"
+ value="L$??"
width="40" />
<button
halign="center"
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
index fad1ea51e0..26e3d37918 100755
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -165,6 +165,12 @@
</menu>
<menu label="Справка" name="Help">
<menu_item_call label="Инструкции..." name="How To"/>
+ <menu_item_call label="База знаний" name="Knowledge Base"/>
+ <menu_item_call label="Wiki" name="Wiki"/>
+ <menu_item_call label="Форумы сообщества" name="Community Forums"/>
+ <menu_item_call label="Портал поддержки" name="Support portal"/>
+ <menu_item_call label="Новости [SECOND_LIFE]" name="Second Life News"/>
+ <menu_item_call label="Блоги [SECOND_LIFE]" name="Second Life Blogs"/>
<menu_item_call label="Жалоба" name="Report Abuse"/>
<menu_item_call label="Сообщить об ошибке" name="Report Bug"/>
<menu_item_call label="О [APP_NAME]" name="About Second Life"/>
@@ -396,6 +402,12 @@
<menu_item_call label="Проверка женщины" name="Test Female"/>
<menu_item_check label="Разрешить выбор аватара" name="Allow Select Avatar"/>
</menu>
+ <menu label="Скорость анимации" name="Animation Speed">
+ <menu_item_call label="Ускорить все анимации на 10%" name="All Animations 10 Faster"/>
+ <menu_item_call label="Замедлить все анимации на 10%" name="All Animations 10 Slower"/>
+ <menu_item_call label="Восстановить скорость анимаций" name="Reset All Animation Speed"/>
+ <menu_item_check label="Анимация медленных движений" name="Slow Motion Animations"/>
+ </menu>
<menu_item_call label="Скинуть параметры" name="Force Params to Default"/>
<menu_item_check label="Данные об анимации" name="Animation Info"/>
<menu_item_check label="Показать взгляд" name="Show Look At"/>