diff options
Diffstat (limited to 'indra/newview/llworldmap.cpp')
-rw-r--r-- | indra/newview/llworldmap.cpp | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 50c9ceeb0a..6d0853a6dc 100644 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -108,6 +108,7 @@ LLWorldMap::LLWorldMap() : mNeighborMapWidth(0), mNeighborMapHeight(0), mSLURLRegionName(), + mSLURLRegionHandle(0), mSLURL(), mSLURLCallback(0), mSLURLTeleport(false) @@ -409,6 +410,7 @@ void LLWorldMap::sendNamedRegionRequest(std::string region_name, bool teleport) // immediately teleport when result returned { mSLURLRegionName = region_name; + mSLURLRegionHandle = 0; mSLURL = callback_url; mSLURLCallback = callback; mSLURLTeleport = teleport; @@ -416,6 +418,26 @@ void LLWorldMap::sendNamedRegionRequest(std::string region_name, sendNamedRegionRequest(region_name); } +void LLWorldMap::sendHandleRegionRequest(U64 region_handle, + url_callback_t callback, + const std::string& callback_url, + bool teleport) // immediately teleport when result returned +{ + mSLURLRegionName.clear(); + mSLURLRegionHandle = region_handle; + mSLURL = callback_url; + mSLURLCallback = callback; + mSLURLTeleport = teleport; + + U32 global_x; + U32 global_y; + from_region_handle(region_handle, &global_x, &global_y); + U16 grid_x = (U16)(global_x / REGION_WIDTH_UNITS); + U16 grid_y = (U16)(global_y / REGION_WIDTH_UNITS); + + sendMapBlockRequest(grid_x, grid_y, grid_x, grid_y, true); +} + // public void LLWorldMap::sendMapBlockRequest(U16 min_x, U16 min_y, U16 max_x, U16 max_y, bool return_nonexistent) { @@ -566,17 +588,6 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) found_null_sim = true; } - else if(gWorldMap->mSLURLCallback != NULL) - { - // Server returns definitive capitalization, SLURL might - // not have that. - if (!stricmp(gWorldMap->mSLURLRegionName.c_str(), name)) - { - gWorldMap->mSLURLCallback(handle, gWorldMap->mSLURL, image_id, gWorldMap->mSLURLTeleport); - gWorldMap->mSLURLCallback = NULL; - gWorldMap->mSLURLRegionName.clear(); - } - } else { adjust = gWorldMap->extendAABB(x_meters, @@ -642,6 +653,22 @@ void LLWorldMap::processMapBlockReply(LLMessageSystem* msg, void**) } } } + + if(gWorldMap->mSLURLCallback != NULL) + { + // Server returns definitive capitalization, SLURL might + // not have that. + if (!stricmp(gWorldMap->mSLURLRegionName.c_str(), name) || (gWorldMap->mSLURLRegionHandle == handle)) + { + url_callback_t callback = gWorldMap->mSLURLCallback; + + gWorldMap->mSLURLCallback = NULL; + gWorldMap->mSLURLRegionName.clear(); + gWorldMap->mSLURLRegionHandle = 0; + + callback(handle, gWorldMap->mSLURL, image_id, gWorldMap->mSLURLTeleport); + } + } } if(adjust) gFloaterWorldMap->adjustZoomSliderBounds(); |