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
meow-7.2.2
Andrew Dyukov 2010-04-06 16:02:14 +03:00
parent cf94709c60
commit b658e4115d
2 changed files with 10 additions and 0 deletions

View File

@ -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;
}

View File

@ -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;
};