diff options
Diffstat (limited to 'indra/newview/llviewerparcelmgr.cpp')
-rw-r--r-- | indra/newview/llviewerparcelmgr.cpp | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index be68a2ef42..10a95443f1 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -44,14 +44,16 @@ #include "llparcel.h" #include "llsecondlifeurls.h" #include "message.h" +#include "llfloaterreg.h" // Viewer includes #include "llagent.h" #include "llviewerwindow.h" #include "llviewercontrol.h" -#include "llfirstuse.h" +//#include "llfirstuse.h" #include "llfloaterbuyland.h" #include "llfloatergroups.h" +#include "llfloaternearbymedia.h" #include "llfloatersellland.h" #include "llfloatertools.h" #include "llparcelselection.h" @@ -1318,14 +1320,37 @@ void LLViewerParcelMgr::sendParcelPropertiesUpdate(LLParcel* parcel, bool use_ag void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos) { - //FIXME: only request parcel info when tooltip is shown - return; - /*LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos ); + static U32 last_west, last_south; + + + // only request parcel info when tooltip is shown + if (!gSavedSettings.getBOOL("ShowLandHoverTip")) + { + return; + } + + // only request parcel info if position has changed outside of the + // last parcel grid step + U32 west_parcel_step = (U32) floor( pos.mdV[VX] / PARCEL_GRID_STEP_METERS ); + U32 south_parcel_step = (U32) floor( pos.mdV[VY] / PARCEL_GRID_STEP_METERS ); + + if ((west_parcel_step == last_west) && (south_parcel_step == last_south)) + { + return; + } + else + { + last_west = west_parcel_step; + last_south = south_parcel_step; + } + + LLViewerRegion* region = LLWorld::getInstance()->getRegionFromPosGlobal( pos ); if (!region) { return; } + // Send a rectangle around the point. // This means the parcel sent back is at least a rectangle around the point, // which is more efficient for public land. Fewer requests are sent. JC @@ -1352,7 +1377,7 @@ void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos) msg->addBOOL("SnapSelection", FALSE ); msg->sendReliable( region->getHost() ); - mHoverRequestResult = PARCEL_RESULT_NO_DATA;*/ + mHoverRequestResult = PARCEL_RESULT_NO_DATA; } @@ -1735,7 +1760,7 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use } else if (!gAudiop->getInternetStreamURL().empty()) { - llinfos << "Stopping parcel music" << llendl; + llinfos << "Stopping parcel music (parcel stream URL is empty)" << llendl; gAudiop->startInternetStream(LLStringUtil::null); } } @@ -1754,15 +1779,19 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use void optionally_start_music(const std::string& music_url) { - if (gSavedSettings.getBOOL("AudioStreamingMusic") && gSavedSettings.getBOOL("AudioSteamingMedia")) - { - // Make the user click the start button on the overlay bar. JC - // llinfos << "Starting parcel music " << music_url << llendl; - - // now only play music when you enter a new parcel if the control is in PLAY state - // changed as part of SL-4878 - if ( gOverlayBar && gOverlayBar->musicPlaying()) + if (gSavedSettings.getBOOL("AudioStreamingMusic") && + gSavedSettings.getBOOL("AudioStreamingMedia")) + { + // only play music when you enter a new parcel if the UI control for this + // was not *explicitly* stopped by the user. (part of SL-4878) + LLFloaterNearbyMedia *nearby_media_floater = LLFloaterReg::findTypedInstance<LLFloaterNearbyMedia>("nearby_media"); + if ((nearby_media_floater && + nearby_media_floater->getParcelAudioAutoStart()) || + // or they have expressed no opinion in the UI, but have autoplay on... + (!nearby_media_floater && + gSavedSettings.getBOOL(LLViewerMedia::AUTO_PLAY_MEDIA_SETTING))) { + llinfos << "Starting parcel music " << music_url << llendl; gAudiop->startInternetStream(music_url); } } |