summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llaudio/llstreamingaudio_fmod.cpp2
-rw-r--r--indra/llui/llconsole.cpp6
-rw-r--r--indra/llui/llurlentry.cpp8
-rw-r--r--indra/newview/app_settings/settings.xml2
-rw-r--r--indra/newview/character/avatar_lad.xml12
-rw-r--r--indra/newview/llagentwearables.cpp124
-rw-r--r--indra/newview/llappearancemgr.cpp50
-rw-r--r--indra/newview/llappearancemgr.h5
-rw-r--r--indra/newview/llfasttimerview.cpp4
-rw-r--r--indra/newview/llmediactrl.cpp1
-rw-r--r--indra/newview/llpanellogin.cpp7
-rw-r--r--indra/newview/llsidepanelappearance.cpp4
-rw-r--r--indra/newview/llsidepaneliteminfo.cpp102
-rw-r--r--indra/newview/llsidepaneliteminfo.h6
-rw-r--r--indra/newview/llstartup.cpp1
-rw-r--r--indra/newview/llteleporthistory.cpp1
-rw-r--r--indra/newview/lltoolpie.cpp27
-rw-r--r--indra/newview/lltoolpie.h3
-rw-r--r--indra/newview/llviewermedia.h1
-rw-r--r--indra/newview/llviewermedia_streamingaudio.cpp2
-rw-r--r--indra/newview/llviewermenu.cpp3
-rw-r--r--indra/newview/llviewerparcelmedia.cpp6
-rw-r--r--indra/newview/llviewerparcelmgr.cpp2
-rw-r--r--indra/newview/llviewertexture.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp1
-rw-r--r--indra/newview/skins/default/xui/en/floater_customize.xml10
-rw-r--r--indra/newview/skins/default/xui/en/panel_main_inventory.xml2
-rw-r--r--indra/newview/skins/default/xui/en/panel_outfits_inventory.xml26
28 files changed, 267 insertions, 153 deletions
diff --git a/indra/llaudio/llstreamingaudio_fmod.cpp b/indra/llaudio/llstreamingaudio_fmod.cpp
index a71a87203c..a4620fa13c 100644
--- a/indra/llaudio/llstreamingaudio_fmod.cpp
+++ b/indra/llaudio/llstreamingaudio_fmod.cpp
@@ -174,7 +174,7 @@ void LLStreamingAudio_FMOD::update()
break;
case -3:
// failed to open, file not found, perhaps
- llwarns << "InternetSteam - failed to open" << llendl;
+ llwarns << "InternetStream - failed to open" << llendl;
stop();
return;
case -4:
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
index fa0abd55d0..c9090d388d 100644
--- a/indra/llui/llconsole.cpp
+++ b/indra/llui/llconsole.cpp
@@ -392,4 +392,10 @@ void LLConsole::addLine(const LLWString& wline, F32 size, const LLColor4 &color)
Paragraph paragraph(wline, color, mTimer.getElapsedTimeF32(), mFont, (F32)getRect().getWidth() );
mParagraphs.push_back ( paragraph );
+
+ // remove old paragraphs which can't possibly be visible any more. ::draw() will do something similar but more conservative - we do this here because ::draw() isn't guaranteed to ever be called! (i.e. the console isn't visible)
+ while ((S32)mParagraphs.size() > llmax((S32)0, (S32)(mMaxLines)))
+ {
+ mParagraphs.pop_front();
+ }
}
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
index 983f0a2d49..f7528bc62a 100644
--- a/indra/llui/llurlentry.cpp
+++ b/indra/llui/llurlentry.cpp
@@ -201,8 +201,12 @@ std::string LLUrlEntryHTTPLabel::getUrl(const std::string &string)
//
LLUrlEntryHTTPNoProtocol::LLUrlEntryHTTPNoProtocol()
{
- mPattern = boost::regex("(\\bwww\\.\\S+\\.\\S+|\\b[^ \t\n\r\f\v:/]+.com\\S*|\\b[^ \t\n\r\f\v:/]+.net\\S*|\\b[^ \t\n\r\f\v:/]+.edu\\S*|\\b[^ \t\n\r\f\v:/]+.org\\S*)",
- boost::regex::perl|boost::regex::icase);
+ mPattern = boost::regex("("
+ "\\bwww\\.\\S+\\.\\S+" // i.e. www.FOO.BAR
+ "|" // or
+ "\\b[^ \\t\\n\\r\\f\\v:/]+\\.(?:com|net|edu|org)[^[:space:][:alnum:]]*\\>" // i.e. FOO.net
+ ")",
+ boost::regex::perl|boost::regex::icase);
mMenuName = "menu_url_http.xml";
mTooltip = LLTrans::getString("TooltipHttpUrl");
}
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index e24e1a8605..359f4abe56 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -276,7 +276,7 @@
<key>Value</key>
<real>0.5</real>
</map>
- <key>AudioSteamingMedia</key>
+ <key>AudioStreamingMedia</key>
<map>
<key>Comment</key>
<string>Enable streaming</string>
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index ae89eb4413..448e20b382 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -5608,9 +5608,7 @@
<layer_set
body_region="head"
width="512"
- height="512"
- clear_alpha="false"
- alpha_tga_file="head_alpha.tga">
+ height="512">
<layer
name="head bump base"
fixed_color = "128,128,128,255"
@@ -6609,6 +6607,13 @@ render_pass="bump">
local_texture="head_bodypaint" />
</layer>
<layer
+ name="eyelash alpha"
+ visibility_mask="TRUE">
+ <texture
+ tga_file="head_alpha.tga"
+ file_is_mask="TRUE" />
+ </layer>
+ <layer
name="head alpha"
visibility_mask="TRUE">
<texture
@@ -6620,6 +6625,7 @@ render_pass="bump">
local_texture="head_tattoo" />
</layer>
+
</layer_set>
<!-- =========================================================== -->
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index b221c28dcd..d21965568d 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -100,6 +100,7 @@ public:
LLLibraryOutfitsFetch() : mCurrFetchStep(LOFS_FOLDER), mOutfitsPopulated(false) {}
~LLLibraryOutfitsFetch() {}
virtual void done();
+ void doneIdle();
protected:
void folderDone(void);
void outfitsDone(void);
@@ -115,6 +116,39 @@ BOOL LLAgentWearables::mInitialWearablesUpdateReceived = FALSE;
using namespace LLVOAvatarDefines;
+// HACK: For EXT-3923: Pants item shows in inventory with skin icon and messes with "current look"
+// Some db items are corrupted, have inventory flags = 0, implying wearable type = shape, even though
+// wearable type stored in asset is some other value.
+// Calling this function whenever a wearable is added to increase visibility if this problem
+// turns up in other inventories.
+void checkWearableAgainstInventory(LLWearable *wearable)
+{
+ if (wearable->getItemID().isNull())
+ return;
+
+ // Check for wearable type consistent with inventory item wearable type.
+ LLViewerInventoryItem *item = gInventory.getItem(wearable->getItemID());
+ if (item)
+ {
+ if (!item->isWearableType())
+ {
+ llwarns << "wearable associated with non-wearable item" << llendl;
+ }
+ if (item->getWearableType() != wearable->getType())
+ {
+ llwarns << "type mismatch: wearable " << wearable->getName()
+ << " has type " << wearable->getType()
+ << " but inventory item " << item->getName()
+ << " has type " << item->getWearableType() << llendl;
+ }
+ }
+ else
+ {
+ llwarns << "wearable inventory item not found" << wearable->getName()
+ << " itemID " << wearable->getItemID().asString() << llendl;
+ }
+}
+
void LLAgentWearables::dump()
{
llinfos << "LLAgentWearablesDump" << llendl;
@@ -656,6 +690,7 @@ LLWearable* LLAgentWearables::getWearable(const EWearableType type, U32 index)
void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearable *wearable)
{
+
LLWearable *old_wearable = getWearable(type,index);
if (!old_wearable)
{
@@ -679,6 +714,7 @@ void LLAgentWearables::setWearable(const EWearableType type, U32 index, LLWearab
wearable_vec[index] = wearable;
old_wearable->setLabelUpdated();
wearableUpdated(wearable);
+ checkWearableAgainstInventory(wearable);
}
}
@@ -694,6 +730,7 @@ U32 LLAgentWearables::pushWearable(const EWearableType type, LLWearable *wearabl
{
mWearableDatas[type].push_back(wearable);
wearableUpdated(wearable);
+ checkWearableAgainstInventory(wearable);
return mWearableDatas[type].size()-1;
}
return MAX_WEARABLES_PER_TYPE;
@@ -1359,6 +1396,7 @@ LLUUID LLAgentWearables::makeNewOutfitLinks(const std::string& new_folder_name)
LLPointer<LLInventoryCallback> cb = new LLAutoRenameFolder(folder_id);
LLAppearanceManager::instance().shallowCopyCategory(LLAppearanceManager::instance().getCOF(),folder_id, cb);
+ LLAppearanceManager::instance().createBaseOutfitLink(folder_id, NULL);
return folder_id;
}
@@ -1704,6 +1742,7 @@ void LLAgentWearables::setWearableFinal(LLInventoryItem* new_item, LLWearable* n
mWearableDatas[type].push_back(new_wearable);
llinfos << "Added additional wearable for type " << type
<< " size is now " << mWearableDatas[type].size() << llendl;
+ checkWearableAgainstInventory(new_wearable);
}
else
{
@@ -2084,52 +2123,50 @@ void LLAgentWearables::populateMyOutfitsFolder(void)
{
LLLibraryOutfitsFetch* outfits = new LLLibraryOutfitsFetch();
- // What we do here is get the complete information on the items in
- // the inventory, and set up an observer that will wait for that to
- // happen.
+ // Get the complete information on the items in the inventory and
+ // setup an observer that will wait for that to happen.
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
const LLUUID my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
folders.push_back(my_outfits_id);
+ gInventory.addObserver(outfits);
outfits->fetchDescendents(folders);
- if(outfits->isEverythingComplete())
- {
- // everything is already here - call done.
- outfits->done();
- }
- else
- {
- // it's all on it's way - add an observer, and the inventory
- // will call done for us when everything is here.
- gInventory.addObserver(outfits);
- }
}
void LLLibraryOutfitsFetch::done()
{
- switch (mCurrFetchStep){
+ // Delay this until idle() routine, since it's a heavy operation and
+ // we also can't have it run within notifyObservers.
+ doOnIdle(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this));
+ gInventory.removeObserver(this); // Prevent doOnIdle from being added twice.
+}
+
+void LLLibraryOutfitsFetch::doneIdle()
+{
+ gInventory.addObserver(this); // Add this back in since it was taken out during ::done()
+ switch (mCurrFetchStep)
+ {
case LOFS_FOLDER:
- mCurrFetchStep = LOFS_OUTFITS;
folderDone();
break;
case LOFS_OUTFITS:
- mCurrFetchStep = LOFS_CONTENTS;
outfitsDone();
break;
case LOFS_CONTENTS:
- // No longer need this observer hanging around.
- gInventory.removeObserver(this);
contentsDone();
break;
default:
- gInventory.removeObserver(this);
- delete this;
- return;
+ llwarns << "Got invalid state for outfit fetch: " << mCurrFetchStep << llendl;
+ mOutfitsPopulated = TRUE;
+ break;
}
+
+ // We're completely done. Cleanup.
if (mOutfitsPopulated)
{
- gInventory.notifyObservers();
+ gInventory.removeObserver(this);
delete this;
+ return;
}
}
@@ -2143,7 +2180,6 @@ void LLLibraryOutfitsFetch::folderDone(void)
if (cat_array.count() > 0 || wearable_array.count() > 0)
{
mOutfitsPopulated = true;
- gInventory.removeObserver(this);
return;
}
@@ -2152,22 +2188,11 @@ void LLLibraryOutfitsFetch::folderDone(void)
mCompleteFolders.clear();
- // What we do here is get the complete information on the items in
- // the inventory, and set up an observer that will wait for that to
- // happen.
+ // Get the complete information on the items in the inventory.
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
folders.push_back(library_clothing_id);
+ mCurrFetchStep = LOFS_OUTFITS;
fetchDescendents(folders);
- if(isEverythingComplete())
- {
- // everything is already here - call done.
- outfitsDone();
- }
- else
- {
- gInventory.removeObserver(this);
- gInventory.addObserver(this);
- }
}
void LLLibraryOutfitsFetch::outfitsDone(void)
@@ -2180,25 +2205,21 @@ void LLLibraryOutfitsFetch::outfitsDone(void)
LLInventoryFetchDescendentsObserver::folder_ref_t folders;
llassert(cat_array.count() > 0);
- for(S32 i = 0; i < cat_array.count(); ++i)
+ for (LLInventoryModel::cat_array_t::const_iterator iter = cat_array.begin();
+ iter != cat_array.end();
+ ++iter)
{
- if (cat_array.get(i)->getName() != "More Outfits" && cat_array.get(i)->getName() != "Ruth"){
- folders.push_back(cat_array.get(i)->getUUID());
- mOutfits.push_back( std::make_pair(cat_array.get(i)->getUUID(), cat_array.get(i)->getName() ));
+ const LLViewerInventoryCategory *cat = iter->get();
+ if (cat->getName() != "More Outfits" && cat->getName() != "Ruth")
+ {
+ folders.push_back(cat->getUUID());
+ mOutfits.push_back(std::make_pair(cat->getUUID(), cat->getName()));
}
}
mCompleteFolders.clear();
+
+ mCurrFetchStep = LOFS_CONTENTS;
fetchDescendents(folders);
- if(isEverythingComplete())
- {
- // everything is already here - call done.
- contentsDone();
- }
- else
- {
- gInventory.removeObserver(this);
- gInventory.addObserver(this);
- }
}
void LLLibraryOutfitsFetch::contentsDone(void)
@@ -2210,7 +2231,6 @@ void LLLibraryOutfitsFetch::contentsDone(void)
LLUUID folder_id = gInventory.createNewCategory(parent_id,
LLFolderType::FT_OUTFIT,
mOutfits[i].second);
-
LLAppearanceManager::getInstance()->shallowCopyCategory(mOutfits[i].first, folder_id, NULL);
}
mOutfitsPopulated = true;
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 43b2f34ecd..25f1accb22 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -364,7 +364,7 @@ LLUUID LLAppearanceManager::getCOF()
}
-const LLViewerInventoryItem* LLAppearanceManager::getCurrentOutfitLink()
+const LLViewerInventoryItem* LLAppearanceManager::getBaseOutfitLink()
{
const LLUUID& current_outfit_cat = getCOF();
LLInventoryModel::cat_array_t cat_array;
@@ -444,6 +444,28 @@ void LLAppearanceManager::shallowCopyCategory(const LLUUID& src_id, const LLUUID
}
}
+void LLAppearanceManager::purgeBaseOutfitLink(const LLUUID& category)
+{
+ LLInventoryModel::cat_array_t cats;
+ LLInventoryModel::item_array_t items;
+ gInventory.collectDescendents(category, cats, items,
+ LLInventoryModel::EXCLUDE_TRASH);
+ for (S32 i = 0; i < items.count(); ++i)
+ {
+ LLViewerInventoryItem *item = items.get(i);
+ if (item->getActualType() != LLAssetType::AT_LINK_FOLDER)
+ continue;
+ if (item->getIsLinkType())
+ {
+ LLViewerInventoryCategory* catp = item->getLinkedCategory();
+ if(catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
+ {
+ gInventory.purgeObject(item->getUUID());
+ }
+ }
+ }
+}
+
void LLAppearanceManager::purgeCategory(const LLUUID& category, bool keep_outfit_links)
{
LLInventoryModel::cat_array_t cats;
@@ -578,17 +600,9 @@ void LLAppearanceManager::updateCOF(const LLUUID& category, bool append)
linkAll(cof, gest_items, link_waiter);
// Add link to outfit if category is an outfit.
- LLViewerInventoryCategory* catp = gInventory.getCategory(category);
if (!append)
{
- std::string new_outfit_name = "";
- if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
- {
- link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
- LLAssetType::AT_LINK_FOLDER, link_waiter);
- new_outfit_name = catp->getName();
- }
- updatePanelOutfitName(new_outfit_name);
+ createBaseOutfitLink(category, link_waiter);
}
}
@@ -602,6 +616,22 @@ void LLAppearanceManager::updatePanelOutfitName(const std::string& name)
}
}
+void LLAppearanceManager::createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter)
+{
+ const LLUUID cof = getCOF();
+ LLViewerInventoryCategory* catp = gInventory.getCategory(category);
+ std::string new_outfit_name = "";
+
+ purgeBaseOutfitLink(cof);
+
+ if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
+ {
+ link_inventory_item(gAgent.getID(), category, cof, catp->getName(),
+ LLAssetType::AT_LINK_FOLDER, link_waiter);
+ new_outfit_name = catp->getName();
+ }
+ updatePanelOutfitName(new_outfit_name);
+}
void LLAppearanceManager::updateAgentWearables(LLWearableHoldingPattern* holder, bool append)
{
diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h
index b625d42a50..11b910ee11 100644
--- a/indra/newview/llappearancemgr.h
+++ b/indra/newview/llappearancemgr.h
@@ -62,11 +62,13 @@ public:
LLUUID getCOF();
// Finds the folder link to the currently worn outfit
- const LLViewerInventoryItem *getCurrentOutfitLink();
+ const LLViewerInventoryItem *getBaseOutfitLink();
// Update the displayed outfit name in UI.
void updatePanelOutfitName(const std::string& name);
+ void createBaseOutfitLink(const LLUUID& category, LLPointer<LLInventoryCallback> link_waiter);
+
void updateAgentWearables(LLWearableHoldingPattern* holder, bool append);
// For debugging - could be moved elsewhere.
@@ -114,6 +116,7 @@ private:
bool follow_folder_links);
void purgeCategory(const LLUUID& category, bool keep_outfit_links);
+ void purgeBaseOutfitLink(const LLUUID& category);
std::set<LLUUID> mRegisteredAttachments;
bool mAttachmentInvLinkEnabled;
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index effa57b1ef..7d8bb6e104 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -323,7 +323,9 @@ void LLFastTimerView::draw()
S32 xleft = margin;
S32 ytop = margin;
- mAverageCyclesPerTimer = llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f));
+ mAverageCyclesPerTimer = LLFastTimer::sTimerCalls == 0
+ ? 0
+ : llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f));
LLFastTimer::sTimerCycles = 0;
LLFastTimer::sTimerCalls = 0;
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 199bd966ef..93f926b5d0 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -39,7 +39,6 @@
#include "llfloaterworldmap.h"
#include "lluictrlfactory.h"
#include "llurldispatcher.h"
-#include "llurlsimstring.h"
#include "llviewborder.h"
#include "llviewercontrol.h"
#include "llviewermedia.h"
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index a9c7b908ed..87d101b00f 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -62,7 +62,6 @@
#include "llviewermenu.h" // for handle_preferences()
#include "llviewernetwork.h"
#include "llviewerwindow.h" // to link into child list
-#include "llurlsimstring.h"
#include "lluictrlfactory.h"
#include "llhttpclient.h"
#include "llweb.h"
@@ -229,8 +228,12 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
LLComboBox* combo = getChild<LLComboBox>("start_location_combo");
- LLURLSimString::setString(gSavedSettings.getString("LoginLocation"));
std::string sim_string = LLURLSimString::sInstance.mSimString;
+ if(sim_string.empty())
+ {
+ LLURLSimString::setString(gSavedSettings.getString("LoginLocation"));
+ }
+
if (!sim_string.empty())
{
// Replace "<Type region name>" with this region name
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 30b0075c4b..e2ce534c4f 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -198,7 +198,7 @@ void LLSidepanelAppearance::onFilterEdit(const std::string& search_string)
void LLSidepanelAppearance::onOpenOutfitButtonClicked()
{
- const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink();
+ const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink();
if (!outfit_link)
return;
if (!outfit_link->getIsLinkType())
@@ -313,7 +313,7 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
{
if (name == "")
{
- const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getCurrentOutfitLink();
+ const LLViewerInventoryItem *outfit_link = LLAppearanceManager::getInstance()->getBaseOutfitLink();
if (outfit_link)
{
const LLViewerInventoryCategory *cat = outfit_link->getLinkedCategory();
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
index 814508daa9..94fe95d215 100644
--- a/indra/newview/llsidepaneliteminfo.cpp
+++ b/indra/newview/llsidepaneliteminfo.cpp
@@ -157,11 +157,12 @@ void LLSidepanelItemInfo::reset()
void LLSidepanelItemInfo::refresh()
{
- LLInventoryItem* item = findItem();
+ LLViewerInventoryItem* item = findItem();
if(item)
{
refreshFromItem(item);
updateVerbs();
+ return;
}
else
{
@@ -170,11 +171,8 @@ void LLSidepanelItemInfo::refresh()
setIsEditing(FALSE);
}
}
-
- const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
- bool is_editable = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id);
- if (!getIsEditing() || !is_editable)
+ if (!getIsEditing())
{
const std::string no_item_names[]={
"LabelItemName",
@@ -212,7 +210,7 @@ void LLSidepanelItemInfo::refresh()
}
}
- if (!is_editable)
+ if (!item)
{
const std::string no_edit_mode_names[]={
"BtnCreator",
@@ -227,24 +225,26 @@ void LLSidepanelItemInfo::refresh()
updateVerbs();
}
-void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
+void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
{
////////////////////////
// PERMISSIONS LOOKUP //
////////////////////////
// do not enable the UI for incomplete items.
- LLViewerInventoryItem* i = (LLViewerInventoryItem*)item;
- BOOL is_complete = i->isComplete();
- const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(i->getInventoryType());
- const BOOL is_calling_card = (i->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
+ BOOL is_complete = item->isComplete();
+ const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(item->getInventoryType());
+ const BOOL is_calling_card = (item->getInventoryType() == LLInventoryType::IT_CALLINGCARD);
const LLPermissions& perm = item->getPermissions();
const BOOL can_agent_manipulate = gAgent.allowOperation(PERM_OWNER, perm,
GP_OBJECT_MANIPULATE);
const BOOL can_agent_sell = gAgent.allowOperation(PERM_OWNER, perm,
GP_OBJECT_SET_SALE) &&
!cannot_restrict_permissions;
- const BOOL is_link = i->getIsLinkType();
+ const BOOL is_link = item->getIsLinkType();
+
+ const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH);
+ bool not_in_trash = item && (item->getUUID() != trash_id) && !gInventory.isObjectDescendentOf(item->getUUID(), trash_id);
// You need permission to modify the object to modify an inventory
// item in it.
@@ -261,7 +261,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
//////////////////////
BOOL is_modifiable = gAgent.allowOperation(PERM_MODIFY, perm,
GP_OBJECT_MANIPULATE)
- && is_obj_modify && is_complete;
+ && is_obj_modify && is_complete && not_in_trash;
childSetEnabled("LabelItemNameTitle",TRUE);
childSetEnabled("LabelItemName",is_modifiable && !is_calling_card); // for now, don't allow rename of calling cards
@@ -338,6 +338,64 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
LLStringUtil::format (timeStr, substitution);
childSetText ("LabelAcquiredDate", timeStr);
}
+
+ /////////////////////////////////////
+ // PERMISSIONS AND SALE ITEM HIDING
+ /////////////////////////////////////
+
+ const std::string perm_and_sale_items[]={
+ "perms_inv",
+ "OwnerLabel",
+ "perm_modify",
+ "CheckOwnerModify",
+ "CheckOwnerCopy",
+ "CheckOwnerTransfer",
+ "GroupLabel",
+ "CheckShareWithGroup",
+ "AnyoneLabel",
+ "CheckEveryoneCopy",
+ "NextOwnerLabel",
+ "CheckNextOwnerModify",
+ "CheckNextOwnerCopy",
+ "CheckNextOwnerTransfer",
+ "CheckPurchase",
+ "SaleLabel",
+ "RadioSaleType",
+ "combobox sale copy",
+ "Edit Cost",
+ "TextPrice"
+ };
+
+ const std::string debug_items[]={
+ "BaseMaskDebug",
+ "OwnerMaskDebug",
+ "GroupMaskDebug",
+ "EveryoneMaskDebug",
+ "NextMaskDebug"
+ };
+
+ // Hide permissions checkboxes and labels and for sale info if in the trash
+ // or ui elements don't apply to these objects and return from function
+ if (!not_in_trash || cannot_restrict_permissions)
+ {
+ for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
+ {
+ childSetVisible(perm_and_sale_items[t],false);
+ }
+
+ for(size_t t=0; t<LL_ARRAY_SIZE(debug_items); ++t)
+ {
+ childSetVisible(debug_items[t],false);
+ }
+ return;
+ }
+ else // Make sure perms and sale ui elements are visible
+ {
+ for(size_t t=0; t<LL_ARRAY_SIZE(perm_and_sale_items); ++t)
+ {
+ childSetVisible(perm_and_sale_items[t],true);
+ }
+ }
///////////////////////
// OWNER PERMISSIONS //
@@ -541,7 +599,7 @@ void LLSidepanelItemInfo::refreshFromItem(LLInventoryItem* item)
void LLSidepanelItemInfo::onClickCreator()
{
- LLInventoryItem* item = findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item) return;
if(!item->getCreatorUUID().isNull())
{
@@ -552,7 +610,7 @@ void LLSidepanelItemInfo::onClickCreator()
// static
void LLSidepanelItemInfo::onClickOwner()
{
- LLInventoryItem* item = findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item) return;
if(item->getPermissions().isGroupOwned())
{
@@ -568,7 +626,7 @@ void LLSidepanelItemInfo::onClickOwner()
void LLSidepanelItemInfo::onCommitName()
{
//llinfos << "LLSidepanelItemInfo::onCommitName()" << llendl;
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item)
{
return;
@@ -604,7 +662,7 @@ void LLSidepanelItemInfo::onCommitName()
void LLSidepanelItemInfo::onCommitDescription()
{
//llinfos << "LLSidepanelItemInfo::onCommitDescription()" << llendl;
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item) return;
LLLineEditor* labelItemDesc = getChild<LLLineEditor>("LabelItemDesc");
@@ -642,7 +700,7 @@ void LLSidepanelItemInfo::onCommitDescription()
void LLSidepanelItemInfo::onCommitPermissions()
{
//llinfos << "LLSidepanelItemInfo::onCommitPermissions()" << llendl;
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item) return;
LLPermissions perm(item->getPermissions());
@@ -751,7 +809,7 @@ void LLSidepanelItemInfo::onCommitSaleType()
void LLSidepanelItemInfo::updateSaleInfo()
{
- LLViewerInventoryItem* item = (LLViewerInventoryItem*)findItem();
+ LLViewerInventoryItem* item = findItem();
if(!item) return;
LLSaleInfo sale_info(item->getSaleInfo());
if(!gAgent.allowOperation(PERM_TRANSFER, item->getPermissions(), GP_OBJECT_SET_SALE))
@@ -851,9 +909,9 @@ void LLSidepanelItemInfo::updateSaleInfo()
}
}
-LLInventoryItem* LLSidepanelItemInfo::findItem() const
+LLViewerInventoryItem* LLSidepanelItemInfo::findItem() const
{
- LLInventoryItem* item = NULL;
+ LLViewerInventoryItem* item = NULL;
if(mObjectID.isNull())
{
// it is in agent inventory
@@ -864,7 +922,7 @@ LLInventoryItem* LLSidepanelItemInfo::findItem() const
LLViewerObject* object = gObjectList.findObject(mObjectID);
if(object)
{
- item = (LLInventoryItem*)object->getInventoryObject(mItemID);
+ item = static_cast<LLViewerInventoryItem*>(object->getInventoryObject(mItemID));
}
}
return item;
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
index 21002327bc..e6dbf400ee 100644
--- a/indra/newview/llsidepaneliteminfo.h
+++ b/indra/newview/llsidepaneliteminfo.h
@@ -41,7 +41,7 @@
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class LLButton;
-class LLInventoryItem;
+class LLViewerInventoryItem;
class LLItemPropertiesObserver;
class LLViewerObject;
class LLPermissions;
@@ -63,10 +63,10 @@ protected:
/*virtual*/ void refresh();
/*virtual*/ void save();
- LLInventoryItem* findItem() const;
+ LLViewerInventoryItem* findItem() const;
LLViewerObject* findObject() const;
- void refreshFromItem(LLInventoryItem* item);
+ void refreshFromItem(LLViewerInventoryItem* item);
private:
LLUUID mItemID; // inventory UUID for the inventory item.
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index eb2275bff0..99fa271b78 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -1309,6 +1309,7 @@ bool idle_startup()
// Move the progress view in front of the UI
gViewerWindow->moveProgressViewToFront();
+ // direct logging to the debug console's line buffer
LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
// set initial visibility of debug console
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
index 1315887c37..ce00dec802 100644
--- a/indra/newview/llteleporthistory.cpp
+++ b/indra/newview/llteleporthistory.cpp
@@ -39,7 +39,6 @@
#include "llagent.h"
#include "llslurl.h"
-#include "llurlsimstring.h"
#include "llviewercontrol.h" // for gSavedSettings
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index b1d09eccba..5f66e6b409 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -101,16 +101,13 @@ BOOL LLToolPie::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktyp
BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
{
//left mouse down always picks transparent
- gViewerWindow->pickAsync(x, y, mask, leftMouseCallback, TRUE);
+ mPick = gViewerWindow->pickImmediate(x, y, TRUE);
+ mPick.mKeyMask = mask;
mGrabMouseButtonDown = TRUE;
- return TRUE;
-}
+
+ pickLeftMouseDownCallback();
-// static
-void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info)
-{
- LLToolPie::getInstance()->mPick = pick_info;
- LLToolPie::getInstance()->pickLeftMouseDownCallback();
+ return TRUE;
}
// Spawn context menus on right mouse down so you can drag over and select
@@ -118,8 +115,13 @@ void LLToolPie::leftMouseCallback(const LLPickInfo& pick_info)
BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask)
{
// don't pick transparent so users can't "pay" transparent objects
- gViewerWindow->pickAsync(x, y, mask, rightMouseCallback, FALSE);
+ mPick = gViewerWindow->pickImmediate(x, y, FALSE);
+ mPick.mKeyMask = mask;
+
// claim not handled so UI focus stays same
+
+ pickRightMouseDownCallback();
+
return FALSE;
}
@@ -134,13 +136,6 @@ BOOL LLToolPie::handleScrollWheel(S32 x, S32 y, S32 clicks)
return LLViewerMediaFocus::getInstance()->handleScrollWheel(x, y, clicks);
}
-// static
-void LLToolPie::rightMouseCallback(const LLPickInfo& pick_info)
-{
- LLToolPie::getInstance()->mPick = pick_info;
- LLToolPie::getInstance()->pickRightMouseDownCallback();
-}
-
// True if you selected an object.
BOOL LLToolPie::pickLeftMouseDownCallback()
{
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index 3660c68552..5f0e28fa95 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -71,9 +71,6 @@ public:
LLObjectSelection* getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; }
void resetSelection();
- static void leftMouseCallback(const LLPickInfo& pick_info);
- static void rightMouseCallback(const LLPickInfo& pick_info);
-
static void selectionPropertiesReceived();
static void showAvatarInspector(const LLUUID& avatar_id);
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index 28fb379960..63f461b4c4 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -187,6 +187,7 @@ public:
std::string getMediaURL() const { return mMediaURL; }
std::string getCurrentMediaURL();
std::string getHomeURL() { return mHomeURL; }
+ std::string getMediaEntryURL() { return mMediaEntryURL; }
void setHomeURL(const std::string& home_url) { mHomeURL = home_url; };
void clearCache();
std::string getMimeType() { return mMimeType; }
diff --git a/indra/newview/llviewermedia_streamingaudio.cpp b/indra/newview/llviewermedia_streamingaudio.cpp
index e9293ac5a4..67b051e536 100644
--- a/indra/newview/llviewermedia_streamingaudio.cpp
+++ b/indra/newview/llviewermedia_streamingaudio.cpp
@@ -62,7 +62,7 @@ void LLStreamingAudio_MediaPlugins::start(const std::string& url)
if (!mMediaPlugin) // lazy-init the underlying media plugin
{
mMediaPlugin = initializeMedia("audio/mpeg"); // assumes that whatever media implementation supports mp3 also supports vorbis.
- llinfos << "steaming audio mMediaPlugin is now " << mMediaPlugin << llendl;
+ llinfos << "streaming audio mMediaPlugin is now " << mMediaPlugin << llendl;
}
if(!mMediaPlugin)
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 15855f154d..5445a79137 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2466,7 +2466,7 @@ class LLViewJoystickFlycam : public view_listener_t
class LLViewCheckJoystickFlycam : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
- {
+ {
bool new_value = LLViewerJoystick::getInstance()->getOverrideCamera();
return new_value;
}
@@ -3704,6 +3704,7 @@ void reset_view_final( BOOL proceed )
}
gAgent.resetView(TRUE, TRUE);
+ gAgent.setLookAt(LOOKAT_TARGET_CLEAR);
}
class LLViewLookAtLastChatter : public view_listener_t
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 90a7ee98b9..86f0f4e04e 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -182,7 +182,7 @@ void LLViewerParcelMedia::play(LLParcel* parcel)
if (!parcel) return;
- if (!gSavedSettings.getBOOL("AudioSteamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo"))
+ if (!gSavedSettings.getBOOL("AudioStreamingMedia") || !gSavedSettings.getBOOL("AudioStreamingVideo"))
return;
std::string media_url = parcel->getMediaURL();
@@ -594,8 +594,8 @@ bool callback_play_media(const LLSD& notification, const LLSD& response, LLParce
if (option == 0)
{
gSavedSettings.setBOOL("AudioStreamingVideo", TRUE);
- if(!gSavedSettings.getBOOL("AudioSteamingMedia"))
- gSavedSettings.setBOOL("AudioSteamingMedia", TRUE);
+ if(!gSavedSettings.getBOOL("AudioStreamingMedia"))
+ gSavedSettings.setBOOL("AudioStreamingMedia", TRUE);
LLViewerParcelMedia::play(parcel);
}
else
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index be68a2ef42..87a9eae028 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1754,7 +1754,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
void optionally_start_music(const std::string& music_url)
{
- if (gSavedSettings.getBOOL("AudioStreamingMusic") && gSavedSettings.getBOOL("AudioSteamingMedia"))
+ if (gSavedSettings.getBOOL("AudioStreamingMusic") && gSavedSettings.getBOOL("AudioStreamingMedia"))
{
// Make the user click the start button on the overlay bar. JC
// llinfos << "Starting parcel music " << music_url << llendl;
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index b1ad01f54f..f825eaa8ab 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -2767,7 +2767,7 @@ void LLViewerMediaTexture::updateClass()
#if 0
//force to play media.
- gSavedSettings.setBOOL("AudioSteamingMedia", true) ;
+ gSavedSettings.setBOOL("AudioStreamingMedia", true) ;
gSavedSettings.setBOOL("AudioStreamingVideo", true) ;
#endif
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 5c86822787..1400253176 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -182,7 +182,6 @@
#include "llworldmapview.h"
#include "pipeline.h"
#include "llappviewer.h"
-#include "llurlsimstring.h"
#include "llviewerdisplay.h"
#include "llspatialpartition.h"
#include "llviewerjoystick.h"
diff --git a/indra/newview/skins/default/xui/en/floater_customize.xml b/indra/newview/skins/default/xui/en/floater_customize.xml
index 94686f0bb0..0dc7d62b19 100644
--- a/indra/newview/skins/default/xui/en/floater_customize.xml
+++ b/indra/newview/skins/default/xui/en/floater_customize.xml
@@ -12,16 +12,6 @@
title="APPEARANCE"
top_delta="-185"
width="524">
- <check_box
- enabled="true"
- height="23"
- label="Show Attachments in Previews"
- layout="topleft"
- left="110"
- name="show attachments"
- tool_tip="Display attachments on your avatar in the preview panels below."
- top="20"
- width="146" />
<tab_container
height="517"
layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
index 4353b306cd..58437cd4d2 100644
--- a/indra/newview/skins/default/xui/en/panel_main_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
@@ -208,7 +208,7 @@ halign="center"
layout="topleft"
name="Reset Current">
<menu_item_call.on_click
- function="Inventory.ResetFilter" />
+ function="Inventory.ResetFilters" />
</menu_item_call>
<menu_item_call
label="Close All Folders"
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
index d6d8e9562b..7e512f9594 100644
--- a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
+++ b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
@@ -21,19 +21,6 @@
tab_position="top"
halign="center"
width="313">
- <inventory_panel
- label="MY OUTFITS"
- help_topic="my_outfits_tab"
- allow_multi_select="true"
- follows="all"
- border="false"
- left="0"
- top="0"
- height="500"
- width="290"
- mouse_opaque="true"
- name="outfitslist_accordionpanel"
- start_folder="My Outfits" />
<inventory_panel
label="WEARING"
help_topic="now_wearing_tab"
@@ -46,6 +33,19 @@
mouse_opaque="true"
name="cof_accordionpanel"
start_folder="Current Outfit" />
+ <inventory_panel
+ label="MY OUTFITS"
+ help_topic="my_outfits_tab"
+ allow_multi_select="true"
+ follows="all"
+ border="false"
+ left="0"
+ top="0"
+ height="500"
+ width="290"
+ mouse_opaque="true"
+ name="outfitslist_accordionpanel"
+ start_folder="My Outfits" />
</tab_container>
<panel
background_visible="true"