summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/linux_tools/client-readme.txt5
-rw-r--r--indra/newview/llagent.cpp2
-rw-r--r--indra/newview/llfloaterland.cpp4
-rw-r--r--indra/newview/llfloaterworldmap.cpp75
-rw-r--r--indra/newview/llfloaterworldmap.h1
-rw-r--r--indra/newview/llfolderview.cpp57
-rw-r--r--indra/newview/llgesturemgr.cpp5
-rw-r--r--indra/newview/llpanelclassified.cpp21
-rw-r--r--indra/newview/llpanelclassified.h25
-rw-r--r--indra/newview/llstartup.cpp54
-rw-r--r--indra/newview/llviewermenu.cpp2
-rw-r--r--indra/newview/llviewermenufile.cpp6
-rw-r--r--indra/newview/llviewerwindow.cpp204
-rw-r--r--indra/newview/llviewerwindow.h3
-rw-r--r--indra/newview/llworldmap.cpp11
-rw-r--r--indra/newview/llworldmap.h4
-rwxr-xr-xindra/newview/viewer_manifest.py1
17 files changed, 318 insertions, 162 deletions
diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt
index 297fd0a063..e07384cc93 100644
--- a/indra/newview/linux_tools/client-readme.txt
+++ b/indra/newview/linux_tools/client-readme.txt
@@ -235,9 +235,8 @@ For problems and discussion concerning unofficial (not secondlife.com)
releases, please contact your packager or the SLDev mailing list:
<https://lists.secondlife.com/cgi-bin/mailman/listinfo/sldev>
-In-world help: Please use the 'Help' menu in the client for general
-non-Linux-specific Second Life help including live support from the fabulous
-'Help Request' team.
+In-world help: Please use the 'Help' menu in the client for various
+non-Linux-specific Second Life help options.
In-world discussion: There is a 'Linux Client Users' group
inside Second Life which is free to join. You can find it by pressing
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index dbbe1affb9..45f0b448e2 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -6750,7 +6750,7 @@ void LLAgent::removeWearable( EWearableType type )
if( old_wearable->isDirty() )
{
// Bring up view-modal dialog: Save changes? Yes, No, Cancel
- gViewerWindow->alertXml("WearableSave", LLAgent::onRemoveWearableDialog, (void*)(S32)type );
+ gViewerWindow->alertXml("WearableSave", LLAgent::onRemoveWearableDialog, (void*)type );
return;
}
else
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 1e9acc96c1..4b18c0c91a 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2453,6 +2453,10 @@ void LLPanelLandMedia::onCommitAny(LLUICtrl *ctrl, void *userdata)
U8 media_auto_scale = self->mMediaAutoScaleCheck->get();
LLUUID media_id = self->mMediaTextureCtrl->getImageAssetID();
+ // Remove leading/trailing whitespace (common when copying/pasting)
+ LLString::trim(music_url);
+ LLString::trim(media_url);
+
// Push data into current parcel
parcel->setParcelFlag(PF_SOUND_LOCAL, sound_local);
parcel->setMusicURL(music_url.c_str());
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index d8ed27173d..365926863e 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -159,6 +159,8 @@ LLFloaterWorldMap::LLFloaterWorldMap()
mCompletingRegionName(""),
mWaitingForTracker(FALSE),
mExactMatch(FALSE),
+ mIsClosing(FALSE),
+ mSetToUserPosition(TRUE),
mTrackedLocation(0,0,0),
mTrackedStatus(LLTracker::TRACKING_NOTHING)
{
@@ -335,6 +337,9 @@ void LLFloaterWorldMap::show(void*, BOOL center_on_target)
gFloaterWorldMap->buildAvatarIDList();
gFloaterWorldMap->buildLandmarkIDLists();
+
+ // If nothing is being tracked, set flag so the user position will be found
+ gFloaterWorldMap->mSetToUserPosition = ( LLTracker::getTrackingStatus() == LLTracker::TRACKING_NOTHING );
}
if (center_on_target)
@@ -497,7 +502,7 @@ void LLFloaterWorldMap::draw()
childSetEnabled("Teleport", (BOOL)tracking_status);
// childSetEnabled("Clear", (BOOL)tracking_status);
childSetEnabled("Show Destination", (BOOL)tracking_status || gWorldMap->mIsTrackingUnknownLocation);
- childSetEnabled("copy_slurl", (BOOL)tracking_status);
+ childSetEnabled("copy_slurl", (mSLURL.size() > 0) );
setMouseOpaque(TRUE);
mDragHandle->setMouseOpaque(TRUE);
@@ -641,7 +646,8 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
return;
}
- LLString sim_name = gWorldMap->simNameFromPosGlobal( pos_global );
+ LLString sim_name;
+ gWorldMap->simNameFromPosGlobal( pos_global, sim_name );
F32 region_x = (F32)fmod( pos_global.mdV[VX], (F64)REGION_WIDTH_METERS );
F32 region_y = (F32)fmod( pos_global.mdV[VY], (F64)REGION_WIDTH_METERS );
LLString full_name = llformat("%s (%d, %d, %d)",
@@ -662,15 +668,51 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global)
void LLFloaterWorldMap::updateLocation()
{
+ bool gotSimName;
+
+ LLTracker::ETrackingStatus status = LLTracker::getTrackingStatus();
+
// These values may get updated by a message, so need to check them every frame
// The fields may be changed by the user, so only update them if the data changes
LLVector3d pos_global = LLTracker::getTrackedPositionGlobal();
if (pos_global.isExactlyZero())
{
+ LLVector3d agentPos = gAgent.getPositionGlobal();
+
+ // Set to avatar's current postion if nothing is selected
+ if ( status == LLTracker::TRACKING_NOTHING && mSetToUserPosition )
+ {
+ // Make sure we know where we are before setting the current user position
+ LLString agent_sim_name;
+ gotSimName = gWorldMap->simNameFromPosGlobal( agentPos, agent_sim_name );
+ if ( gotSimName )
+ {
+ mSetToUserPosition = FALSE;
+
+ // Fill out the location field
+ childSetValue("location", agent_sim_name);
+
+ // Figure out where user is
+ LLVector3d agentPos = gAgent.getPositionGlobal();
+
+ S32 agent_x = llround( (F32)fmod( agentPos.mdV[VX], (F64)REGION_WIDTH_METERS ) );
+ S32 agent_y = llround( (F32)fmod( agentPos.mdV[VY], (F64)REGION_WIDTH_METERS ) );
+ S32 agent_z = llround( (F32)agentPos.mdV[VZ] );
+
+ childSetValue("spin x", LLSD(agent_x) );
+ childSetValue("spin y", LLSD(agent_y) );
+ childSetValue("spin z", LLSD(agent_z) );
+
+ // Set the current SLURL
+ mSLURL = LLWeb::escapeURL( llformat("http://slurl.com/secondlife/%s/%d/%d/%d",
+ agent_sim_name.c_str(), agent_x, agent_y, agent_z) );
+ }
+ }
+
return; // invalid location
}
- LLTracker::ETrackingStatus status = LLTracker::getTrackingStatus();
- LLString sim_name = gWorldMap->simNameFromPosGlobal( pos_global );
+ LLString sim_name;
+ gotSimName = gWorldMap->simNameFromPosGlobal( pos_global, sim_name );
if ((status != LLTracker::TRACKING_NOTHING) &&
(status != mTrackedStatus || pos_global != mTrackedLocation || sim_name != mTrackedSimName))
{
@@ -697,8 +739,16 @@ void LLFloaterWorldMap::updateLocation()
childSetValue("spin y", LLSD(region_y) );
childSetValue("spin z", LLSD((F32)pos_global.mdV[VZ]) );
- mSLURL = LLWeb::escapeURL(llformat("http://slurl.com/secondlife/%s/%d/%d/%d",
- sim_name.c_str(), llround(region_x), llround(region_y), llround((F32)pos_global.mdV[VZ])));
+ // simNameFromPosGlobal can fail, so don't give the user an invalid SLURL
+ if ( gotSimName )
+ {
+ mSLURL = LLWeb::escapeURL(llformat("http://slurl.com/secondlife/%s/%d/%d/%d",
+ sim_name.c_str(), llround(region_x), llround(region_y), llround((F32)pos_global.mdV[VZ])));
+ }
+ else
+ { // Empty SLURL will disable the "Copy SLURL to clipboard" button
+ mSLURL = "";
+ }
}
}
@@ -1082,6 +1132,9 @@ void LLFloaterWorldMap::onLandmarkComboCommit( LLUICtrl* ctrl, void* userdata )
self->trackLandmark( item_id);
onShowTargetBtn(self);
+
+ // Reset to user postion if nothing is tracked
+ self->mSetToUserPosition = ( LLTracker::getTrackingStatus() == LLTracker::TRACKING_NOTHING );
}
// static
@@ -1133,6 +1186,10 @@ void LLFloaterWorldMap::onAvatarComboCommit( LLUICtrl* ctrl, void* userdata )
self->trackAvatar(new_avatar_id, name);
onShowTargetBtn(self);
}
+ else
+ { // Reset to user postion if nothing is tracked
+ self->mSetToUserPosition = ( LLTracker::getTrackingStatus() == LLTracker::TRACKING_NOTHING );
+ }
}
// static
@@ -1188,6 +1245,8 @@ void LLFloaterWorldMap::onClearBtn(void* data)
self->mTrackedStatus = LLTracker::TRACKING_NOTHING;
LLTracker::stopTracking((void *)(intptr_t)TRUE);
gWorldMap->mIsTrackingUnknownLocation = FALSE;
+ self->mSLURL = ""; // Clear the SLURL since it's invalid
+ self->mSetToUserPosition = TRUE; // Revert back to the current user position
}
// static
@@ -1206,6 +1265,10 @@ void LLFloaterWorldMap::onShowTargetBtn(void* data)
void LLFloaterWorldMap::onShowAgentBtn(void* data)
{
LLWorldMapView::setPan( 0, 0, FALSE); // FALSE == animate
+
+ // Set flag so user's location will be displayed if not tracking anything else
+ LLFloaterWorldMap* self = (LLFloaterWorldMap*)data;
+ self->mSetToUserPosition = TRUE;
}
// static
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index 5867ea179c..37143b4c1b 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -156,6 +156,7 @@ protected:
BOOL mExactMatch;
BOOL mIsClosing;
+ BOOL mSetToUserPosition;
LLVector3d mTrackedLocation;
LLTracker::ETrackingStatus mTrackedStatus;
diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp
index 79e3315115..34a062576f 100644
--- a/indra/newview/llfolderview.cpp
+++ b/indra/newview/llfolderview.cpp
@@ -548,16 +548,15 @@ void LLFolderViewItem::rename(const LLString& new_name)
if( !new_name.empty() )
{
mLabel = new_name.c_str();
- BOOL is_renamed = TRUE;
if( mListener )
{
- is_renamed = mListener->renameItem(new_name);
- }
- if(mParentFolder && is_renamed)
- {
- mParentFolder->resort(this);
+ mListener->renameItem(new_name);
+
+ if(mParentFolder)
+ {
+ mParentFolder->resort(this);
+ }
}
- //refresh();
}
}
@@ -2970,7 +2969,10 @@ void LLFolderView::sanitizeSelection()
// store off current item in case it is automatically deselected
// and we want to preserve context
LLFolderViewItem* original_selected_item = getCurSelectedItem();
-
+
+ // Cache "Show all folders" filter setting
+ BOOL show_all_folders = (getRoot()->getShowFolderState() == LLInventoryFilter::SHOW_ALL_FOLDERS);
+
std::vector<LLFolderViewItem*> items_to_remove;
selected_items_t::iterator item_iter;
for (item_iter = mSelectedItems.begin(); item_iter != mSelectedItems.end(); ++item_iter)
@@ -2981,10 +2983,20 @@ void LLFolderView::sanitizeSelection()
BOOL visible = item->potentiallyVisible(); // initialize from filter state for this item
// modify with parent open and filters states
LLFolderViewFolder* parent_folder = item->getParentFolder();
- while(parent_folder)
+ if ( parent_folder )
{
- visible = visible && parent_folder->isOpen() && parent_folder->potentiallyVisible();
- parent_folder = parent_folder->getParentFolder();
+ if ( show_all_folders )
+ { // "Show all folders" is on, so this folder is visible
+ visible = TRUE;
+ }
+ else
+ { // Move up through parent folders and see what's visible
+ while(parent_folder)
+ {
+ visible = visible && parent_folder->isOpen() && parent_folder->potentiallyVisible();
+ parent_folder = parent_folder->getParentFolder();
+ }
+ }
}
// deselect item if any ancestor is closed or didn't pass filter requirements.
@@ -3000,7 +3012,7 @@ void LLFolderView::sanitizeSelection()
for (other_item_iter = mSelectedItems.begin(); other_item_iter != mSelectedItems.end(); ++other_item_iter)
{
LLFolderViewItem* other_item = *other_item_iter;
- for(LLFolderViewFolder* parent_folder = other_item->getParentFolder(); parent_folder; parent_folder = parent_folder->getParentFolder())
+ for( parent_folder = other_item->getParentFolder(); parent_folder; parent_folder = parent_folder->getParentFolder())
{
if (parent_folder == item)
{
@@ -3339,19 +3351,30 @@ void LLFolderView::openSelectedItems( void )
{
S32 left, top;
gFloaterView->getNewFloaterPosition(&left, &top);
-
LLMultiPreview* multi_previewp = new LLMultiPreview(LLRect(left, top, left + 300, top - 100));
-
- LLFloater::setFloaterHost(multi_previewp);
+ gFloaterView->getNewFloaterPosition(&left, &top);
+ LLMultiProperties* multi_propertiesp = new LLMultiProperties(LLRect(left, top, left + 300, top - 100));
selected_items_t::iterator item_it;
for (item_it = mSelectedItems.begin(); item_it != mSelectedItems.end(); ++item_it)
{
- (*item_it)->open(); /* Flawfinder: ignore */
+ // IT_{OBJECT,ATTACHMENT} creates LLProperties
+ // floaters; others create LLPreviews. Put
+ // each one in the right type of container.
+ LLFolderViewEventListener* listener = (*item_it)->getListener();
+ bool is_prop = listener && (listener->getInventoryType() == LLInventoryType::IT_OBJECT || listener->getInventoryType() == LLInventoryType::IT_ATTACHMENT);
+ if (is_prop)
+ LLFloater::setFloaterHost(multi_propertiesp);
+ else
+ LLFloater::setFloaterHost(multi_previewp);
+ (*item_it)->open();
}
LLFloater::setFloaterHost(NULL);
- multi_previewp->open(); /* Flawfinder: ignore */
+ // *NOTE: LLMulti* will safely auto-delete when open'd
+ // without any children.
+ multi_previewp->open();
+ multi_propertiesp->open();
}
}
}
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
index d66916e8f1..be1c26381b 100644
--- a/indra/newview/llgesturemgr.cpp
+++ b/indra/newview/llgesturemgr.cpp
@@ -186,6 +186,11 @@ void LLGestureManager::activateGestureWithAsset(const LLUUID& item_id,
BOOL inform_server,
BOOL deactivate_similar)
{
+ if( !gAssetStorage )
+ {
+ llwarns << "LLGestureManager::activateGestureWithAsset without valid gAssetStorage" << llendl;
+ return;
+ }
// If gesture is already active, nothing to do.
if (isGestureActive(item_id))
{
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
index b9b9cda4e8..afba55f4aa 100644
--- a/indra/newview/llpanelclassified.cpp
+++ b/indra/newview/llpanelclassified.cpp
@@ -85,20 +85,20 @@ LLPanelClassified::LLPanelClassified(BOOL in_finder)
mPriceForListing(0),
mDataRequested(FALSE),
mPaidFor(FALSE),
- mPosGlobal(),
- mSnapshotCtrl(NULL),
- mNameEditor(NULL),
- mDescEditor(NULL),
- mLocationEditor(NULL),
+ mPosGlobal(),
+ mSnapshotCtrl(NULL),
+ mNameEditor(NULL),
+ mDescEditor(NULL),
+ mLocationEditor(NULL),
mCategoryCombo(NULL),
+ mMatureCheck(NULL),
+ mAutoRenewCheck(NULL),
mUpdateBtn(NULL),
- mTeleportBtn(NULL),
- mMapBtn(NULL),
+ mTeleportBtn(NULL),
+ mMapBtn(NULL),
mProfileBtn(NULL),
mInfoText(NULL),
- mMatureCheck(NULL),
- mAutoRenewCheck(NULL),
- mSetBtn(NULL),
+ mSetBtn(NULL),
mClickThroughText(NULL)
{
sAllPanels.push_back(this);
@@ -825,6 +825,7 @@ void LLPanelClassified::onCommitAny(LLUICtrl* ctrl, void* data)
void LLPanelClassified::onFocusReceived(LLUICtrl* ctrl, void* data)
{
// allow the data to be saved
+ // Dave/Simon TODO: replace this with better isDirty() functionality
onCommitAny(ctrl, data);
}
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
index ca6a05eb31..21f6f9263c 100644
--- a/indra/newview/llpanelclassified.h
+++ b/indra/newview/llpanelclassified.h
@@ -95,8 +95,8 @@ protected:
BOOL mInFinder;
bool mDirty;
bool mForceClose;
- LLUUID mClassifiedID;
- LLUUID mRequestedID;
+ LLUUID mClassifiedID;
+ LLUUID mRequestedID;
LLUUID mCreatorID;
LLUUID mParcelID;
S32 mPriceForListing;
@@ -109,24 +109,25 @@ protected:
BOOL mPaidFor;
LLString mSimName;
- LLVector3d mPosGlobal;
+ LLVector3d mPosGlobal;
- LLTextureCtrl* mSnapshotCtrl;
- LLLineEditor* mNameEditor;
+ // Values the user may change
+ LLTextureCtrl* mSnapshotCtrl;
+ LLLineEditor* mNameEditor;
LLLineEditor* mDateEditor;
- LLTextEditor* mDescEditor;
- LLLineEditor* mLocationEditor;
+ LLTextEditor* mDescEditor;
+ LLLineEditor* mLocationEditor;
LLComboBox* mCategoryCombo;
+ LLCheckBoxCtrl* mMatureCheck;
+ LLCheckBoxCtrl* mAutoRenewCheck;
LLButton* mUpdateBtn;
- LLButton* mTeleportBtn;
- LLButton* mMapBtn;
+ LLButton* mTeleportBtn;
+ LLButton* mMapBtn;
LLButton* mProfileBtn;
LLTextBox* mInfoText;
- LLCheckBoxCtrl* mMatureCheck;
- LLCheckBoxCtrl* mAutoRenewCheck;
- LLButton* mSetBtn;
+ LLButton* mSetBtn;
LLTextBox* mClickThroughText;
LLRect mSnapshotSize;
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index ab735c97ad..117f020793 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -191,6 +191,7 @@ static bool gGotUseCircuitCodeAck = false;
LLString gInitialOutfit;
LLString gInitialOutfitGender; // "male" or "female"
+static bool gUseCircuitCallbackCalled = false;
//
// local function declaration
@@ -775,6 +776,15 @@ BOOL idle_startup()
snprintf(gUserServerName, MAX_STRING, "%s", server_label.c_str()); /* Flawfinder: ignore */
}
+ // Dave S temp reversion of SL-49082 fix - this code breaks command line urls. I'll fix this with
+ // the control isDirty() functionality tomorrow.
+
+ //if ( userPickedServer )
+ //{ // User picked a grid from the popup, so clear the stored urls so they will be re-generated from gUserServerChoice
+ // auth_uris.clear();
+ // resetURIs();
+ //}
+
LLString location;
LLPanelLogin::getLocation( location );
LLURLSimString::setString( location );
@@ -1514,12 +1524,21 @@ BOOL idle_startup()
{
update_texture_fetch();
+ if ( gViewerWindow != NULL && gToolMgr != NULL )
+ { // This isn't the first logon attempt, so show the UI
+ gViewerWindow->setNormalControlsVisible( TRUE );
+ }
+
// Initialize UI
if (!gNoRender)
{
// Initialize all our tools. Must be done after saved settings loaded.
- gToolMgr = new LLToolMgr();
- gToolMgr->initTools();
+ if ( gToolMgr == NULL )
+ {
+ gToolMgr = new LLToolMgr();
+ gToolMgr->initTools();
+ }
+
// Quickly get something onscreen to look at.
gViewerWindow->initWorldUI();
@@ -1550,14 +1569,20 @@ BOOL idle_startup()
gXferManager->registerCallbacks(gMessageSystem);
- gCacheName = new LLCacheName(gMessageSystem);
- gCacheName->addObserver(callback_cache_name);
-
- // Load stored cache if possible
- load_name_cache();
+ if ( gCacheName == NULL )
+ {
+ gCacheName = new LLCacheName(gMessageSystem);
+ gCacheName->addObserver(callback_cache_name);
+
+ // Load stored cache if possible
+ load_name_cache();
+ }
// Data storage for map of world.
- gWorldMap = new LLWorldMap();
+ if ( gWorldMap == NULL )
+ {
+ gWorldMap = new LLWorldMap();
+ }
// register null callbacks for audio until the audio system is initialized
gMessageSystem->setHandlerFuncFast(_PREHASH_SoundTrigger, null_message_callback, NULL);
@@ -1639,6 +1664,9 @@ BOOL idle_startup()
{
llwarns << "Attempting to connect to simulator with a zero circuit code!" << llendl;
}
+
+ gUseCircuitCallbackCalled = FALSE;
+
msg->enableCircuit(first_sim, TRUE);
// now, use the circuit info to tell simulator about us!
llinfos << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << llendl;
@@ -2780,10 +2808,9 @@ void use_circuit_callback(void**, S32 result)
{
// bail if we're quitting.
if(gQuit) return;
- static bool called = false;
- if(!called)
+ if( !gUseCircuitCallbackCalled )
{
- called = true;
+ gUseCircuitCallbackCalled = true;
if (result)
{
// Make sure user knows something bad happened. JC
@@ -3701,5 +3728,8 @@ void reset_login()
{
gStartupState = STATE_LOGIN_SHOW;
- // do cleanup here of in-world UI?
+ if ( gViewerWindow )
+ { // Hide menus and normal buttons
+ gViewerWindow->setNormalControlsVisible( FALSE );
+ }
}
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 3e097d5600..bc0be1b5a2 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -7431,7 +7431,7 @@ class LLViewCheckRenderType : public view_listener_t
bool new_value = false;
if (type == "particles")
{
- new_value = LLPipeline::toggleRenderTypeControlNegated((void *)(S32)LLPipeline::RENDER_TYPE_PARTICLES);
+ new_value = LLPipeline::toggleRenderTypeControlNegated((void *)LLPipeline::RENDER_TYPE_PARTICLES);
}
gMenuHolder->findControl(userdata["control"].asString())->setValue(new_value);
return true;
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 0038c0cf1c..7215f7948f 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -202,7 +202,7 @@ class LLFileUploadImage : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- const char* filename = upload_pick((void *)(S32)LLFilePicker::FFLOAD_IMAGE);
+ const char* filename = upload_pick((void *)LLFilePicker::FFLOAD_IMAGE);
if (filename)
{
LLFloaterImagePreview* floaterp = new LLFloaterImagePreview(filename);
@@ -216,7 +216,7 @@ class LLFileUploadSound : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- const char* filename = upload_pick((void*)((S32)LLFilePicker::FFLOAD_WAV));
+ const char* filename = upload_pick((void*)LLFilePicker::FFLOAD_WAV);
if (filename)
{
LLFloaterNameDesc* floaterp = new LLFloaterNameDesc(filename);
@@ -230,7 +230,7 @@ class LLFileUploadAnim : public view_listener_t
{
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
{
- const char* filename = upload_pick((void*)((S32)LLFilePicker::FFLOAD_ANIM));
+ const char* filename = upload_pick((void*)LLFilePicker::FFLOAD_ANIM);
if (filename)
{
LLFloaterAnimPreview* floaterp = new LLFloaterAnimPreview(filename);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index d6b5534153..dd2c1c6d76 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1813,117 +1813,120 @@ void LLViewerWindow::initWorldUI()
S32 width = mRootView->getRect().getWidth();
LLRect full_window(0, height, width, 0);
- LLRect bar_rect(-1, STATUS_BAR_HEIGHT, width+1, -1);
- gToolBar = new LLToolBar("toolbar", bar_rect);
-
- LLRect chat_bar_rect(-1,CHAT_BAR_HEIGHT, width+1, -1);
- chat_bar_rect.translate(0, STATUS_BAR_HEIGHT-1);
- gChatBar = new LLChatBar("chat", chat_bar_rect);
-
- bar_rect.translate(0, STATUS_BAR_HEIGHT-1);
- bar_rect.translate(0, CHAT_BAR_HEIGHT-1);
- gOverlayBar = new LLOverlayBar("overlay", bar_rect);
-
- // panel containing chatbar, toolbar, and overlay, over floaters
- LLRect bottom_rect(-1, 2*STATUS_BAR_HEIGHT + CHAT_BAR_HEIGHT, width+1, -1);
- gBottomPanel = new LLBottomPanel("bottom panel", bottom_rect);
+ if ( gToolBar == NULL ) // Don't re-enter if objects are alreay created
+ {
+ LLRect bar_rect(-1, STATUS_BAR_HEIGHT, width+1, -1);
+ gToolBar = new LLToolBar("toolbar", bar_rect);
- // the order here is important
- gBottomPanel->addChild(gChatBar);
- gBottomPanel->addChild(gToolBar);
- gBottomPanel->addChild(gOverlayBar);
- mRootView->addChild(gBottomPanel);
+ LLRect chat_bar_rect(-1,CHAT_BAR_HEIGHT, width+1, -1);
+ chat_bar_rect.translate(0, STATUS_BAR_HEIGHT-1);
+ gChatBar = new LLChatBar("chat", chat_bar_rect);
- // View for hover information
- gHoverView = new LLHoverView("gHoverView", full_window);
- gHoverView->setVisible(TRUE);
- mRootView->addChild(gHoverView);
+ bar_rect.translate(0, STATUS_BAR_HEIGHT-1);
+ bar_rect.translate(0, CHAT_BAR_HEIGHT-1);
+ gOverlayBar = new LLOverlayBar("overlay", bar_rect);
- //
- // Map
- //
- // TODO: Move instance management into class
- gFloaterMap = new LLFloaterMap("Map");
- gFloaterMap->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
- gFloaterMap->setVisible( gSavedSettings.getBOOL("ShowMiniMap") );
+ // panel containing chatbar, toolbar, and overlay, over floaters
+ LLRect bottom_rect(-1, 2*STATUS_BAR_HEIGHT + CHAT_BAR_HEIGHT, width+1, -1);
+ gBottomPanel = new LLBottomPanel("bottom panel", bottom_rect);
- // keep onscreen
- gFloaterView->adjustToFitScreen(gFloaterMap, FALSE);
+ // the order here is important
+ gBottomPanel->addChild(gChatBar);
+ gBottomPanel->addChild(gToolBar);
+ gBottomPanel->addChild(gOverlayBar);
+ mRootView->addChild(gBottomPanel);
- if (gSavedSettings.getBOOL("ShowCameraControls"))
- {
- LLFloaterCamera::show(NULL);
- }
-
- if (gSavedSettings.getBOOL("ShowMovementControls"))
- {
- LLFloaterMove::show(NULL);
- }
-
- // Must have one global chat floater so it can actually store
- // the history. JC
- gFloaterChat = new LLFloaterChat();
- gFloaterChat->setVisible( FALSE );
+ // View for hover information
+ gHoverView = new LLHoverView("gHoverView", full_window);
+ gHoverView->setVisible(TRUE);
+ mRootView->addChild(gHoverView);
- if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) gFloaterChat->loadHistory();
+ //
+ // Map
+ //
+ // TODO: Move instance management into class
+ gFloaterMap = new LLFloaterMap("Map");
+ gFloaterMap->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
+ gFloaterMap->setVisible( gSavedSettings.getBOOL("ShowMiniMap") );
- gIMView = new LLIMView("gIMView", LLRect() );
- gIMView->setFollowsAll();
- mRootView->addChild(gIMView);
+ // keep onscreen
+ gFloaterView->adjustToFitScreen(gFloaterMap, FALSE);
- LLRect morph_view_rect = full_window;
- morph_view_rect.stretch( -STATUS_BAR_HEIGHT );
- morph_view_rect.mTop = full_window.mTop - 32;
- gMorphView = new LLMorphView("gMorphView", morph_view_rect );
- mRootView->addChild(gMorphView);
- gMorphView->setVisible(FALSE);
+ if (gSavedSettings.getBOOL("ShowCameraControls"))
+ {
+ LLFloaterCamera::show(NULL);
+ }
+
+ if (gSavedSettings.getBOOL("ShowMovementControls"))
+ {
+ LLFloaterMove::show(NULL);
+ }
+
+ // Must have one global chat floater so it can actually store
+ // the history. JC
+ gFloaterChat = new LLFloaterChat();
+ gFloaterChat->setVisible( FALSE );
+
+ if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) gFloaterChat->loadHistory();
+
+ gIMView = new LLIMView("gIMView", LLRect() );
+ gIMView->setFollowsAll();
+ mRootView->addChild(gIMView);
+
+ LLRect morph_view_rect = full_window;
+ morph_view_rect.stretch( -STATUS_BAR_HEIGHT );
+ morph_view_rect.mTop = full_window.mTop - 32;
+ gMorphView = new LLMorphView("gMorphView", morph_view_rect );
+ mRootView->addChild(gMorphView);
+ gMorphView->setVisible(FALSE);
- gFloaterMute = new LLFloaterMute();
- gFloaterMute->setVisible(FALSE);
+ gFloaterMute = new LLFloaterMute();
+ gFloaterMute->setVisible(FALSE);
- LLWorldMapView::initClass();
+ LLWorldMapView::initClass();
- LLRect world_map_rect = gSavedSettings.getRect("FloaterWorldMapRect");
- // if 0,0,0,0 then use fullscreen
- if (world_map_rect.mTop == 0
- && world_map_rect.mLeft == 0
- && world_map_rect.mRight == 0
- && world_map_rect.mBottom == 0)
- {
- world_map_rect.set(0, height-TOOL_BAR_HEIGHT, width, STATUS_BAR_HEIGHT);
- world_map_rect.stretch(-4);
- gSavedSettings.setRect("FloaterWorldMapRect", world_map_rect);
- }
- gFloaterWorldMap = new LLFloaterWorldMap();
- gFloaterWorldMap->setVisible(FALSE);
+ LLRect world_map_rect = gSavedSettings.getRect("FloaterWorldMapRect");
+ // if 0,0,0,0 then use fullscreen
+ if (world_map_rect.mTop == 0
+ && world_map_rect.mLeft == 0
+ && world_map_rect.mRight == 0
+ && world_map_rect.mBottom == 0)
+ {
+ world_map_rect.set(0, height-TOOL_BAR_HEIGHT, width, STATUS_BAR_HEIGHT);
+ world_map_rect.stretch(-4);
+ gSavedSettings.setRect("FloaterWorldMapRect", world_map_rect);
+ }
+ gFloaterWorldMap = new LLFloaterWorldMap();
+ gFloaterWorldMap->setVisible(FALSE);
- //
- // Tools for building
- //
+ //
+ // Tools for building
+ //
- // Toolbox floater
- init_menus();
+ // Toolbox floater
+ init_menus();
- gFloaterTools = new LLFloaterTools();
- gFloaterTools->setVisible(FALSE);
+ gFloaterTools = new LLFloaterTools();
+ gFloaterTools->setVisible(FALSE);
- // Status bar
- S32 menu_bar_height = gMenuBarView->getRect().getHeight();
- LLRect root_rect = gViewerWindow->getRootView()->getRect();
- LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height);
- gStatusBar = new LLStatusBar("status", status_rect);
- gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP);
+ // Status bar
+ S32 menu_bar_height = gMenuBarView->getRect().getHeight();
+ LLRect root_rect = gViewerWindow->getRootView()->getRect();
+ LLRect status_rect(0, root_rect.getHeight(), root_rect.getWidth(), root_rect.getHeight() - menu_bar_height);
+ gStatusBar = new LLStatusBar("status", status_rect);
+ gStatusBar->setFollows(FOLLOWS_LEFT | FOLLOWS_RIGHT | FOLLOWS_TOP);
- gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE);
- gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight());
- // sync bg color with menu bar
- gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() );
+ gStatusBar->reshape(root_rect.getWidth(), gStatusBar->getRect().getHeight(), TRUE);
+ gStatusBar->translate(0, root_rect.getHeight() - gStatusBar->getRect().getHeight());
+ // sync bg color with menu bar
+ gStatusBar->setBackgroundColor( gMenuBarView->getBackgroundColor() );
- gViewerWindow->getRootView()->addChild(gStatusBar);
+ gViewerWindow->getRootView()->addChild(gStatusBar);
- // menu holder appears on top to get first pass at all mouse events
- gViewerWindow->getRootView()->sendChildToFront(gMenuHolder);
+ // menu holder appears on top to get first pass at all mouse events
+ gViewerWindow->getRootView()->sendChildToFront(gMenuHolder);
+ }
}
@@ -2144,6 +2147,23 @@ void LLViewerWindow::reshape(S32 width, S32 height)
}
}
+
+// Hide normal UI when a logon fails
+void LLViewerWindow::setNormalControlsVisible( BOOL visible )
+{
+ if ( gBottomPanel )
+ gBottomPanel->setVisible( visible );
+
+ if ( gMenuBarView )
+ gMenuBarView->setVisible( visible );
+
+ if ( gStatusBar )
+ gStatusBar->setVisible( visible );
+}
+
+
+
+
void LLViewerWindow::drawDebugText()
{
mDebugText->draw();
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index af5ffd7914..91bf0d9918 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -154,6 +154,9 @@ public:
BOOL handleKey(KEY key, MASK mask);
void handleScrollWheel (S32 clicks);
+ // Hide normal UI when a logon fails, re-show everything when logon is attempted again
+ void setNormalControlsVisible( BOOL visible );
+
// Handle the application becoming active (frontmost) or inactive
//BOOL handleActivate(BOOL activate);
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
index e61b5f1af5..6fea695353 100644
--- a/indra/newview/llworldmap.cpp
+++ b/indra/newview/llworldmap.cpp
@@ -225,20 +225,25 @@ LLSimInfo* LLWorldMap::simInfoFromName(const LLString& sim_name)
return sim_info;
}
-LLString LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global)
+bool LLWorldMap::simNameFromPosGlobal(const LLVector3d& pos_global, LLString & outSimName )
{
+ bool gotSimName = true;
+
U64 handle = to_region_handle(pos_global);
sim_info_map_t::iterator it = mSimInfoMap.find(handle);
if (it != mSimInfoMap.end())
{
LLSimInfo* info = (*it).second;
- return info->mName.c_str();
+ outSimName = info->mName.c_str();
}
else
{
- return "(unknown region)";
+ gotSimName = false;
+ outSimName = "(unknown region)";
}
+
+ return gotSimName;
}
void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
index 76ab88de1e..bdf8a7e735 100644
--- a/indra/newview/llworldmap.h
+++ b/indra/newview/llworldmap.h
@@ -115,8 +115,8 @@ public:
// Returns simulator information for named sim, or NULL if non-existent
LLSimInfo* simInfoFromName(const LLString& sim_name);
- // Returns simulator name
- LLString simNameFromPosGlobal(const LLVector3d& pos_global);
+ // Gets simulator name for a global position, returns true if it was found
+ bool simNameFromPosGlobal(const LLVector3d& pos_global, LLString & outSimName );
// Sets the current layer
void setCurrentLayer(S32 layer, bool request_layer = false);
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 0fe81baae9..c93b302312 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -414,6 +414,7 @@ class Linux_i686Manifest(LinuxManifest):
self.path("libuuid.so", "libuuid.so.1")
self.path("libSDL-1.2.so.0")
self.path("libELFIO.so")
+ #self.path("libresolv.so") - don't bundle
#self.path("libtcmalloc.so.0") - bugged
#self.path("libstacktrace.so.0") - probably bugged
self.path("libllkdu.so", "../bin/libllkdu.so") # llkdu goes in bin for some reason