diff options
author | Andrew Dyukov <adyukov@productengine.com> | 2010-04-06 16:02:14 +0300 |
---|---|---|
committer | Andrew Dyukov <adyukov@productengine.com> | 2010-04-06 16:02:14 +0300 |
commit | b658e4115d137713ab55bf73f517a528deffb534 (patch) | |
tree | 61e4f572a5e73bd776598bc4883834f4583182ab | |
parent | cf94709c60949d5376f8c5dc14bf5472631cd6c9 (diff) |
Fixed normal bug EXT-6464 (Buy pass from popup menu doesn't work).
- The bug was caused by deselection of parcel(because of zero ref count to parcel selection) after appearance of alert with ok/cancel.
Added setting pointer to this selection before notification appearance and nullifying pointer it after user chooses ok or cancel. Nullifying
will always take place because alert is modal, so there is no chance that LLPanelLandGeneral::cbBuyPass() won't be called.
Reviewed by Mike at https://codereview.productengine.com/secondlife/r/180/
--HG--
branch : product-engine
-rw-r--r-- | indra/newview/llfloaterland.cpp | 5 | ||||
-rw-r--r-- | indra/newview/llfloaterland.h | 5 |
2 files changed, 10 insertions, 0 deletions
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 25d3f971b5..256796aa80 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -90,6 +90,7 @@ static std::string MATURITY = "[MATURITY]"; // constants used in callbacks below - syntactic sugar. static const BOOL BUY_GROUP_LAND = TRUE; static const BOOL BUY_PERSONAL_LAND = FALSE; +LLPointer<LLParcelSelection> LLPanelLandGeneral::sSelectionForBuyPass = NULL; // Statics LLParcelSelectionObserver* LLFloaterLand::sObserver = NULL; @@ -974,6 +975,8 @@ void LLPanelLandGeneral::onClickBuyPass(void* data) args["PARCEL_NAME"] = parcel_name; args["TIME"] = time; + // creating pointer on selection to avoid deselection of parcel until we are done with buying pass (EXT-6464) + sSelectionForBuyPass = LLViewerParcelMgr::getInstance()->getParcelSelection(); LLNotificationsUtil::add("LandBuyPass", args, LLSD(), cbBuyPass); } @@ -1005,6 +1008,8 @@ bool LLPanelLandGeneral::cbBuyPass(const LLSD& notification, const LLSD& respons // User clicked OK LLViewerParcelMgr::getInstance()->buyPass(); } + // we are done with buying pass, additional selection is no longer needed + sSelectionForBuyPass = NULL; return false; } diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h index fe80766a74..0a743e5215 100644 --- a/indra/newview/llfloaterland.h +++ b/indra/newview/llfloaterland.h @@ -234,6 +234,11 @@ protected: LLSafeHandle<LLParcelSelection>& mParcel; + // This pointer is needed to avoid parcel deselection until buying pass is completed or canceled. + // Deselection happened because of zero references to parcel selection, which took place when + // "Buy Pass" was called from popup menu(EXT-6464) + static LLPointer<LLParcelSelection> sSelectionForBuyPass; + static LLHandle<LLFloater> sBuyPassDialogHandle; }; |