From dd692f17ab12d44177253e9dde33c93e37caef5e Mon Sep 17 00:00:00 2001 From: Sergei Litovchuk Date: Thu, 12 Aug 2010 15:56:51 +0300 Subject: EXT-8628 FIXED Crash in LLVOAvatarSelf::getAttachedPointName(). The crash was reproducible only on startup. Apparently, gAgentAvatarp was not valid at that point. Worked around by checking gAgentAvatarp for being valid. I didn't investigate what the root cause of the problem was (probably the new multi-attachments implementation), I just needed my viewer to work. Reviewed by Seraph at https://codereview.productengine.com/secondlife/r/847/. --HG-- branch : product-engine --- indra/newview/llinventorybridge.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 38f3521b2d..9bbc6514b4 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3985,6 +3985,11 @@ std::string LLObjectBridge::getLabelSuffix() const { if (get_is_item_worn(mUUID)) { + if (!isAgentAvatarValid()) + { + return LLItemBridge::getLabelSuffix() + LLTrans::getString("worn"); + } + std::string attachment_point_name = gAgentAvatarp->getAttachedPointName(mUUID); // e.g. "(worn on ...)" / "(attached to ...)" -- cgit v1.2.3 From 5de5510f58f641ddc8fca855db662d77238c134d Mon Sep 17 00:00:00 2001 From: Vadim Savchuk Date: Thu, 12 Aug 2010 16:13:48 +0300 Subject: EXT-8629 FIXED Enable the Wear button in My Outfits for outfits that are subsets of the current outfit. We allowed wearing any outfit that contains non-worn items. Now it appears to be wrong, therefore and I changed condition so that we allow wearing any outfit (or folder) that contains the full set of body parts. Reviewed by Sergey Litovchuk at https://codereview.productengine.com/secondlife/r/855/ --HG-- branch : product-engine --- indra/newview/llappearancemgr.cpp | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 2729053390..6fdd71bfbf 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1305,16 +1305,8 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id) return false; } - // Check whether the outfit contains any non-worn wearables. - LLInventoryModel::cat_array_t cats; - LLInventoryModel::item_array_t items; - LLFindWearablesEx not_worn(/*is_worn=*/ false, /*include_body_parts=*/ true); - gInventory.collectDescendentsIf(outfit_cat_id, - cats, - items, - LLInventoryModel::EXCLUDE_TRASH, - not_worn); - return items.size() > 0; + // Check whether the outfit contains the full set of body parts (shape+skin+hair+eyes). + return getCanMakeFolderIntoOutfit(outfit_cat_id); } void LLAppearanceMgr::purgeBaseOutfitLink(const LLUUID& category) -- cgit v1.2.3 From 44adcdecd0abb1726d6ae778e6e37b4da431e55a Mon Sep 17 00:00:00 2001 From: Vadim Savchuk Date: Thu, 12 Aug 2010 16:16:57 +0300 Subject: EXT-8473 FIXED Fixed renaming inventory items without hitting Enter. Problem: The bug was caused by the fix of EXT-6682 that prematurely forgets the item being renamed (by resetting mRenameItem) whenever the renamer input field loses focus. That's why we couldn't actually finish renaming item. Fix: The code is quite messy, but I'll try to explain. There are three cases when we should hide the renamer: 1) ESC key is hit (just hide). 2) ENTER key is hit (rename, then hide). 3) renamer loses focus (rename, then hide). In the first two cases we manually remove the renamer from the popups list -- by calling gViewerWindow->removePopup(mRenamer). In the third case that's done automatically. So, in all cases the onRenamerLost() pop-up is called that hides the renamer and only *then* resets mRenameItem. Not only this approach fixes the bug -- I hope it's a bit more straightforward too. Reviewed by Seraph at https://codereview.productengine.com/secondlife/r/854/ --HG-- branch : product-engine --- indra/newview/llfolderview.cpp | 48 ++++++++++++++++++------------------------ indra/newview/llfolderview.h | 2 +- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 5aa504eb35..81f00af948 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -104,7 +104,6 @@ void copy_selected_item(void* user_data); void open_selected_items(void* user_data); void properties_selected_items(void* user_data); void paste_items(void* user_data); -void renamer_focus_lost( LLFocusableElement* handler, void* user_data ); //--------------------------------------------------------------------------- @@ -275,6 +274,8 @@ LLFolderView::LLFolderView(const Params& p) // Destroys the object LLFolderView::~LLFolderView( void ) { + closeRenamer(); + // The release focus call can potentially call the // scrollcontainer, which can potentially be called with a partly // destroyed scollcontainer. Just null it out here, and no worries @@ -290,8 +291,6 @@ LLFolderView::~LLFolderView( void ) LLView::deleteViewByHandle(mPopupMenuHandle); - gViewerWindow->removePopup(mRenamer); - mAutoOpenItems.removeAllNodes(); clearSelection(); mItems.clear(); @@ -998,12 +997,7 @@ void LLFolderView::finishRenamingItem( void ) mRenameItem->rename( mRenamer->getText() ); } - gViewerWindow->removePopup(mRenamer); - - if( mRenameItem ) - { - setSelectionFromRoot( mRenameItem, TRUE ); - } + closeRenamer(); // List is re-sorted alphabeticly, so scroll to make sure the selected item is visible. scrollToShowSelection(); @@ -1011,15 +1005,10 @@ void LLFolderView::finishRenamingItem( void ) void LLFolderView::closeRenamer( void ) { - // will commit current name (which could be same as original name) - mRenamer->setFocus( FALSE ); - mRenamer->setVisible( FALSE ); - gViewerWindow->removePopup(mRenamer); - - if( mRenameItem ) + if (mRenamer && mRenamer->getVisible()) { - setSelectionFromRoot( mRenameItem, TRUE ); - mRenameItem = NULL; + // Triggers onRenamerLost() that actually closes the renamer. + gViewerWindow->removePopup(mRenamer); } } @@ -1444,8 +1433,7 @@ void LLFolderView::startRenamingSelectedItem( void ) mRenamer->setVisible( TRUE ); // set focus will fail unless item is visible mRenamer->setFocus( TRUE ); - mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); - mRenamer->setFocusLostCallback(boost::bind(&LLFolderView::onRenamerLost, this, _1)); + mRenamer->setTopLostCallback(boost::bind(&LLFolderView::onRenamerLost, this)); gViewerWindow->addPopup(mRenamer); } } @@ -1966,10 +1954,7 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, void LLFolderView::deleteAllChildren() { - if(mRenamer == gFocusMgr.getTopCtrl()) - { - gViewerWindow->removePopup(mRenamer); - } + closeRenamer(); LLView::deleteViewByHandle(mPopupMenuHandle); mPopupMenuHandle = LLHandle(); mRenamer = NULL; @@ -2452,13 +2437,20 @@ S32 LLFolderView::notify(const LLSD& info) /// Local function definitions ///---------------------------------------------------------------------------- -void LLFolderView::onRenamerLost( LLFocusableElement* renamer) +void LLFolderView::onRenamerLost() { - mRenameItem = NULL; - LLUICtrl* uictrl = dynamic_cast(renamer); - if (uictrl) + if (mRenamer && mRenamer->getVisible()) { - uictrl->setVisible(FALSE); + mRenamer->setVisible(FALSE); + + // will commit current name (which could be same as original name) + mRenamer->setFocus(FALSE); + } + + if( mRenameItem ) + { + setSelectionFromRoot( mRenameItem, TRUE ); + mRenameItem = NULL; } } diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index f1d39a41ae..31352d04bf 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -284,7 +284,7 @@ protected: LLScrollContainer* mScrollContainer; // NULL if this is not a child of a scroll container. void commitRename( const LLSD& data ); - void onRenamerLost( LLFocusableElement* renamer); + void onRenamerLost(); void finishRenamingItem( void ); void closeRenamer( void ); -- cgit v1.2.3 From 4627c4b698cf75abd8bd59b6a05ea923c57f7574 Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Thu, 12 Aug 2010 21:52:22 -0600 Subject: Fix for EXT-8578: Blurry image in profile never resolves - texture queue problem? --- indra/newview/llviewertexture.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e38608bcfc..9b3243a1bc 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -814,7 +814,7 @@ void LLViewerTexture::generateGLTexture() LLImageGL* LLViewerTexture::getGLTexture() const { llassert(mGLTexturep.notNull()) ; - + return mGLTexturep ; } @@ -1489,8 +1489,13 @@ void LLViewerFetchedTexture::setKnownDrawSize(S32 width, S32 height) //virtual void LLViewerFetchedTexture::processTextureStats() { - if(mFullyLoaded) + if(mForceToSaveRawImage && mDesiredSavedRawDiscardLevel >= 0) //force to refetch the texture. { + mDesiredDiscardLevel = llmin(mDesiredDiscardLevel, (S8)mDesiredSavedRawDiscardLevel) ; + } + + if(mFullyLoaded) + { if(mDesiredDiscardLevel <= mMinDesiredDiscardLevel)//already loaded { return ; -- cgit v1.2.3