diff options
| -rw-r--r-- | indra/llui/llfolderviewitem.cpp | 22 | ||||
| -rw-r--r-- | indra/newview/llinventorygallery.cpp | 14 | 
2 files changed, 33 insertions, 3 deletions
| diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 0093f4c17c..38a1a9a1ab 100644 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -32,6 +32,7 @@  #include "llfolderview.h"  #include "llfolderviewmodel.h"  #include "llpanel.h" +#include "llcallbacklist.h"  #include "llcriticaldamp.h"  #include "llclipboard.h"  #include "llfocusmgr.h"		// gFocusMgr @@ -1844,7 +1845,12 @@ void LLFolderViewFolder::setOpen(BOOL openitem)  {      if(mSingleFolderMode)      { -        getViewModelItem()->navigateToFolder(); +        // navigateToFolder can destroy this view +        // delay it in case setOpen was called from click or key processing +        doOnIdleOneTime([this]() +                        { +                            getViewModelItem()->navigateToFolder(); +                        });      }      else      { @@ -2074,7 +2080,19 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )      if(mSingleFolderMode)      {          static LLUICachedControl<bool> double_click_new_window("SingleModeDoubleClickOpenWindow", false); -        getViewModelItem()->navigateToFolder(double_click_new_window); +        if (double_click_new_window) +        { +            getViewModelItem()->navigateToFolder(true); +        } +        else +        { +            // navigating is going to destroy views and change children +            // delay it untill handleDoubleClick processing is complete +            doOnIdleOneTime([this]() +                            { +                                getViewModelItem()->navigateToFolder(false); +                            }); +        }          return TRUE;      } diff --git a/indra/newview/llinventorygallery.cpp b/indra/newview/llinventorygallery.cpp index 0801b71e34..eb603f0ac3 100644 --- a/indra/newview/llinventorygallery.cpp +++ b/indra/newview/llinventorygallery.cpp @@ -2449,7 +2449,19 @@ BOOL LLInventoryGalleryItem::handleDoubleClick(S32 x, S32 y, MASK mask)  {      if (mIsFolder && mGallery)      { -        mGallery->setRootFolder(mUUID); +        // setRootFolder can destroy this item. +        // Delay it until handleDoubleClick processing is complete +        // or make gallery handle doubleclicks. +        LLHandle<LLPanel> handle = mGallery->getHandle(); +        LLUUID navigate_to = mUUID; +        doOnIdleOneTime([handle, navigate_to]() +                        { +                            LLInventoryGallery* gallery = (LLInventoryGallery*)handle.get(); +                            if (gallery) +                            { +                                gallery->setRootFolder(navigate_to); +                            } +                        });      }      else      { | 
