|
|
@ -483,7 +483,7 @@ std::vector<std::pair<LLRect, LLUIColor>> LLTextBase::getHighlightedBgRects()
|
|||
F32 left_precise = (F32)line_iter->mRect.mLeft;
|
||||
F32 right_precise = (F32)line_iter->mRect.mLeft;
|
||||
|
||||
for (; segment_iter != mSegments.end(); ++segment_iter)
|
||||
for (; segment_iter != mSegments.end(); ++segment_iter, segment_offset = 0)
|
||||
{
|
||||
LLTextSegmentPtr segmentp = *segment_iter;
|
||||
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 681 B |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 669 B |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
|
@ -329,6 +329,15 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
|
|||
LL_DEBUGS("LLLogin") << "reason " << reason_response
|
||||
<< " message " << message_response
|
||||
<< LL_ENDL;
|
||||
|
||||
if (response.has("mfa_hash"))
|
||||
{
|
||||
mRequestData["params"]["mfa_hash"] = response["mfa_hash"];
|
||||
mRequestData["params"]["token"] = "";
|
||||
|
||||
saveMFAHash(response);
|
||||
}
|
||||
|
||||
// For the cases of critical message or TOS agreement,
|
||||
// start the TOS dialog. The dialog response will be handled
|
||||
// by the LLLoginInstance::handleTOSResponse() callback.
|
||||
|
|
@ -593,6 +602,24 @@ bool LLLoginInstance::handleMFAChallenge(LLSD const & notif, LLSD const & respon
|
|||
return true;
|
||||
}
|
||||
|
||||
void LLLoginInstance::saveMFAHash(LLSD const& response)
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(LLStartUp::getUserId());
|
||||
|
||||
// Only save mfa_hash for future logins if the user wants their info remembered.
|
||||
if (response.has("mfa_hash") && gSavedSettings.getBOOL("RememberUser") && LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
|
||||
}
|
||||
else if (!LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id);
|
||||
}
|
||||
// TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
|
||||
std::string construct_start_string()
|
||||
{
|
||||
std::string start;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,8 @@ public:
|
|||
void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
|
||||
LLNotificationsInterface& getNotificationsInterface() const { return *mNotifications; }
|
||||
|
||||
void saveMFAHash(LLSD const& response);
|
||||
|
||||
private:
|
||||
typedef std::shared_ptr<LLEventAPI::Response> ResponsePtr;
|
||||
void constructAuthParams(LLPointer<LLCredential> user_credentials);
|
||||
|
|
|
|||
|
|
@ -69,7 +69,6 @@ const S32 GALLERY_ITEMS_PER_ROW_MIN = 2;
|
|||
|
||||
LLOutfitGallery::LLOutfitGallery(const LLOutfitGallery::Params& p)
|
||||
: LLOutfitListBase(),
|
||||
mOutfitsObserver(NULL),
|
||||
mScrollPanel(NULL),
|
||||
mGalleryPanel(NULL),
|
||||
mLastRowPanel(NULL),
|
||||
|
|
@ -730,12 +729,6 @@ LLOutfitGallery::~LLOutfitGallery()
|
|||
{
|
||||
delete mOutfitGalleryMenu;
|
||||
|
||||
if (gInventory.containsObserver(mOutfitsObserver))
|
||||
{
|
||||
gInventory.removeObserver(mOutfitsObserver);
|
||||
}
|
||||
delete mOutfitsObserver;
|
||||
|
||||
while (!mUnusedRowPanels.empty())
|
||||
{
|
||||
LLPanel* panelp = mUnusedRowPanels.back();
|
||||
|
|
@ -797,7 +790,7 @@ void LLOutfitGallery::updateAddedCategory(LLUUID cat_id)
|
|||
{
|
||||
// Assume a subfolder that contains or will contain outfits, track it
|
||||
const LLUUID outfits = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
|
||||
mOutfitsObserver->addCategory(cat_id, [this, outfits]()
|
||||
mCategoriesObserver->addCategory(cat_id, [this, outfits]()
|
||||
{
|
||||
observerCallback(outfits);
|
||||
});
|
||||
|
|
@ -820,14 +813,8 @@ void LLOutfitGallery::updateAddedCategory(LLUUID cat_id)
|
|||
if (!outfit_category)
|
||||
return;
|
||||
|
||||
if (mOutfitsObserver == NULL)
|
||||
{
|
||||
mOutfitsObserver = new LLInventoryCategoriesObserver();
|
||||
gInventory.addObserver(mOutfitsObserver);
|
||||
}
|
||||
|
||||
// Start observing changes in "My Outfits" category.
|
||||
mOutfitsObserver->addCategory(cat_id,
|
||||
mCategoriesObserver->addCategory(cat_id,
|
||||
boost::bind(&LLOutfitGallery::refreshOutfit, this, cat_id), true);
|
||||
|
||||
outfit_category->fetch();
|
||||
|
|
@ -840,7 +827,7 @@ void LLOutfitGallery::updateRemovedCategory(LLUUID cat_id)
|
|||
if (outfits_iter != mOutfitMap.end())
|
||||
{
|
||||
// 0. Remove category from observer.
|
||||
mOutfitsObserver->removeCategory(cat_id);
|
||||
mCategoriesObserver->removeCategory(cat_id);
|
||||
|
||||
//const LLUUID& outfit_id = outfits_iter->first;
|
||||
LLOutfitGalleryItem* item = outfits_iter->second;
|
||||
|
|
|
|||
|
|
@ -184,9 +184,6 @@ private:
|
|||
typedef item_num_map_t::value_type item_numb_map_value_t;
|
||||
item_num_map_t mItemIndexMap;
|
||||
std::map<S32, LLOutfitGalleryItem*> mIndexToItemMap;
|
||||
|
||||
|
||||
LLInventoryCategoriesObserver* mOutfitsObserver;
|
||||
};
|
||||
class LLOutfitGalleryContextMenu : public LLOutfitContextMenu
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3884,25 +3884,7 @@ bool process_login_success_response()
|
|||
LLViewerMedia::getInstance()->openIDSetup(openid_url, openid_token);
|
||||
}
|
||||
|
||||
|
||||
// Only save mfa_hash for future logins if the user wants their info remembered.
|
||||
if(response.has("mfa_hash")
|
||||
&& gSavedSettings.getBOOL("RememberUser")
|
||||
&& LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(gUserCredential->userID());
|
||||
gSecAPIHandler->addToProtectedMap("mfa_hash", grid, user_id, response["mfa_hash"]);
|
||||
// TODO(brad) - related to SL-17223 consider building a better interface that sync's automatically
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
else if (!LLLoginInstance::getInstance()->saveMFA())
|
||||
{
|
||||
std::string grid(LLGridManager::getInstance()->getGridId());
|
||||
std::string user_id(gUserCredential->userID());
|
||||
gSecAPIHandler->removeFromProtectedMap("mfa_hash", grid, user_id);
|
||||
gSecAPIHandler->syncProtectedMap();
|
||||
}
|
||||
LLLoginInstance::getInstance()->saveMFAHash(response);
|
||||
|
||||
bool success = false;
|
||||
// JC: gesture loading done below, when we have an asset system
|
||||
|
|
|
|||
|
|
@ -985,7 +985,10 @@ void LLWebRTCVoiceClient::updatePosition(void)
|
|||
LLWebRTCVoiceClient::participantStatePtr_t participant = findParticipantByID("Estate", gAgentID);
|
||||
if(participant)
|
||||
{
|
||||
participant->mRegion = gAgent.getRegion()->getRegionID();
|
||||
if (participant->mRegion != region->getRegionID()) {
|
||||
participant->mRegion = region->getRegionID();
|
||||
setMuteMic(mMuteMic);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3104,23 +3107,20 @@ LLVoiceWebRTCSpatialConnection::~LLVoiceWebRTCSpatialConnection()
|
|||
|
||||
void LLVoiceWebRTCSpatialConnection::setMuteMic(bool muted)
|
||||
{
|
||||
if (mMuted != muted)
|
||||
mMuted = muted;
|
||||
if (mWebRTCAudioInterface)
|
||||
{
|
||||
mMuted = muted;
|
||||
if (mWebRTCAudioInterface)
|
||||
LLViewerRegion *regionp = gAgent.getRegion();
|
||||
if (regionp && mRegionID == regionp->getRegionID())
|
||||
{
|
||||
LLViewerRegion *regionp = gAgent.getRegion();
|
||||
if (regionp && mRegionID == regionp->getRegionID())
|
||||
{
|
||||
mWebRTCAudioInterface->setMute(muted);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Always mute this agent with respect to neighboring regions.
|
||||
// Peers don't want to hear this agent from multiple regions
|
||||
// as that'll echo.
|
||||
mWebRTCAudioInterface->setMute(true);
|
||||
}
|
||||
mWebRTCAudioInterface->setMute(muted);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Always mute this agent with respect to neighboring regions.
|
||||
// Peers don't want to hear this agent from multiple regions
|
||||
// as that'll echo.
|
||||
mWebRTCAudioInterface->setMute(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ static LLEventStream gTestPump("test_pump");
|
|||
#include "../llstartup.h"
|
||||
LLSLURL LLStartUp::sStartSLURL;
|
||||
LLSLURL& LLStartUp::getStartSLURL() { return sStartSLURL; }
|
||||
std::string LLStartUp::getUserId() { return ""; };
|
||||
|
||||
#include "lllogin.h"
|
||||
|
||||
|
|
|
|||