summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dyukov <adyukov@productengine.com>2010-04-06 16:02:14 +0300
committerAndrew Dyukov <adyukov@productengine.com>2010-04-06 16:02:14 +0300
commitb658e4115d137713ab55bf73f517a528deffb534 (patch)
tree61e4f572a5e73bd776598bc4883834f4583182ab
parentcf94709c60949d5376f8c5dc14bf5472631cd6c9 (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.cpp5
-rw-r--r--indra/newview/llfloaterland.h5
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;
};