summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llconsole.cpp6
-rw-r--r--indra/llui/lldockablefloater.cpp9
-rw-r--r--indra/llui/lldockablefloater.h17
-rw-r--r--indra/llui/lldockcontrol.cpp12
-rw-r--r--indra/llui/llurlentry.cpp8
-rw-r--r--indra/newview/character/avatar_lad.xml12
-rw-r--r--indra/newview/llagentwearables.cpp86
-rw-r--r--indra/newview/llfasttimerview.cpp4
-rw-r--r--indra/newview/llfavoritesbar.cpp2
-rw-r--r--indra/newview/llfloatersearch.cpp14
-rw-r--r--indra/newview/llfloatersearch.h2
-rw-r--r--indra/newview/llmediactrl.cpp1
-rw-r--r--indra/newview/llnearbychat.cpp2
-rw-r--r--indra/newview/llpanellogin.cpp7
-rw-r--r--indra/newview/llpanelteleporthistory.cpp7
-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/llsyswellwindow.cpp1
-rw-r--r--indra/newview/llteleporthistory.cpp1
-rw-r--r--indra/newview/lltoast.cpp2
-rw-r--r--indra/newview/lltoolpie.cpp27
-rw-r--r--indra/newview/lltoolpie.h3
-rw-r--r--indra/newview/llviewerwindow.cpp1
-rw-r--r--indra/newview/skins/default/xui/en/favorites_bar_button.xml2
-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
27 files changed, 218 insertions, 129 deletions
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/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
index 6a5b475134..74438b184a 100644
--- a/indra/llui/lldockablefloater.cpp
+++ b/indra/llui/lldockablefloater.cpp
@@ -57,6 +57,7 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl,
, mOverlapsScreenChannel(false)
{
init(this);
+ mUseTongue = true;
}
LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
@@ -64,6 +65,14 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDock
LLFloater(key, params), mDockControl(dockControl), mUniqueDocking(uniqueDocking)
{
init(this);
+ mUseTongue = true;
+}
+
+LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
+ bool useTongue, const LLSD& key, const Params& params) :
+ LLFloater(key, params), mDockControl(dockControl), mUseTongue(useTongue), mUniqueDocking(uniqueDocking)
+{
+ init(this);
}
LLDockableFloater::~LLDockableFloater()
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
index ae4f99e205..2b1ce99ae2 100644
--- a/indra/llui/lldockablefloater.h
+++ b/indra/llui/lldockablefloater.h
@@ -62,6 +62,20 @@ public:
*/
LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
const LLSD& key, const Params& params = getDefaultParams());
+
+ /**
+ * Constructor.
+ * @param dockControl a pointer to the doc control instance
+ * @param uniqueDocking - a flag defines is docking should work as tab(at one
+ * moment only one docked floater can be shown).
+ * @praram useTongue - a flag defines is dock tongue should be used.
+ * @params key a floater key.
+ * @params params a floater parameters
+ */
+ LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,
+ bool useTongue, const LLSD& key,
+ const Params& params = getDefaultParams());
+
virtual ~LLDockableFloater();
static LLHandle<LLFloater> getInstanceHandle() { return sInstanceHandle; }
@@ -104,6 +118,7 @@ public:
virtual void setOverlapsScreenChannel(bool overlaps) { mOverlapsScreenChannel = overlaps; }
bool getUniqueDocking() { return mUniqueDocking; }
+ bool getUseTongue() { return mUseTongue; }
private:
/**
* Provides unique of dockable floater.
@@ -125,6 +140,8 @@ private:
*/
bool mUniqueDocking;
+ bool mUseTongue;
+
bool mOverlapsScreenChannel;
};
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 1c3c8449c5..0d8e54aa48 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -182,12 +182,12 @@ void LLDockControl::moveDockable()
LLRect rootRect;
mGetAllowedRectCallback(rootRect);
- bool unique_docking = false;
+ bool use_tongue = false;
LLDockableFloater* dockable_floater =
dynamic_cast<LLDockableFloater*> (mDockableFloater);
if (dockable_floater != NULL)
{
- unique_docking = dockable_floater->getUniqueDocking();
+ use_tongue = dockable_floater->getUseTongue();
}
LLRect dockableRect = mDockableFloater->calcScreenRect();
@@ -218,7 +218,7 @@ void LLDockControl::moveDockable()
x = dockRect.getCenterX() - dockableRect.getWidth() / 2;
y = dockRect.mTop + dockableRect.getHeight();
// unique docking used with dock tongue, so add tongue height o the Y coordinate
- if (unique_docking)
+ if (use_tongue)
{
y += mDockTongue->getHeight();
}
@@ -287,15 +287,15 @@ void LLDockControl::forceRecalculatePosition()
void LLDockControl::drawToungue()
{
- bool unique_docking = false;
+ bool use_tongue = false;
LLDockableFloater* dockable_floater =
dynamic_cast<LLDockableFloater*> (mDockableFloater);
if (dockable_floater != NULL)
{
- unique_docking = dockable_floater->getUniqueDocking();
+ use_tongue = dockable_floater->getUseTongue();
}
- if (mEnabled && unique_docking)
+ if (mEnabled && use_tongue)
{
mDockTongue->draw(mDockTongueX, mDockTongueY);
}
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/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..dc1598aacd 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);
@@ -2084,52 +2085,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 +2142,6 @@ void LLLibraryOutfitsFetch::folderDone(void)
if (cat_array.count() > 0 || wearable_array.count() > 0)
{
mOutfitsPopulated = true;
- gInventory.removeObserver(this);
return;
}
@@ -2152,22 +2150,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 +2167,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 +2193,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/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/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
index 6ae6b4877a..4103ccf175 100644
--- a/indra/newview/llfavoritesbar.cpp
+++ b/indra/newview/llfavoritesbar.cpp
@@ -644,7 +644,7 @@ LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode()
bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode);
if (!success)
{
- llwarns << "Unable to read xml file with button for Favorites Bar: favorites_bar_button.xml" << llendl;
+ llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl;
buttonXMLNode = NULL;
}
return buttonXMLNode;
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 595d84f9f0..c6d9fee630 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -77,6 +77,15 @@ void LLFloaterSearch::onOpen(const LLSD& key)
search(key);
}
+void LLFloaterSearch::onClose(bool app_quitting)
+{
+ if (! app_quitting)
+ {
+ // Show the blank home page ready for the next onOpen()
+ mBrowser->navigateHome();
+ }
+}
+
void LLFloaterSearch::handleMediaEvent(LLPluginClassMedia *self, EMediaEvent event)
{
switch (event)
@@ -110,6 +119,11 @@ void LLFloaterSearch::search(const LLSD &key)
return;
}
+ // display the blank home page first, to clear the display of
+ // any previous search results while the new results load.
+ // The home page is set in floater_search.xml as start_url.
+ mBrowser->navigateHome();
+
// reset the god level warning as we're sending the latest state
childHide("refresh_search");
mSearchGodLevel = gAgent.getGodLevel();
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
index ba817adf7f..0a8d9bbe36 100644
--- a/indra/newview/llfloatersearch.h
+++ b/indra/newview/llfloatersearch.h
@@ -59,6 +59,8 @@ public:
/// see search() for details on the key parameter.
/*virtual*/ void onOpen(const LLSD& key);
+ /*virtual*/ void onClose(bool app_quitting);
+
/// perform a search with the specific search term.
/// The key should be a map that can contain the following keys:
/// - "id": specifies the text phrase to search for
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/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 2ad82d3e8e..649c414569 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -63,7 +63,7 @@
static const S32 RESIZE_BAR_THICKNESS = 3;
LLNearbyChat::LLNearbyChat(const LLSD& key)
- : LLDockableFloater(NULL, false, key)
+ : LLDockableFloater(NULL, false, false, key)
,mChatHistory(NULL)
{
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/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
index 245f694ac6..65a3d9d41b 100644
--- a/indra/newview/llpanelteleporthistory.cpp
+++ b/indra/newview/llpanelteleporthistory.cpp
@@ -1045,4 +1045,11 @@ void LLTeleportHistoryPanel::onAccordionExpand(LLUICtrl* ctrl, const LLSD& param
bool expanded = param.asBoolean();
// Save accordion tab state to restore it in refresh()
setAccordionCollapsedByUser(ctrl, !expanded);
+
+ // Reset selection upon accordion being collapsed
+ // to disable "Teleport" and "Map" buttons for hidden item.
+ if (!expanded && mLastSelectedFlatlList)
+ {
+ mLastSelectedFlatlList->resetSelection();
+ }
}
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/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index a46ca1f8ac..2114b1c9d7 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -349,7 +349,6 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&
}
// Initialize chiclet.
- mChiclet->setRect(LLRect(5, 28, 30, 3)); // *HACK: workaround for (EXT-3599)
mChiclet->setChicletSizeChangedCallback(boost::bind(&LLIMWellWindow::RowPanel::onChicletSizeChanged, this, mChiclet, _2));
mChiclet->enableCounterControl(true);
mChiclet->setCounter(chicletCounter);
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/lltoast.cpp b/indra/newview/lltoast.cpp
index 96d1624cd4..110d158e2d 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -266,6 +266,8 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask)
{
mOnToastHoverSignal(this, MOUSE_ENTER);
+ setBackgroundOpaque(TRUE);
+
//toasts fading is management by Screen Channel
sendChildToFront(mHideBtn);
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/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/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
index 90105f92fd..dcf9847adb 100644
--- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml
+++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
@@ -23,8 +23,6 @@
pad_left="11"
pad_right="7"
tab_stop="false"
- pad_right="10"
- pad_left="10"
top="0"
use_ellipses="true"
width="140" />
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"