diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h
index de16d86ff4..cfa7f6ec5b 100755
--- a/indra/llcharacter/llbvhloader.h
+++ b/indra/llcharacter/llbvhloader.h
@@ -296,6 +296,10 @@ public:
ELoadStatus getStatus() { return mStatus; }
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ S32 getNumFrames() const { return mNumFrames; }
+ //
+
protected:
// Consumes one line of input from file.
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
index 5b0e8dbb02..3def7b72bd 100755
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -2600,7 +2600,10 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
}
}
F32 wsum = wght.mV[VX] + wght.mV[VY] + wght.mV[VZ] + wght.mV[VW];
- if (wsum <= 0.f)
+
+ // FIRE-17341 / BUG-10747 do allow weights of zero, or some rigged mesh will display broken.
+ // if (wsum <= 0.f)
+ if (wsum < 0.f)
{
wght = LLVector4(0.99999f,0.f,0.f,0.f);
}
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index 75b6ab4aca..6dd76b4056 100755
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -131,17 +131,6 @@ CURLcode LLURLRequest::_sslCtxCallback(CURL * curl, void *sslctx, void *param)
SSL_CTX_set_cert_verify_callback(ctx, req->mDetail->mSSLVerifyCallback, (void *)req);
// the calls are void
- // FIRE-11406
- // Some server at LL don't like it at all when curl/openssl try to speak TLSv1.2 to them, instead
- // of renegotiating to SSLv3 they clamp up and don't talk to us at all anywmore, not even dropping the connection.
- // This then leads to unfun timeouts and failed transactions.
-
-#ifdef SSL_TXT_TLSV1_2
- SSL_CTX_set_options( ctx, SSL_OP_ALL | SSL_OP_NO_TLSv1_2 );
-#endif
-
- //
-
return CURLE_OK;
}
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
index f8e7567e95..989be60273 100755
--- a/indra/llui/lltabcontainer.cpp
+++ b/indra/llui/lltabcontainer.cpp
@@ -432,7 +432,13 @@ void LLTabContainer::draw()
{
break;
}
- target_pixel_scroll += (*iter)->mButton->getRect().getWidth();
+ //target_pixel_scroll += (*iter)->mButton->getRect().getWidth();
+ // Only show button if tab is visible
+ if ((*iter)->mVisible)
+ {
+ target_pixel_scroll += (*iter)->mButton->getRect().getWidth();
+ }
+ //
cur_scroll_pos--;
}
@@ -2318,7 +2324,10 @@ void LLTabContainer::updateMaxScrollPos()
setMaxScrollPos(getTabCount());
for(tuple_list_t::reverse_iterator tab_it = mTabList.rbegin(); tab_it != mTabList.rend(); ++tab_it)
{
- running_tab_width += (*tab_it)->mButton->getRect().getWidth();
+ // Only show button if tab is visible
+ //running_tab_width += (*tab_it)->mButton->getRect().getWidth();
+ running_tab_width += (*tab_it)->mVisible ? (*tab_it)->mButton->getRect().getWidth() : 0;
+ //
if (running_tab_width > available_width_with_arrows)
{
break;
@@ -2327,7 +2336,9 @@ void LLTabContainer::updateMaxScrollPos()
}
// in case last tab doesn't actually fit on screen, make it the last scrolling position
setMaxScrollPos(llmin(getMaxScrollPos(), getTabCount() - 1));
- no_scroll = FALSE;
+ // Only show button if tab is visible
+ //no_scroll = FALSE;
+ no_scroll = (running_tab_width <= available_width_with_arrows);
}
}
if (no_scroll)
@@ -2445,5 +2456,7 @@ void LLTabContainer::setTabVisibility( LLPanel const *aPanel, bool aVisible )
this->setVisible( TRUE );
else
this->setVisible( FALSE );
+
+ updateMaxScrollPos();
}
//
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
index 93669c6bfb..7d392890b1 100755
--- a/indra/llui/lltoolbar.cpp
+++ b/indra/llui/lltoolbar.cpp
@@ -1167,7 +1167,11 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id)
}
else
{
- button->setCommitCallback(executeParam);
+ // Check enabled state of button before executing!
+ //button->setCommitCallback(executeParam);
+ LLUICtrl::commit_callback_t execute_func = initCommitCallback(executeParam);
+ button->setCommitCallback(boost::bind(&LLToolBarButton::callIfEnabled, button, execute_func, _1, _2));
+ //
}
// Set up "is running" query callback
diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp
index a0a2f19df8..f5579158f2 100644
--- a/indra/llui/llviewereventrecorder.cpp
+++ b/indra/llui/llviewereventrecorder.cpp
@@ -33,12 +33,25 @@ LLViewerEventRecorder::LLViewerEventRecorder() {
clear(UNDEFINED);
logEvents = false;
// Remove any previous event log file
- std::string old_log_ui_events_to_llsd_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.old");
- LLFile::remove(old_log_ui_events_to_llsd_file);
-
+ // Name this properly and silence the warnings
+ //std::string old_log_ui_events_to_llsd_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.old");
+ //LLFile::remove(old_log_ui_events_to_llsd_file);
+ //
- mLogFilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.llsd");
- LLFile::rename(mLogFilename, old_log_ui_events_to_llsd_file);
+ //mLogFilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.llsd");
+ //LLFile::rename(mLogFilename, old_log_ui_events_to_llsd_file);
+ std::string old_log_ui_events_to_llsd_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, llformat("%s_Events_log.old", APP_NAME.c_str()));
+ if (LLFile::isfile(old_log_ui_events_to_llsd_file))
+ {
+ LLFile::remove(old_log_ui_events_to_llsd_file);
+ }
+
+ mLogFilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, llformat("%s_Events_log.llsd", APP_NAME.c_str()));
+ if (LLFile::isfile(mLogFilename))
+ {
+ LLFile::rename(mLogFilename, old_log_ui_events_to_llsd_file);
+ }
+ //
}
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 902eaea9da..79f10641f7 100755
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -147,6 +147,7 @@ set(viewer_SOURCE_FILES
fsavatarsearchmenu.cpp
fsblocklistmenu.cpp
fschathistory.cpp
+ fschatoptionsmenu.cpp
fscommon.cpp
fsconsoleutils.cpp
fscontactsfriendsmenu.cpp
@@ -892,6 +893,7 @@ set(viewer_HEADER_FILES
fsavatarsearchmenu.h
fsblocklistmenu.h
fschathistory.h
+ fschatoptionsmenu.h
fscommon.h
fsconsoleutils.h
fscontactsfriendsmenu.h
diff --git a/indra/newview/NACLfloaterexploresounds.cpp b/indra/newview/NACLfloaterexploresounds.cpp
index 11499cc29e..e225577e80 100644
--- a/indra/newview/NACLfloaterexploresounds.cpp
+++ b/indra/newview/NACLfloaterexploresounds.cpp
@@ -234,7 +234,7 @@ BOOL NACLFloaterExploreSounds::tick()
{
LLStringUtil::format_map_t format_args;
format_args["TIME"] = llformat("%.1f", static_cast((LLTimer::getElapsedSeconds() - item.mTimeStopped) / 60.0));
- playing_column["value"] = formatString(str_not_playing, format_args);
+ playing_column["value"] = format_string(str_not_playing, format_args);
}
LLSD& type_column = element["columns"][1];
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
index 5d6201e691..798773b713 100755
--- a/indra/newview/app_settings/commands.xml
+++ b/indra/newview/app_settings/commands.xml
@@ -29,6 +29,8 @@
tooltip_ref="Command_Avatar_Tooltip"
execute_function="Floater.Toggle"
execute_parameters="avatar"
+ is_enabled_function="GridFeatureCheck"
+ is_enabled_parameters="avatar_picker"
is_running_function="Floater.IsOpen"
is_running_parameters="avatar"
/>
@@ -72,6 +74,8 @@
tooltip_ref="Command_Destinations_Tooltip"
execute_function="Floater.Toggle"
execute_parameters="destinations"
+ is_enabled_function="GridFeatureCheck"
+ is_enabled_parameters="destination_guide"
is_running_function="Floater.IsOpen"
is_running_parameters="destinations"
/>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 770dcf2675..f62ebe1975 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1044,7 +1044,7 @@
AutoCloseOOC
-
- GlobalOnlineStatusToggle
-
-
RenderVolumeSAProtection
-
RenderVolumeSAThreshold
- LegacyMultiAttachmentSupport
-
LimitDragDistance
+ FSEnableMovingFolderLinks
+
+ ForceInitialCOFDelay
+
+ FSTypeDuringEmote
+
+ FSLegacyNotificationWell
+
+ FSInternalLegacyNotificationWell
+
+ FSShowIMSendButton
+
diff --git a/indra/newview/app_settings/settings_phoenix.xml b/indra/newview/app_settings/settings_phoenix.xml
index 9df192d3fe..12338aae91 100644
--- a/indra/newview/app_settings/settings_phoenix.xml
+++ b/indra/newview/app_settings/settings_phoenix.xml
@@ -531,6 +531,18 @@
0
+ FSLegacyNotificationWell
+
+
FSAnimatedScriptDialogs
- // bit of a hack -KC
+ // bit of a hack
KCWindlightInterface::instance().setTPing(true);
}
make_ui_sound("UISndTeleportOut");
@@ -4783,7 +4783,8 @@ void LLAgent::doTeleportViaLocation(const LLVector3d& pos_global)
msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
msg->nextBlockFast(_PREHASH_Info);
- F32 width = regionp->getWidth();
+ // FIRE-17262: Wrong local teleports on a large opensim region (apparently need to divide by grid unit size)
+ F32 width = REGION_WIDTH_METERS;// regionp->getWidth();
LLVector3 pos(fmod((F32)pos_global.mdV[VX], width),
fmod((F32)pos_global.mdV[VY], width),
(F32)pos_global.mdV[VZ]);
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index 760feac494..0ec821f6ab 100755
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2934,13 +2934,13 @@ void LLAgentCamera::loadCameraPosition()
if (stored_camera_pos.isNull())
{
- reportToNearbyChat(LLTrans::getString("LoadCameraPositionNoneSaved"));
+ report_to_nearby_chat(LLTrans::getString("LoadCameraPositionNoneSaved"));
return;
}
if (dist_vec_squared(gAgent.getPositionGlobal(), stored_camera_pos) > far_clip_squared)
{
- reportToNearbyChat(LLTrans::getString("LoadCameraPositionOutsideDrawDistance"));
+ report_to_nearby_chat(LLTrans::getString("LoadCameraPositionOutsideDrawDistance"));
return;
}
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 5a845a5f2f..e2d8eba7cf 100755
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1035,6 +1035,9 @@ bool LLAppViewer::init()
settings_map["floater"] = &gSavedSettings; // *TODO: New settings file
settings_map["account"] = &gSavedPerAccountSettings;
+ // Optional legacy notification well
+ gSavedSettings.setBOOL("FSInternalLegacyNotificationWell", gSavedSettings.getBOOL("FSLegacyNotificationWell"));
+
LLUI::initClass(settings_map,
LLUIImageList::getInstance(),
ui_audio_callback,
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
index 5d3c37b4a1..48dac91c6b 100755
--- a/indra/newview/llchannelmanager.cpp
+++ b/indra/newview/llchannelmanager.cpp
@@ -150,7 +150,17 @@ void LLChannelManager::onLoginCompleted()
S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin");
S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth");
mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound);
- mStartUpChannel->setMouseDownCallback(boost::bind(&LLFloaterNotificationsTabbed::onStartUpToastClick, LLFloaterNotificationsTabbed::getInstance(), _2, _3, _4));
+ // Optional legacy notification well
+ //mStartUpChannel->setMouseDownCallback(boost::bind(&LLFloaterNotificationsTabbed::onStartUpToastClick, LLFloaterNotificationsTabbed::getInstance(), _2, _3, _4));
+ if (!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell"))
+ {
+ mStartUpChannel->setMouseDownCallback(boost::bind(&LLFloaterNotificationsTabbed::onStartUpToastClick, LLFloaterNotificationsTabbed::getInstance(), _2, _3, _4));
+ }
+ else
+ {
+ mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4));
+ }
+ //
mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this));
mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime"));
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index a5516460f3..33dd9620b1 100755
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -313,7 +313,16 @@ LLNotificationChiclet::LLNotificationChiclet(const Params& p)
mNotificationChannel.reset(new ChicletNotificationChannel(this));
// ensure that notification well window exists, to synchronously
// handle toast add/delete events.
- LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
+ // Optional legacy notification well
+ //LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
+ if (!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell"))
+ {
+ LLFloaterNotificationsTabbed::getInstance()->setSysWellChiclet(this);
+ }
+ else
+ {
+ LLNotificationWellWindow::getInstance()->setSysWellChiclet(this);
+ }
}
void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
@@ -321,7 +330,16 @@ void LLNotificationChiclet::onMenuItemClicked(const LLSD& user_data)
std::string action = user_data.asString();
if("close all" == action)
{
- LLFloaterNotificationsTabbed::getInstance()->closeAll();
+ // Optional legacy notification well
+ //LLFloaterNotificationsTabbed::getInstance()->closeAll();
+ if (!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell"))
+ {
+ LLFloaterNotificationsTabbed::getInstance()->closeAll();
+ }
+ else
+ {
+ LLNotificationWellWindow::getInstance()->closeAll();
+ }
// [FS communication UI] - We have our own IM well button again
//LLIMWellWindow::getInstance()->closeAll();
}
@@ -374,7 +392,11 @@ bool LLNotificationChiclet::ChicletNotificationChannel::filterNotification( LLNo
if ( (notification->getName() == "ScriptDialog") // special case for scripts
// if there is no toast window for the notification, filter it
//|| (!LLNotificationWellWindow::getInstance()->findItemByID(notification->getID()))
- || (!LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID(), notification->getName()))
+ // Optional legacy notification well
+ //|| (!LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID(), notification->getName()))
+ || ((!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell") && !LLFloaterNotificationsTabbed::getInstance()->findItemByID(notification->getID(), notification->getName()))
+ || (gSavedSettings.getBOOL("FSInternalLegacyNotificationWell") && !LLNotificationWellWindow::getInstance()->findItemByID(notification->getID())))
+ //
)
{
displayNotification = false;
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
index 1e97c6dfa3..f537a947e1 100755
--- a/indra/newview/llchicletbar.cpp
+++ b/indra/newview/llchicletbar.cpp
@@ -150,7 +150,17 @@ BOOL LLChicletBar::postBuild()
// [FS communication UI]
showWellButton("im_well", !LLIMWellWindow::getInstance()->isWindowEmpty());
- showWellButton("notification_well", !LLFloaterNotificationsTabbed::getInstance()->isWindowEmpty());
+ // Optional legacy notification well
+ //showWellButton("notification_well", !LLFloaterNotificationsTabbed::getInstance()->isWindowEmpty());
+ if (!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell"))
+ {
+ showWellButton("notification_well", !LLFloaterNotificationsTabbed::getInstance()->isWindowEmpty());
+ }
+ else
+ {
+ showWellButton("notification_well", !LLNotificationWellWindow::getInstance()->isWindowEmpty());
+ }
+ //
LLPanelTopInfoBar::instance().setResizeCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
LLPanelTopInfoBar::instance().setVisibleCallback(boost::bind(&LLChicletBar::fitWithTopInfoBar, this));
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
index bb97ee7bd1..8d54e8434f 100755
--- a/indra/newview/llenvmanager.cpp
+++ b/indra/newview/llenvmanager.cpp
@@ -503,7 +503,7 @@ void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
// Load region sky presets.
LLWLParamManager::instance().refreshRegionPresets();
- // Use the region settings if parcel settings didnt override it already -KC
+ // Use the region settings if parcel settings didnt override it already
if (KCWindlightInterface::instance().haveParcelOverride(new_settings))
{
// If using server settings, update managers.
@@ -523,6 +523,7 @@ void LLEnvManagerNew::onRegionSettingsResponse(const LLSD& content)
setUserPrefs(getWaterPresetName(), getSkyPresetName(), getDayCycleName(), false, true, mInterpNextChangeMessage);
}
}
+ //
// Let interested parties know about the region settings update.
mRegionSettingsChangeSignal();
diff --git a/indra/newview/llfloateravatar.cpp b/indra/newview/llfloateravatar.cpp
index 31adf5b61e..63ddcee7ef 100755
--- a/indra/newview/llfloateravatar.cpp
+++ b/indra/newview/llfloateravatar.cpp
@@ -36,9 +36,13 @@
#include "lluictrlfactory.h"
#include "llmediactrl.h"
+#include "lfsimfeaturehandler.h"
+#include "llhttpconstants.h"
+#include "llweb.h"
LLFloaterAvatar::LLFloaterAvatar(const LLSD& key)
- : LLFloater(key)
+ : LLFloater(key),
+ mAvatarPickerUrlChangedSignal() // Avatar chooser does not change between OpenSim grids
{
}
@@ -51,6 +55,13 @@ LLFloaterAvatar::~LLFloaterAvatar()
avatar_picker->clearCache(); //images are reloading each time already
avatar_picker->unloadMediaSource();
}
+
+ // Avatar chooser does not change between OpenSim grids
+ if (mAvatarPickerUrlChangedSignal.connected())
+ {
+ mAvatarPickerUrlChangedSignal.disconnect();
+ }
+ //
}
BOOL LLFloaterAvatar::postBuild()
@@ -59,4 +70,23 @@ BOOL LLFloaterAvatar::postBuild()
return TRUE;
}
+// Avatar chooser does not change between OpenSim grids
+void LLFloaterAvatar::onOpen(const LLSD& key)
+{
+ // Connect during onOpen instead of ctor because LLFloaterAvatar instance
+ // gets created before we can safely create a LFSimFeatureHandler instance!
+ // Assuming we receive the avatar picker URL via login response and it
+ // is the same URL being sent by region caps so we will be good for the initial
+ // region the avatar logs into as well.
+ if (!mAvatarPickerUrlChangedSignal.connected())
+ {
+ mAvatarPickerUrlChangedSignal = LFSimFeatureHandler::instance().setAvatarPickerCallback(boost::bind(&LLFloaterAvatar::handleUrlChanged, this));
+ }
+}
+
+void LLFloaterAvatar::handleUrlChanged()
+{
+ getChild("avatar_picker_contents")->navigateTo(LLWeb::expandURLSubstitutions(LFSimFeatureHandler::instance().avatarPickerURL(), LLSD()), HTTP_CONTENT_TEXT_HTML);
+}
+//
diff --git a/indra/newview/llfloateravatar.h b/indra/newview/llfloateravatar.h
index cadc5e4028..6f9d6413ec 100755
--- a/indra/newview/llfloateravatar.h
+++ b/indra/newview/llfloateravatar.h
@@ -38,6 +38,13 @@ private:
LLFloaterAvatar(const LLSD& key);
/*virtual*/ ~LLFloaterAvatar();
/*virtual*/ BOOL postBuild();
+
+ // Avatar chooser does not change between OpenSim grids
+ /*virtual*/ void onOpen(const LLSD& key);
+ void handleUrlChanged();
+
+ boost::signals2::connection mAvatarPickerUrlChangedSignal;
+ //
};
#endif
diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp
index 3b1aee77d1..8ac66c6644 100755
--- a/indra/newview/llfloaterbvhpreview.cpp
+++ b/indra/newview/llfloaterbvhpreview.cpp
@@ -176,6 +176,12 @@ void LLFloaterBvhPreview::setAnimCallbacks()
getChild("loop_in_point")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopIn, this, _1));
getChild("loop_out_point")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoopOut, this));
getChild("loop_out_point")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopOut, this, _1));
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ getChild("loop_in_frames")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoopInFrames, this));
+ getChild("loop_in_frames")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopInFrames, this, _1));
+ getChild("loop_out_frames")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitLoopOutFrames, this));
+ getChild("loop_out_frames")->setValidateBeforeCommit( boost::bind(&LLFloaterBvhPreview::validateLoopOutFrames, this, _1));
+ //
getChild("hand_pose_combo")->setCommitCallback(boost::bind(&LLFloaterBvhPreview::onCommitHandPose, this));
@@ -329,6 +335,20 @@ BOOL LLFloaterBvhPreview::loadBVH()
// motion will be returned, but it will be in a load-pending state, as this is a new motion
// this motion will not request an asset transfer until next update, so we have a chance to
// load the keyframe data locally
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ mNumFrames = loaderp->getNumFrames();
+ getChild("loop_in_frames")->setMaxValue(LLSD((F32)mNumFrames));
+ getChild("loop_out_frames")->setMaxValue(LLSD((F32)mNumFrames));
+ // (Re)assign loop frames spinners from loop percentages.
+ getChild("loop_in_frames")->setValue(LLSD((F32)getChild("loop_in_point")->getValue().asReal() / 100.f * (F32)mNumFrames));
+ getChild("loop_out_frames")->setValue(LLSD((F32)getChild("loop_out_point")->getValue().asReal() / 100.f * (F32)mNumFrames));
+
+ LLUIString out_str = getString("FS_report_frames");
+ out_str.setArg("[F]", llformat("%d", mNumFrames));
+ out_str.setArg("[S]", llformat("%.1f", loaderp->getDuration()));
+ out_str.setArg("[FPS]", llformat("%.1f", (F32)mNumFrames / loaderp->getDuration()));
+ getChild("frames_label")->setValue(LLSD(out_str));
+ //
// Preview on own avatar
//motionp = (LLKeyframeMotion*)mAnimPreview->getDummyAvatar()->createMotion(mMotionID);
motionp = dynamic_cast(mAnimPreview->getPreviewAvatar(this)->createMotion(mMotionID));
@@ -388,8 +408,18 @@ BOOL LLFloaterBvhPreview::loadBVH()
motionp->setLoopOut((F32)getChild("loop_out_point")->getValue().asReal() / 100.f * motionp->getDuration());
motionp->setPriority(getChild("priority")->getValue().asInteger());
motionp->setHandPose(LLHandMotion::getHandPose(getChild("hand_pose_combo")->getValue().asString()));
- motionp->setEaseIn((F32)getChild("ease_in_time")->getValue().asReal());
- motionp->setEaseOut((F32)getChild("ease_out_time")->getValue().asReal());
+ F32 ease_in = (F32)getChild("ease_in_time")->getValue().asReal();
+ F32 ease_out = (F32)getChild("ease_out_time")->getValue().asReal();
+ if (motionp->getDuration() != 0.f && ease_in + ease_out > motionp->getDuration() && !getChild("loop_check")->getValue().asBoolean())
+ {
+ F32 factor = motionp->getDuration() / (ease_in + ease_out);
+ ease_in *= factor;
+ ease_out *= factor;
+ getChild("ease_in_time")->setValue(LLSD(ease_in));
+ getChild("ease_out_time")->setValue(LLSD(ease_out));
+ }
+ motionp->setEaseIn(ease_in);
+ motionp->setEaseOut(ease_out);
//
setEnabled(TRUE);
std::string seconds_string;
@@ -869,7 +899,10 @@ void LLFloaterBvhPreview::onCommitLoopIn()
if (motionp)
{
- motionp->setLoopIn((F32)getChild("loop_in_point")->getValue().asReal() / 100.f);
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ //motionp->setLoopIn((F32)getChild("loop_in_point")->getValue().asReal() / 100.f);
+ getChild("loop_in_frames")->setValue(LLSD((F32)getChild("loop_in_point")->getValue().asReal() / 100.f * (F32)mNumFrames));
+ //
resetMotion();
getChild("loop_check")->setValue(LLSD(TRUE));
onCommitLoop();
@@ -893,13 +926,61 @@ void LLFloaterBvhPreview::onCommitLoopOut()
if (motionp)
{
- motionp->setLoopOut((F32)getChild("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration());
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ //motionp->setLoopOut((F32)getChild("loop_out_point")->getValue().asReal() * 0.01f * motionp->getDuration());
+ getChild("loop_out_frames")->setValue(LLSD((F32)getChild("loop_out_point")->getValue().asReal() / 100.f * (F32)mNumFrames));
+ //
resetMotion();
getChild("loop_check")->setValue(LLSD(TRUE));
onCommitLoop();
}
}
+// FIRE-17277: Allow entering Loop In/Loop Out as frames
+//-----------------------------------------------------------------------------
+// onCommitLoopInFrames()
+//-----------------------------------------------------------------------------
+void LLFloaterBvhPreview::onCommitLoopInFrames()
+{
+ if (!getEnabled() || !mAnimPreview)
+ return;
+
+ // Preview on own avatar
+ LLVOAvatar* avatarp = mAnimPreview->getPreviewAvatar(this);
+ LLKeyframeMotion* motionp = dynamic_cast(avatarp->findMotion(mMotionID));
+
+ if (motionp)
+ {
+ getChild("loop_in_point")->setValue(LLSD(mNumFrames == 0 ? 0.f : 100.f * (F32)getChild("loop_in_frames")->getValue().asReal() / (F32)mNumFrames));
+ resetMotion();
+ getChild("loop_check")->setValue(LLSD(TRUE));
+ // The values are actually set here:
+ onCommitLoop();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// onCommitLoopOutFrames()
+//-----------------------------------------------------------------------------
+void LLFloaterBvhPreview::onCommitLoopOutFrames()
+{
+ if (!getEnabled() || !mAnimPreview)
+ return;
+
+ // Preview on own avatar
+ LLVOAvatar* avatarp = mAnimPreview->getPreviewAvatar(this);
+ LLKeyframeMotion* motionp = dynamic_cast(avatarp->findMotion(mMotionID));
+
+ if (motionp)
+ {
+ getChild("loop_out_point")->setValue(LLSD(mNumFrames == 0 ? 100.f : 100.f * (F32)getChild("loop_out_frames")->getValue().asReal() / (F32)mNumFrames));
+ resetMotion();
+ getChild("loop_check")->setValue(LLSD(TRUE));
+ onCommitLoop();
+ }
+}
+//
+
//-----------------------------------------------------------------------------
// onCommitName()
//-----------------------------------------------------------------------------
@@ -1083,6 +1164,9 @@ bool LLFloaterBvhPreview::validateLoopIn(const LLSD& data)
}
getChild("loop_in_point")->setValue(LLSD(loop_in_value));
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ getChild("loop_in_frames")->setValue(LLSD(loop_in_value / 100.f * (F32)mNumFrames));
+ //
return true;
}
@@ -1111,10 +1195,74 @@ bool LLFloaterBvhPreview::validateLoopOut(const LLSD& data)
}
getChild("loop_out_point")->setValue(LLSD(loop_out_value));
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ getChild("loop_out_frames")->setValue(LLSD(loop_out_value / 100.f * (F32)mNumFrames));
+ //
return true;
}
+// FIRE-17277: Allow entering Loop In/Loop Out as frames
+//-----------------------------------------------------------------------------
+// validateLoopInFrames()
+//-----------------------------------------------------------------------------
+bool LLFloaterBvhPreview::validateLoopInFrames(const LLSD& data)
+{
+ if (!getEnabled())
+ return false;
+
+ F32 loop_in_value = (F32)getChild("loop_in_frames")->getValue().asReal();
+ F32 loop_out_value = (F32)getChild("loop_out_frames")->getValue().asReal();
+
+ if (loop_in_value < 0.f)
+ {
+ loop_in_value = 0.f;
+ }
+ else if (loop_in_value > 100.f)
+ {
+ loop_in_value = 100.f;
+ }
+ else if (loop_in_value > loop_out_value)
+ {
+ loop_in_value = loop_out_value;
+ }
+
+ getChild("loop_in_frames")->setValue(LLSD(loop_in_value));
+ getChild("loop_in_point")->setValue(LLSD(mNumFrames == 0 ? 0.f : 100.f * loop_in_value / (F32)mNumFrames));
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+// validateLoopOutFrames()
+//-----------------------------------------------------------------------------
+bool LLFloaterBvhPreview::validateLoopOutFrames(const LLSD& data)
+{
+ if (!getEnabled())
+ return false;
+
+ F32 loop_out_value = (F32)getChild("loop_out_frames")->getValue().asReal();
+ F32 loop_in_value = (F32)getChild("loop_in_frames")->getValue().asReal();
+
+ if (loop_out_value < 0.f)
+ {
+ loop_out_value = 0.f;
+ }
+ else if (loop_out_value > 100.f)
+ {
+ loop_out_value = 100.f;
+ }
+ else if (loop_out_value < loop_in_value)
+ {
+ loop_out_value = loop_in_value;
+ }
+
+ getChild("loop_out_frames")->setValue(LLSD(loop_out_value));
+ getChild("loop_out_point")->setValue(LLSD(mNumFrames == 0 ? 100.f : 100.f * loop_out_value / (F32)mNumFrames));
+ return true;
+}
+//
+
+
//-----------------------------------------------------------------------------
// refresh()
//-----------------------------------------------------------------------------
diff --git a/indra/newview/llfloaterbvhpreview.h b/indra/newview/llfloaterbvhpreview.h
index 6b7e6c3c5d..a803c411ba 100755
--- a/indra/newview/llfloaterbvhpreview.h
+++ b/indra/newview/llfloaterbvhpreview.h
@@ -116,6 +116,12 @@ public:
LLAssetType::EType type,
void* user_data,
S32 status, LLExtStat ext_status);
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ void onCommitLoopInFrames();
+ void onCommitLoopOutFrames();
+ bool validateLoopInFrames(const LLSD& data);
+ bool validateLoopOutFrames(const LLSD& data);
+ //
private:
void setAnimCallbacks() ;
// Reload animation from disk
@@ -146,6 +152,9 @@ protected:
// FIRE-2083: Slider in upload animation floater doesn't work
LLFrameTimer mTimer;
+
+ // FIRE-17277: Allow entering Loop In/Loop Out as frames
+ S32 mNumFrames;
};
#endif // LL_LLFLOATERBVHPREVIEW_H
diff --git a/indra/newview/llfloaterdestinations.cpp b/indra/newview/llfloaterdestinations.cpp
index af21cb593f..0214de9c29 100755
--- a/indra/newview/llfloaterdestinations.cpp
+++ b/indra/newview/llfloaterdestinations.cpp
@@ -35,14 +35,25 @@
#include "llfloaterdestinations.h"
#include "lluictrlfactory.h"
+#include "lfsimfeaturehandler.h"
+#include "llhttpconstants.h"
+#include "llmediactrl.h"
+#include "llweb.h"
LLFloaterDestinations::LLFloaterDestinations(const LLSD& key)
- : LLFloater(key)
+ : LLFloater(key),
+ mDestinationGuideUrlChangedSignal() // FIRE-16833: Destination guide does not change between OpenSim grids
{
}
LLFloaterDestinations::~LLFloaterDestinations()
{
+ // FIRE-16833: Destination guide does not change between OpenSim grids
+ if (mDestinationGuideUrlChangedSignal.connected())
+ {
+ mDestinationGuideUrlChangedSignal.disconnect();
+ }
+ //
}
BOOL LLFloaterDestinations::postBuild()
@@ -51,4 +62,22 @@ BOOL LLFloaterDestinations::postBuild()
return TRUE;
}
+// FIRE-16833: Destination guide does not change between OpenSim grids
+void LLFloaterDestinations::onOpen(const LLSD& key)
+{
+ // Connect during onOpen instead of ctor because LLFloaterDestinations instance
+ // gets created before we can safely create a LFSimFeatureHandler instance!
+ // Assuming we receive the destination guide URL via login response and it
+ // is the same URL being sent by region caps so we will be good for the initial
+ // region the avatar logs into as well.
+ if (!mDestinationGuideUrlChangedSignal.connected())
+ {
+ mDestinationGuideUrlChangedSignal = LFSimFeatureHandler::instance().setDestinationGuideCallback(boost::bind(&LLFloaterDestinations::handleUrlChanged, this));
+ }
+}
+void LLFloaterDestinations::handleUrlChanged()
+{
+ getChild("destination_guide_contents")->navigateTo(LLWeb::expandURLSubstitutions(LFSimFeatureHandler::instance().destinationGuideURL(), LLSD()), HTTP_CONTENT_TEXT_HTML);
+}
+//
diff --git a/indra/newview/llfloaterdestinations.h b/indra/newview/llfloaterdestinations.h
index 85d9b3391e..1de0e9d7d8 100755
--- a/indra/newview/llfloaterdestinations.h
+++ b/indra/newview/llfloaterdestinations.h
@@ -38,6 +38,13 @@ private:
LLFloaterDestinations(const LLSD& key);
/*virtual*/ ~LLFloaterDestinations();
/*virtual*/ BOOL postBuild();
+
+ // FIRE-16833: Destination guide does not change between OpenSim grids
+ /*virtual*/ void onOpen(const LLSD& key);
+ void handleUrlChanged();
+
+ boost::signals2::connection mDestinationGuideUrlChangedSignal;
+ //
};
#endif
diff --git a/indra/newview/llfloaterdisplayname.cpp b/indra/newview/llfloaterdisplayname.cpp
index 596e8c0dbe..a97bb5717a 100755
--- a/indra/newview/llfloaterdisplayname.cpp
+++ b/indra/newview/llfloaterdisplayname.cpp
@@ -80,8 +80,10 @@ void LLFloaterDisplayName::onOpen(const LLSD& key)
av_name.mNextUpdate - LLStringOps::getLocalTimeOffset();
LLDate next_update_local(next_update_local_secs);
// display as "July 18 12:17 PM"
+ // FIRE-17293: Abbreviate month to make sure it fits
std::string next_update_string =
- next_update_local.toHTTPDateString("%B %d %I:%M %p");
+ //next_update_local.toHTTPDateString("%B %d %I:%M %p");
+ next_update_local.toHTTPDateString("%b %d %I:%M %p");
getChild("lockout_text")->setTextArg("[TIME]", next_update_string);
getChild("lockout_text")->setVisible(true);
getChild("save_btn")->setEnabled(false);
diff --git a/indra/newview/llfloaterfacebook.cpp b/indra/newview/llfloaterfacebook.cpp
index d174fb9f01..8af73b87bb 100644
--- a/indra/newview/llfloaterfacebook.cpp
+++ b/indra/newview/llfloaterfacebook.cpp
@@ -56,6 +56,8 @@
#include "llspinctrl.h"
+#include "lfsimfeaturehandler.h"
+
static LLPanelInjector t_panel_status("llfacebookstatuspanel");
static LLPanelInjector t_panel_photo("llfacebookphotopanel");
static LLPanelInjector t_panel_checkin("llfacebookcheckinpanel");
@@ -80,7 +82,10 @@ std::string get_map_url()
}
int x_pos = center_agent[0] / 256.0;
int y_pos = center_agent[1] / 256.0;
- std::string map_url = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-1-%d-%d-objects.jpg", x_pos, y_pos);
+ // OpenSim support
+ //std::string map_url = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-1-%d-%d-objects.jpg", x_pos, y_pos);
+ std::string map_url = LFSimFeatureHandler::instance().mapServerURL() + llformat("map-1-%d-%d-objects.jpg", x_pos, y_pos);
+ //
return map_url;
}
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index 3861cb1d88..37f3475173 100755
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -303,6 +303,15 @@ BOOL LLFloaterLand::postBuild()
tab->selectTab(sLastTab);
}
+ // FIRE-17280: Requesting Experience access allow & block list breaks OpenSim
+#if OPENSIM
+ if (!LLGridManager::instance().isInSecondLife())
+ {
+ mTabLand->removeTabPanel(mTabLand->getPanelByName("land_experiences_panel"));
+ }
+#endif
+ //
+
return TRUE;
}
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index 972af70834..4b08da0f9d 100644
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -129,6 +129,7 @@
#include "fsdroptarget.h"
#include "fsfloaterimcontainer.h"
#include "growlmanager.h"
+#include "lfsimfeaturehandler.h"
#include "llavatarname.h" // Deeper name cache stuffs
#include "lleventtimer.h"
#include "lldiriterator.h" // for populating the fonts combo
@@ -379,22 +380,29 @@ bool callback_pick_debug_search(const LLSD& notification, const LLSD& response)
if ( option == 0 ) // YES
{
std::string url;
-#ifdef OPENSIM //
- if(LLGridManager::getInstance()->isInOpenSim())
+
+ if (LFSimFeatureHandler::instanceExists())
{
- url = LLLoginInstance::getInstance()->hasResponse("search")
- ? LLLoginInstance::getInstance()->getResponse("search").asString()
- : gSavedSettings.getString("SearchURLOpenSim");
+ url = LFSimFeatureHandler::instance().searchURL();
}
- else // we are in SL or SL beta
-#endif // OPENSIM //
+ else
{
- //not in OpenSim means we are in SL or SL beta
- url = gSavedSettings.getString("SearchURL");
+#ifdef OPENSIM //
+ if (LLGridManager::getInstance()->isInOpenSim())
+ {
+ url = LLLoginInstance::getInstance()->hasResponse("search")
+ ? LLLoginInstance::getInstance()->getResponse("search").asString()
+ : gSavedSettings.getString("SearchURLOpenSim");
+ }
+ else // we are in SL or SL beta
+#endif // OPENSIM //
+ {
+ //not in OpenSim means we are in SL or SL beta
+ url = gSavedSettings.getString("SearchURL");
+ }
}
gSavedSettings.setString("SearchURLDebug", url);
-
}
return false;
@@ -487,6 +495,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
// mCommitCallbackRegistrar.add("Pref.ClickSkin", boost::bind(&LLFloaterPreference::onClickSkin, this,_1, _2));
// mCommitCallbackRegistrar.add("Pref.SelectSkin", boost::bind(&LLFloaterPreference::onSelectSkin, this));
mCommitCallbackRegistrar.add("Pref.VoiceSetKey", boost::bind(&LLFloaterPreference::onClickSetKey, this));
+ mCommitCallbackRegistrar.add("Pref.VoiceSetClearKey", boost::bind(&LLFloaterPreference::onClickClearKey, this)); // FIRE-3803: Clear voice toggle button
mCommitCallbackRegistrar.add("Pref.VoiceSetMiddleMouse", boost::bind(&LLFloaterPreference::onClickSetMiddleMouse, this));
// Handled centrally now
// mCommitCallbackRegistrar.add("Pref.SetSounds", boost::bind(&LLFloaterPreference::onClickSetSounds, this));
@@ -634,13 +643,9 @@ BOOL LLFloaterPreference::postBuild()
{
// [FS communication UI]
//gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLFloaterIMSessionTab::processChatHistoryStyleUpdate, false));
- gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
- gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
- gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
- gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
- // [FS communication UI]
- gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged));
+ //gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged));
+ // [FS communication UI]
gSavedSettings.getControl("ChatBubbleOpacity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onNameTagOpacityChange, this, _2));
gSavedSettings.getControl("ConsoleBackgroundOpacity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onConsoleOpacityChange, this, _2)); // FIRE-1332 - Sepeate opacity settings for nametag and console chat
@@ -2615,6 +2620,13 @@ void LLFloaterPreference::onClickSetKey()
}
}
+// FIRE-3803: Clear voice toggle button
+void LLFloaterPreference::onClickClearKey()
+{
+ gSavedSettings.setString("PushToTalkButton", "");
+}
+//
+
void LLFloaterPreference::setKey(KEY key)
{
getChild("modifier_combo")->setValue(LLKeyboard::stringFromKey(key));
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 2739236f06..65fffed696 100755
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -190,6 +190,7 @@ public:
void onClickSkin(LLUICtrl* ctrl,const LLSD& userdata);
void onSelectSkin();
void onClickSetKey();
+ void onClickClearKey(); // FIRE-3803: Clear voice toggle button
void setKey(KEY key);
void onClickSetMiddleMouse();
// void onClickSetSounds(); // Handled centrally now
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 15c56551b5..cc98d26501 100755
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -223,20 +223,10 @@ void LLFloaterSearch::search(const SearchQuery &p)
{
url = debug_url;
}
- else if(LLGridManager::getInstance()->isInOpenSim())
- {
- std::string os_search_url = LFSimFeatureHandler::instance().searchURL();
- if (!os_search_url.empty())
- url = os_search_url;
- else if (LLLoginInstance::getInstance()->hasResponse("search"))
- url = LLLoginInstance::getInstance()->getResponse("search").asString();
- else
- url = gSavedSettings.getString("SearchURLOpenSim");
- }
else // we are in SL or SL beta
#endif // OPENSIM //
{
- url = gSavedSettings.getString("SearchURL");
+ url = LFSimFeatureHandler::instance().searchURL();
}
//
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index 48a9f70079..4dda3de43e 100755
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -96,10 +96,12 @@ private:
*/
const LLUUID extractAvatarID(const LLUUID& avatarID);
+public: // Needed to check in LLOpenTaskOffer
bool isAvatarDataStored(const LLUUID& avatarID) const
{
return (mBuddyIDSet.end() != mBuddyIDSet.find(avatarID));
}
+private: // Needed to check in LLOpenTaskOffer
const LLUUID& findChildFolderUUID(const LLUUID& parentFolderUUID, const std::string& nonLocalizedName) const;
const LLUUID& findFriendFolderUUIDImpl() const;
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e5322f3864..95a8d54510 100755
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -3019,7 +3019,7 @@ void LLIMMgr::addMessage(
{
LLStringUtil::format_map_t args;
args["NAME"] = LLSLURL("group", new_session_id, "about").getSLURLString();
- reportToNearbyChat(LLTrans::getString("GroupChatMuteNotice", args));
+ report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
}
clearPendingInvitation(new_session_id);
clearPendingAgentListUpdates(new_session_id);
@@ -3103,7 +3103,7 @@ void LLIMMgr::addMessage(
}
else if (reportIgnoredAdHocSession)
{
- reportToNearbyChat(LLTrans::getString("IgnoredAdHocSession"));
+ report_to_nearby_chat(LLTrans::getString("IgnoredAdHocSession"));
}
return;
}
@@ -4339,7 +4339,7 @@ public:
{
LLStringUtil::format_map_t args;
args["NAME"] = LLSLURL("group", session_id, "about").getSLURLString();
- reportToNearbyChat(LLTrans::getString("GroupChatMuteNotice", args));
+ report_to_nearby_chat(LLTrans::getString("GroupChatMuteNotice", args));
}
//KC: make sure we leave the group chat at the server end as well
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 7d7478d005..a9d2781e98 100755
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4484,7 +4484,10 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop,
// DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER.
// If we have an item of AT_LINK_FOLDER type we should process the linked
// category being dragged or dropped into folder.
- if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
+ // FIRE-13863: Allow moving folder links
+ //if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType())
+ if (inv_item && LLAssetType::AT_LINK_FOLDER == inv_item->getActualType() && !gSavedSettings.getBOOL("FSEnableMovingFolderLinks"))
+ //
{
LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID());
if (linked_category)
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index a81ed69b99..8dc0e41c67 100755
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -358,7 +358,7 @@ void LLMuteList::updateAdd(const LLMute& mute)
{
LLStringUtil::format_map_t args;
args["NAME"] = mute.mName;
- reportToNearbyChat(LLTrans::getString("Mute_Add", args));
+ report_to_nearby_chat(LLTrans::getString("Mute_Add", args));
}
//
}
@@ -465,7 +465,7 @@ void LLMuteList::updateRemove(const LLMute& mute)
{
LLStringUtil::format_map_t args;
args["NAME"] = mute.mName;
- reportToNearbyChat(LLTrans::getString("Mute_Remove", args));
+ report_to_nearby_chat(LLTrans::getString("Mute_Remove", args));
}
//
}
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index 8d88446964..f786381752 100755
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -1856,7 +1856,7 @@ void LLNetMap::handleCam()
}
else
{
- reportToNearbyChat(LLTrans::getString("minimap_no_focus"));
+ report_to_nearby_chat(LLTrans::getString("minimap_no_focus"));
}
}
diff --git a/indra/newview/llnotificationlistitem.cpp b/indra/newview/llnotificationlistitem.cpp
index b347524856..8709d2e500 100644
--- a/indra/newview/llnotificationlistitem.cpp
+++ b/indra/newview/llnotificationlistitem.cpp
@@ -401,14 +401,24 @@ BOOL LLGroupNoticeNotificationListItem::postBuild()
mTitleBoxExp->setValue(mParams.subject);
mNoticeTextExp->setValue(mParams.message);
- mTimeBox->setValue(buildNotificationDate(mParams.time_stamp, UTC));
- mTimeBoxExp->setValue(buildNotificationDate(mParams.time_stamp, UTC));
+ // FIRE-17313: Display group notices in SLT
+ //mTimeBox->setValue(buildNotificationDate(mParams.time_stamp, UTC));
+ //mTimeBoxExp->setValue(buildNotificationDate(mParams.time_stamp, UTC));
+ ////Workaround: in case server timestamp is 0 - we use the time when notification was actually received
+ //if (mParams.time_stamp.isNull())
+ //{
+ // mTimeBox->setValue(buildNotificationDate(mParams.received_time, UTC));
+ // mTimeBoxExp->setValue(buildNotificationDate(mParams.received_time, UTC));
+ //}
+ mTimeBox->setValue(buildNotificationDate(mParams.time_stamp, SLT));
+ mTimeBoxExp->setValue(buildNotificationDate(mParams.time_stamp, SLT));
//Workaround: in case server timestamp is 0 - we use the time when notification was actually received
if (mParams.time_stamp.isNull())
{
- mTimeBox->setValue(buildNotificationDate(mParams.received_time, UTC));
- mTimeBoxExp->setValue(buildNotificationDate(mParams.received_time, UTC));
+ mTimeBox->setValue(buildNotificationDate(mParams.received_time, SLT));
+ mTimeBoxExp->setValue(buildNotificationDate(mParams.received_time, SLT));
}
+ //
setSender(mParams.sender);
if (mInventoryOffer != NULL)
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
index 955c24eb7a..88c5014f9d 100755
--- a/indra/newview/llpanelgroup.cpp
+++ b/indra/newview/llpanelgroup.cpp
@@ -92,7 +92,8 @@ LLPanelGroup::LLPanelGroup()
: LLPanel(),
LLGroupMgrObserver( LLUUID() ),
mSkipRefresh(FALSE),
- mButtonJoin(NULL)
+ mButtonJoin(NULL),
+ mIsUsingTabContainer(false) // TabContainer switch
{
// Set up the factory callbacks.
// Roles sub tabs
@@ -114,19 +115,60 @@ void LLPanelGroup::onOpen(const LLSD& key)
if(!key.has("group_id"))
return;
- // open the desired panel
- if (key.has("open_tab_name"))
- {
- // onOpen from selected panel will be called from onTabSelected callback
- LLTabContainer* tab_ctrl = getChild("groups_accordion");
- tab_ctrl->selectTabByName(key["open_tab_name"]);
- }
-
LLUUID group_id = key["group_id"];
if(!key.has("action"))
{
setGroupID(group_id);
- getChild("groups_accordion")->expandDefaultTab();
+ // TabContainer switch
+ //getChild("groups_accordion")->expandDefaultTab();
+ if (mIsUsingTabContainer)
+ {
+ if (key.has("open_tab_name"))
+ {
+ getChild("groups_accordion")->selectTabByName(key["open_tab_name"].asString());
+ }
+ }
+ else
+ {
+ if (key.has("open_tab_name"))
+ {
+ LLAccordionCtrlTab* tab_general = getChild("group_general_tab");
+ LLAccordionCtrlTab* tab_roles = getChild("group_roles_tab");
+ LLAccordionCtrlTab* tab_notices = getChild("group_notices_tab");
+ LLAccordionCtrlTab* tab_land = getChild("group_land_tab");
+ LLAccordionCtrlTab* tab_experiences = getChild("group_experiences_tab");
+
+ if(tab_general->getDisplayChildren())
+ tab_general->changeOpenClose(tab_general->getDisplayChildren());
+ if(tab_roles->getDisplayChildren())
+ tab_roles->changeOpenClose(tab_roles->getDisplayChildren());
+ if(tab_notices->getDisplayChildren())
+ tab_notices->changeOpenClose(tab_notices->getDisplayChildren());
+ if(tab_land->getDisplayChildren())
+ tab_land->changeOpenClose(tab_land->getDisplayChildren());
+ if(tab_experiences->getDisplayChildren())
+ tab_experiences->changeOpenClose(tab_land->getDisplayChildren());
+
+ tab_general->setSelected(false);
+ tab_roles->setSelected(false);
+ tab_notices->setSelected(false);
+ tab_land->setSelected(false);
+ tab_experiences->setSelected(false);
+
+ LLAccordionCtrlTab* target_tab = getChild(key["open_tab_name"].asString())->getParentByType();
+ if (target_tab)
+ {
+ target_tab->changeOpenClose(false);
+ target_tab->setFocus(TRUE);
+ target_tab->notifyParent(LLSD().with("action", "select_current"));
+ }
+ }
+ else
+ {
+ getChild("groups_accordion")->expandDefaultTab();
+ }
+ }
+ //
return;
}
@@ -213,6 +255,9 @@ BOOL LLPanelGroup::postBuild()
LLVoiceClient::getInstance()->addObserver(this);
+ // TabContainer switch
+ mIsUsingTabContainer = (findChild("groups_accordion") != NULL);
+
return TRUE;
}
@@ -442,14 +487,39 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
getChild("prepend_founded_by")->setVisible(!is_null_group_id);
- LLAccordionCtrl* tab_ctrl = getChild("groups_accordion");
- tab_ctrl->reset();
+ // TabContainer switch
+ //LLAccordionCtrl* tab_ctrl = getChild("groups_accordion");
+ //tab_ctrl->reset();
- LLAccordionCtrlTab* tab_general = getChild("group_general_tab");
- LLAccordionCtrlTab* tab_roles = getChild("group_roles_tab");
- LLAccordionCtrlTab* tab_notices = getChild("group_notices_tab");
- LLAccordionCtrlTab* tab_land = getChild("group_land_tab");
- LLAccordionCtrlTab* tab_experiences = getChild("group_experiences_tab");
+ //LLAccordionCtrlTab* tab_general = getChild("group_general_tab");
+ //LLAccordionCtrlTab* tab_roles = getChild("group_roles_tab");
+ //LLAccordionCtrlTab* tab_notices = getChild("group_notices_tab");
+ //LLAccordionCtrlTab* tab_land = getChild("group_land_tab");
+ //LLAccordionCtrlTab* tab_experiences = getChild("group_experiences_tab");
+ LLAccordionCtrl* tab_ctrl = NULL;
+ LLAccordionCtrlTab* tab_general = NULL;
+ LLAccordionCtrlTab* tab_roles = NULL;
+ LLAccordionCtrlTab* tab_notices = NULL;
+ LLAccordionCtrlTab* tab_land = NULL;
+ LLAccordionCtrlTab* tab_experiences = NULL;
+ LLTabContainer* tabcont_ctrl = NULL;
+
+ if (mIsUsingTabContainer)
+ {
+ tabcont_ctrl = getChild("groups_accordion");
+ }
+ else
+ {
+ tab_ctrl = getChild("groups_accordion");
+ tab_ctrl->reset();
+
+ tab_general = getChild("group_general_tab");
+ tab_roles = getChild("group_roles_tab");
+ tab_notices = getChild("group_notices_tab");
+ tab_land = getChild("group_land_tab");
+ tab_experiences = getChild("group_experiences_tab");
+ }
+ //
if(mButtonJoin)
mButtonJoin->setVisible(false);
@@ -457,9 +527,20 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
if(is_null_group_id)//creating new group
{
+ // TabContainer switch
+ if (mIsUsingTabContainer)
+ {
+ for (S32 i = 1; i <= 4; ++i)
+ {
+ tabcont_ctrl->setTabVisibility(tabcont_ctrl->getPanelByIndex(i), false);
+ }
+ }
+ else
+ {
+ //
if(!tab_general->getDisplayChildren())
tab_general->changeOpenClose(tab_general->getDisplayChildren());
-
+
if(tab_roles->getDisplayChildren())
tab_roles->changeOpenClose(tab_roles->getDisplayChildren());
if(tab_notices->getDisplayChildren())
@@ -473,6 +554,9 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
tab_notices->setVisible(false);
tab_land->setVisible(false);
tab_experiences->setVisible(false);
+ // TabContainer switch
+ }
+ //
getChild("group_name")->setVisible(false);
getChild("group_name_editor")->setVisible(true);
@@ -486,6 +570,14 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
{
if(!is_same_id)
{
+ // TabContainer switch
+ if (mIsUsingTabContainer)
+ {
+ tabcont_ctrl->selectFirstTab();
+ }
+ else
+ {
+ //
if(!tab_general->getDisplayChildren())
tab_general->changeOpenClose(tab_general->getDisplayChildren());
if(tab_roles->getDisplayChildren())
@@ -496,15 +588,32 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
tab_land->changeOpenClose(tab_land->getDisplayChildren());
if(tab_experiences->getDisplayChildren())
tab_experiences->changeOpenClose(tab_land->getDisplayChildren());
+ // TabContainer switch
+ }
+ //
}
LLGroupData agent_gdatap;
bool is_member = gAgent.getGroupData(mID,agent_gdatap) || gAgent.isGodlikeWithoutAdminMenuFakery();
+ // TabContainer switch
+ if (mIsUsingTabContainer)
+ {
+ for (S32 i = 1; i <= 4; ++i)
+ {
+ tabcont_ctrl->setTabVisibility(tabcont_ctrl->getPanelByIndex(i), is_member);
+ }
+ }
+ else
+ {
+ //
tab_roles->setVisible(is_member);
tab_notices->setVisible(is_member);
tab_land->setVisible(is_member);
tab_experiences->setVisible(is_member);
+ // TabContainer switch
+ }
+ //
getChild("group_name")->setVisible(true);
getChild("group_name_editor")->setVisible(false);
@@ -517,7 +626,13 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)
button_chat->setVisible(is_member);
}
- tab_ctrl->arrange();
+ // TabContainer switch
+ //tab_ctrl->arrange();
+ if (!mIsUsingTabContainer)
+ {
+ tab_ctrl->arrange();
+ }
+ //
reposButtons();
update(GC_ALL);//show/hide "join" button if data is already ready
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
index 33faa19417..ae157cfbad 100755
--- a/indra/newview/llpanelgroup.h
+++ b/indra/newview/llpanelgroup.h
@@ -120,6 +120,9 @@ protected:
LLButton* mButtonJoin;
LLUICtrl* mJoinText;
+
+ // TabContainer switch
+ bool mIsUsingTabContainer;
};
class LLPanelGroupTab : public LLPanel
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 9316e6145a..f23283a092 100755
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -650,7 +650,6 @@ BOOL LLPanelPeople::postBuild()
// FIRE-4740: Friend counter in people panel
mFriendsTabContainer = friends_tab->findChild("friends_accordion");
// Firestorm radar
- friends_tab->childSetAction("GlobalOnlineStatusToggle", boost::bind(&LLPanelPeople::onGlobalVisToggleButtonClicked, this));
mOnlineFriendList = friends_tab->getChild("avatars_online");
mAllFriendList = friends_tab->getChild("avatars_all");
mSuggestedFriends = friends_tab->getChild("suggested_friends");
@@ -1747,47 +1746,6 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name)
return isAccordionCollapsedByUser(getChild(name));
}
-// Firestorm radar
-void LLPanelPeople::onGlobalVisToggleButtonClicked()
-// Iterate through friends lists, toggling status permission on or off
-{
- bool vis = getChild("GlobalOnlineStatusToggle")->getValue().asBoolean();
- gSavedSettings.setBOOL("GlobalOnlineStatusToggle", vis);
-
- const LLAvatarTracker& av_tracker = LLAvatarTracker::instance();
- LLAvatarTracker::buddy_map_t all_buddies;
- av_tracker.copyBuddyList(all_buddies);
- LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
- for (; buddy_it != all_buddies.end(); ++buddy_it)
- {
- LLUUID buddy_id = buddy_it->first;
- const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(buddy_id);
- if (relation == NULL)
- {
- // Lets have a warning log message instead of having a crash. EXT-4947.
- LL_WARNS() << "Trying to modify rights for non-friend avatar. Skipped." << LL_ENDL;
- return;
- }
-
- S32 cur_rights = relation->getRightsGrantedTo();
- S32 new_rights = 0;
- if (vis)
- new_rights = LLRelationship::GRANT_ONLINE_STATUS + (cur_rights & LLRelationship::GRANT_MAP_LOCATION) + (cur_rights & LLRelationship::GRANT_MODIFY_OBJECTS);
- else
- new_rights = (cur_rights & LLRelationship::GRANT_MAP_LOCATION) + (cur_rights & LLRelationship::GRANT_MODIFY_OBJECTS);
-
- LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(buddy_id,new_rights);
- }
-
- mAllFriendList->showPermissions(true);
- mOnlineFriendList->showPermissions(true);
-
- LLSD args;
- args["MESSAGE"] = getString("high_server_load");
- LLNotificationsUtil::add("GenericAlert", args);
-}
-// Firestorm radar
-
// [FS:CR] Contact sets
void LLPanelPeople::updateContactSets(LGGContactSets::EContactSetUpdate type)
{
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
index 9e5088a351..dfec38fdcc 100755
--- a/indra/newview/llpanelpeople.h
+++ b/indra/newview/llpanelpeople.h
@@ -147,10 +147,6 @@ private:
bool isAccordionCollapsedByUser(LLUICtrl* acc_tab);
bool isAccordionCollapsedByUser(const std::string& name);
- // Firestorm callback handler
- void onGlobalVisToggleButtonClicked();
- // Firestorm callback handler
-
LLTabContainer* mTabContainer;
LLAvatarList* mOnlineFriendList;
LLAvatarList* mAllFriendList;
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
index 58bc37e26a..80bb8be01f 100755
--- a/indra/newview/llscriptfloater.cpp
+++ b/indra/newview/llscriptfloater.cpp
@@ -368,7 +368,7 @@ F32 LLScriptFloater::getCurrentTransparency()
{
if (mNoTransparency)
{
- return 1.0;
+ return 1.0f;
}
else
{
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 3538686478..aae5a85769 100755
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -224,6 +224,7 @@
#include "fsregistrarutils.h"
#include "fsscriptlibrary.h"
#include "fswsassetblacklist.h"
+#include "lfsimfeaturehandler.h"
#include "lggcontactsets.h"
#include "llfloatersearch.h"
#include "llfloatersidepanelcontainer.h"
@@ -388,13 +389,13 @@ public:
{
if (status == HTTP_INTERNAL_ERROR)
{
- reportToNearbyChat(LLTrans::getString("SLGridStatusTimedOut"));
+ report_to_nearby_chat(LLTrans::getString("SLGridStatusTimedOut"));
}
else
{
LLStringUtil::format_map_t args;
args["STATUS"] = llformat("%d", status);
- reportToNearbyChat(LLTrans::getString("SLGridStatusOtherError", args));
+ report_to_nearby_chat(LLTrans::getString("SLGridStatusOtherError", args));
}
LL_WARNS("SLGridStatusResponder") << "Error - status " << status << LL_ENDL;
return;
@@ -403,7 +404,7 @@ public:
S32 outputSize = buffer->countAfter(channels.in(), NULL);
if (outputSize <= 0)
{
- reportToNearbyChat(LLTrans::getString("SLGridStatusInvalidMsg"));
+ report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - empty output" << LL_ENDL;
return;
}
@@ -477,17 +478,17 @@ public:
LLStringUtil::trim(newsTitle);
LLStringUtil::trim(newsDesc);
LLStringUtil::trim(newsLink);
- reportToNearbyChat("[ " + newsTitle + " ] " + newsDesc + " [ " + newsLink + " ]");
+ report_to_nearby_chat("[ " + newsTitle + " ] " + newsDesc + " [ " + newsLink + " ]");
}
else
{
- reportToNearbyChat(LLTrans::getString("SLGridStatusInvalidMsg"));
+ report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - inner tag(s) missing" << LL_ENDL;
}
}
else
{
- reportToNearbyChat(LLTrans::getString("SLGridStatusInvalidMsg"));
+ report_to_nearby_chat(LLTrans::getString("SLGridStatusInvalidMsg"));
LL_WARNS("SLGridStatusResponder") << "Error - output without " << LL_ENDL;
}
}
@@ -604,7 +605,7 @@ bool idle_startup()
gSavedSettings.setString("FSInternalSkinCurrent", gSavedSettings.getString("FSSkinCurrentReadableName"));
gSavedSettings.setString("FSInternalSkinCurrentTheme", gSavedSettings.getString("FSSkinCurrentThemeReadableName"));
//
-
+
if (LLFeatureManager::getInstance()->isSafe())
{
LLNotificationsUtil::add("DisplaySetToSafe");
@@ -1787,7 +1788,7 @@ bool idle_startup()
// Aurora Sim
//LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim);
-LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x, first_sim_size_y);
+ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x, first_sim_size_y);
// Aurora Sim
display_startup();
@@ -1924,6 +1925,9 @@ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x,
LLVoiceClient::getInstance()->updateSettings();
display_startup();
+ // OpenSim support: Init with defaults - we get the OpenSimExtras later during login
+ LFSimFeatureHandler::instance();
+
// create a container's instance for start a controlling conversation windows
// by the voice's events
// [FS communication UI]
@@ -2898,7 +2902,7 @@ LLWorld::getInstance()->addRegion(gFirstSimHandle, gFirstSim, first_sim_size_x,
// FIRE-6643 Display MOTD when login screens are disabled
if (gSavedSettings.getBOOL("FSDisableLoginScreens"))
{
- reportToNearbyChat(gAgent.mMOTD);
+ report_to_nearby_chat(gAgent.mMOTD);
}
//
//
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index ad03fa246b..a18b4974e8 100755
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -438,6 +438,186 @@ BOOL LLIMWellWindow::ObjectRowPanel::handleRightMouseDown(S32 x, S32 y, MASK mas
return mChiclet->handleRightMouseDown(x, y, mask);
}
+// Optional legacy notification well
+/************************************************************************/
+/* LLNotificationWellWindow implementation */
+/************************************************************************/
+
+//////////////////////////////////////////////////////////////////////////
+// PUBLIC METHODS
+LLNotificationWellWindow::WellNotificationChannel::WellNotificationChannel(LLNotificationWellWindow* well_window)
+: LLNotificationChannel(LLNotificationChannel::Params().name(well_window->getPathname())),
+ mWellWindow(well_window)
+{
+ connectToChannel("Notifications");
+ connectToChannel("Group Notifications");
+ connectToChannel("Offer");
+}
+
+LLNotificationWellWindow::LLNotificationWellWindow(const LLSD& key)
+: LLSysWellWindow(key)
+{
+ mNotificationUpdates.reset(new WellNotificationChannel(this));
+ mUpdateLocked = false;
+}
+
+// static
+LLNotificationWellWindow* LLNotificationWellWindow::getInstance(const LLSD& key /*= LLSD()*/)
+{
+ return LLFloaterReg::getTypedInstance("notification_well_window", key);
+}
+
+// virtual
+BOOL LLNotificationWellWindow::postBuild()
+{
+ BOOL rv = LLSysWellWindow::postBuild();
+ setTitle(getString("title_notification_well_window"));
+ return rv;
+}
+
+// virtual
+void LLNotificationWellWindow::setVisible(BOOL visible)
+{
+ if (visible)
+ {
+ // when Notification channel is cleared, storable toasts will be added into the list.
+ clearScreenChannels();
+ }
+
+ LLSysWellWindow::setVisible(visible);
+}
+
+//---------------------------------------------------------------------------------
+void LLNotificationWellWindow::addItem(LLSysWellItem::Params p)
+{
+ LLSD value = p.notification_id;
+ // do not add clones
+ if( mMessageList->getItemByValue(value))
+ return;
+
+ LLSysWellItem* new_item = new LLSysWellItem(p);
+ if (mMessageList->addItem(new_item, value, ADD_TOP, !mUpdateLocked))
+ {
+ if( !mUpdateLocked )
+ {
+ mSysWellChiclet->updateWidget(isWindowEmpty());
+ reshapeWindow();
+ }
+ new_item->setOnItemCloseCallback(boost::bind(&LLNotificationWellWindow::onItemClose, this, _1));
+ new_item->setOnItemClickCallback(boost::bind(&LLNotificationWellWindow::onItemClick, this, _1));
+ }
+ else
+ {
+ LL_WARNS() << "Unable to add Notification into the list, notification ID: " << p.notification_id
+ << ", title: " << p.title
+ << LL_ENDL;
+
+ new_item->die();
+ }
+}
+
+void LLNotificationWellWindow::closeAll()
+{
+ // Need to clear notification channel, to add storable toasts into the list.
+ clearScreenChannels();
+ std::vector items;
+ mMessageList->getItems(items);
+
+ LLPersistentNotificationStorage::getInstance()->startBulkUpdate(); //
+
+ for (std::vector::iterator
+ iter = items.begin(),
+ iter_end = items.end();
+ iter != iter_end; ++iter)
+ {
+ LLSysWellItem* sys_well_item = dynamic_cast(*iter);
+ if (sys_well_item)
+ onItemClose(sys_well_item);
+ }
+
+ // All done, renable normal mode and save.
+ LLPersistentNotificationStorage::getInstance()->endBulkUpdate();
+ LLPersistentNotificationStorage::getInstance()->saveNotifications();
+ //
+}
+
+void LLNotificationWellWindow::unlockWindowUpdate()
+{
+ mUpdateLocked = false;
+ mSysWellChiclet->updateWidget(isWindowEmpty());
+
+ // Let the list rearrange itself. This is normally called during addItem if the window is not locked.
+ LLSD oNotify;
+ oNotify["rearrange"] = 1;
+ mMessageList->notify( oNotify );
+
+ reshapeWindow();
+
+}
+
+//////////////////////////////////////////////////////////////////////////
+// PRIVATE METHODS
+void LLNotificationWellWindow::initChannel()
+{
+ LLSysWellWindow::initChannel();
+ if(mChannel)
+ {
+ mChannel->addOnStoreToastCallback(boost::bind(&LLNotificationWellWindow::onStoreToast, this, _1, _2));
+ }
+}
+
+void LLNotificationWellWindow::clearScreenChannels()
+{
+ // 1 - remove StartUp toast and channel if present
+ if(!LLNotificationsUI::LLScreenChannel::getStartUpToastShown())
+ {
+ LLNotificationsUI::LLChannelManager::getInstance()->onStartUpToastClose();
+ }
+
+ // 2 - remove toasts in Notification channel
+ if(mChannel)
+ {
+ mChannel->removeAndStoreAllStorableToasts();
+ }
+}
+
+void LLNotificationWellWindow::onStoreToast(LLPanel* info_panel, LLUUID id)
+{
+ LLSysWellItem::Params p;
+ p.notification_id = id;
+ p.title = static_cast(info_panel)->getTitle();
+ addItem(p);
+}
+
+void LLNotificationWellWindow::onItemClick(LLSysWellItem* item)
+{
+ LLUUID id = item->getID();
+ LLFloaterReg::showInstance("inspect_toast", id);
+}
+
+void LLNotificationWellWindow::onItemClose(LLSysWellItem* item)
+{
+ LLUUID id = item->getID();
+
+ if(mChannel)
+ {
+ // removeItemByID() is invoked from killToastByNotificationID() and item will removed;
+ mChannel->killToastByNotificationID(id);
+ }
+ else
+ {
+ // removeItemByID() should be called one time for each item to remove it from notification well
+ removeItemByID(id);
+ }
+
+}
+
+void LLNotificationWellWindow::onAdd( LLNotificationPtr notify )
+{
+ removeItemByID(notify->getID());
+}
+//
+
/************************************************************************/
/* LLIMWellWindow implementation */
/************************************************************************/
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
index ecfdc652c6..1f00b94e65 100755
--- a/indra/newview/llsyswellwindow.h
+++ b/indra/newview/llsyswellwindow.h
@@ -102,6 +102,65 @@ protected:
bool mIsReshapedByUser;
};
+// Optional legacy notification well
+/**
+ * Class intended to manage incoming notifications.
+ *
+ * It contains a list of notifications that have not been responded to.
+ */
+class LLNotificationWellWindow : public LLSysWellWindow
+{
+ bool mUpdateLocked;
+
+public:
+ LLNotificationWellWindow(const LLSD& key);
+ static LLNotificationWellWindow* getInstance(const LLSD& key = LLSD());
+
+ /*virtual*/ BOOL postBuild();
+ /*virtual*/ void setVisible(BOOL visible);
+ /*virtual*/ void onAdd(LLNotificationPtr notify);
+ // Operating with items
+ void addItem(LLSysWellItem::Params p);
+
+ // Closes all notifications and removes them from the Notification Well
+ void closeAll();
+
+ void lockWindowUpdate()
+ { mUpdateLocked = true; }
+ void unlockWindowUpdate();
+
+protected:
+ struct WellNotificationChannel : public LLNotificationChannel
+ {
+ WellNotificationChannel(LLNotificationWellWindow*);
+ void onDelete(LLNotificationPtr notify)
+ {
+ mWellWindow->removeItemByID(notify->getID());
+ }
+
+ LLNotificationWellWindow* mWellWindow;
+ };
+
+ LLNotificationChannelPtr mNotificationUpdates;
+ /*virtual*/ const std::string& getAnchorViewName() { return NOTIFICATION_WELL_ANCHOR_NAME; }
+
+private:
+ // init Window's channel
+ void initChannel();
+ void clearScreenChannels();
+
+ void onStoreToast(LLPanel* info_panel, LLUUID id);
+
+ // Handlers
+ void onItemClick(LLSysWellItem* item);
+ void onItemClose(LLSysWellItem* item);
+
+ // ID of a toast loaded by user (by clicking notification well item)
+ LLUUID mLoadedToastId;
+
+};
+//
+
/**
* Class intended to manage incoming messages in IM chats.
*
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
index caf46340ae..637c07b973 100755
--- a/indra/newview/lltoastgroupnotifypanel.cpp
+++ b/indra/newview/lltoastgroupnotifypanel.cpp
@@ -131,17 +131,23 @@ LLToastGroupNotifyPanel::LLToastGroupNotifyPanel(const LLNotificationPtr& notifi
BOOL hasInventory = payload["inventory_offer"].isDefined();
// attachment container (if any)
- LLPanel* pAttachContainer = getChild("attachment_container");
+ LLPanel* pAttachContainer = findChild("attachment_container");
// attachment container label (if any)
- LLTextBox* pAttachContainerLabel = getChild("attachment_label");
+ LLTextBox* pAttachContainerLabel = findChild("attachment_label");
//attachment text
LLTextBox * pAttachLink = getChild("attachment");
//attachment icon
LLIconCtrl* pAttachIcon = getChild("attachment_icon", TRUE);
//If attachment is empty let it be invisible and not take place at the panel
- pAttachContainer->setVisible(hasInventory);
- pAttachContainerLabel->setVisible(hasInventory);
+ if (pAttachContainer)
+ {
+ pAttachContainer->setVisible(hasInventory);
+ }
+ if (pAttachContainerLabel)
+ {
+ pAttachContainerLabel->setVisible(hasInventory);
+ }
pAttachLink->setVisible(hasInventory);
pAttachIcon->setVisible(hasInventory);
if (hasInventory) {
@@ -260,7 +266,7 @@ F32 LLToastGroupNotifyPanel::getCurrentTransparency()
{
if (gSavedSettings.getBOOL("FSGroupNotifyNoTransparency"))
{
- return 1.0;
+ return 1.0f;
}
else
{
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
index e773ed8c41..52b885f3e1 100755
--- a/indra/newview/lltoastimpanel.cpp
+++ b/indra/newview/lltoastimpanel.cpp
@@ -40,6 +40,8 @@
#include "llviewerchat.h"
#include "llviewercontrol.h"
+#include "fscommon.h"
+
const S32 LLToastIMPanel::DEFAULT_MESSAGE_MAX_LINE_COUNT = 6;
//--------------------------------------------------------------------------
@@ -75,8 +77,11 @@ LLToastIMPanel::LLToastIMPanel(LLToastIMPanel::Params &p) : LLToastPanel(p.notif
}
//Handle IRC styled /me messages.
- std::string prefix = p.message.substr(0, 4);
- if (prefix == "/me " || prefix == "/me'")
+ // Consolidate IRC /me prefix checks
+ //std::string prefix = p.message.substr(0, 4);
+ //if (prefix == "/me " || prefix == "/me'")
+ if (is_irc_me_prefix(p.message))
+ //
{
//style_params.font.style = "UNDERLINE";
mMessage->clear();
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 074963cacc..ccc80a4a38 100755
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -81,6 +81,8 @@
// Firestorm inclues
#include "fsfloatercontacts.h"
+#include "fsfloaterim.h"
+#include "fsfloaternearbychat.h"
#include "fsfloaterposestand.h"
#include "fsfloaterteleporthistory.h"
#include "fslslbridge.h"
@@ -810,6 +812,44 @@ void handleKeyboardLayoutChanged(const LLSD& newvalue)
}
//
+// Global online status toggle
+void handleGlobalOnlineStatusChanged(const LLSD& newvalue)
+{
+ bool visible = newvalue.asBoolean();
+
+ LLAvatarTracker::buddy_map_t all_buddies;
+ LLAvatarTracker::instance().copyBuddyList(all_buddies);
+
+ LLAvatarTracker::buddy_map_t::const_iterator buddy_it = all_buddies.begin();
+ for (; buddy_it != all_buddies.end(); ++buddy_it)
+ {
+ LLUUID buddy_id = buddy_it->first;
+ const LLRelationship* relation = LLAvatarTracker::instance().getBuddyInfo(buddy_id);
+ if (relation == NULL)
+ {
+ // Lets have a warning log message instead of having a crash. EXT-4947.
+ LL_WARNS() << "Trying to modify rights for non-friend avatar. Skipped." << LL_ENDL;
+ return;
+ }
+
+ S32 cur_rights = relation->getRightsGrantedTo();
+ S32 new_rights = 0;
+ if (visible)
+ {
+ new_rights = LLRelationship::GRANT_ONLINE_STATUS + (cur_rights & LLRelationship::GRANT_MAP_LOCATION) + (cur_rights & LLRelationship::GRANT_MODIFY_OBJECTS);
+ }
+ else
+ {
+ new_rights = (cur_rights & LLRelationship::GRANT_MAP_LOCATION) + (cur_rights & LLRelationship::GRANT_MODIFY_OBJECTS);
+ }
+
+ LLAvatarPropertiesProcessor::getInstance()->sendFriendRights(buddy_id, new_rights);
+ }
+
+ LLNotificationsUtil::add("GlobalOnlineStatusToggle");
+}
+//
+
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
@@ -1004,7 +1044,17 @@ void settings_setup_listeners()
gSavedSettings.getControl("FSUseAzertyKeyboardLayout")->getCommitSignal()->connect(boost::bind(&handleKeyboardLayoutChanged, _2));
+ // [FS communication UI]
+ gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
+ gSavedSettings.getControl("PlainTextChatHistory")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
+ gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterIM::processChatHistoryStyleUpdate, _2));
+ gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&FSFloaterNearbyChat::processChatHistoryStyleUpdate, _2));
+ gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged));
+ // [FS communication UI]
+
gSavedSettings.getControl(RLV_SETTING_MAIN)->getSignal()->connect(boost::bind(&RlvSettings::onChangedSettingMain, _2));
+
+ gSavedPerAccountSettings.getControl("GlobalOnlineStatusToggle")->getSignal()->connect(boost::bind(&handleGlobalOnlineStatusChanged, _2));
}
#if TEST_CACHED_CONTROL
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index cc758157de..ee8f3ea668 100755
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -325,7 +325,17 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
- LLFloaterReg::add("notification_well_window", "floater_notifications_tabbed.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
+ // Optional legacy notification well
+ //LLFloaterReg::add("notification_well_window", "floater_notifications_tabbed.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
+ if (!gSavedSettings.getBOOL("FSInternalLegacyNotificationWell"))
+ {
+ LLFloaterReg::add("notification_well_window", "floater_notifications_tabbed.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
+ }
+ else
+ {
+ LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
+ }
+ //
LLFloaterReg::add("object_weights", "floater_object_weights.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build);
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ed24522bc9..86e0487b55 100755
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -148,6 +148,7 @@
#include "fsfloatercontacts.h" // Display group list in contacts floater
#include "fspose.h" // FIRE-4345: Undeform
#include "fswsassetblacklist.h"
+#include "lfsimfeaturehandler.h"
#include "llavatarpropertiesprocessor.h" // ## Zi: Texture Refresh
#include "llsdserialize.h"
#include "lltexturecache.h" // ## Zi: Texture Refresh
@@ -830,16 +831,16 @@ class LLAdvancedToggleHUDInfo : public view_listener_t
}
else if ("badge" == info_type)
{
- reportToNearbyChat("Hippos!");
+ report_to_nearby_chat("Hippos!");
}
else if ("cookies" == info_type)
{
- reportToNearbyChat("Cookies!");
+ report_to_nearby_chat("Cookies!");
}
//
else if ("motd" == info_type)
{
- reportToNearbyChat(gAgent.mMOTD);
+ report_to_nearby_chat(gAgent.mMOTD);
}
//
return true;
@@ -4448,11 +4449,11 @@ class FSSelfToggleMoveLock : public view_listener_t
gSavedPerAccountSettings.setBOOL("UseMoveLock", new_value);
if (new_value)
{
- reportToNearbyChat(LLTrans::getString("MovelockEnabling"));
+ report_to_nearby_chat(LLTrans::getString("MovelockEnabling"));
}
else
{
- reportToNearbyChat(LLTrans::getString("MovelockDisabling"));
+ report_to_nearby_chat(LLTrans::getString("MovelockDisabling"));
}
}
#ifdef OPENSIM
@@ -8748,7 +8749,7 @@ void handle_selected_texture_info(void*)
//LLSD args;
//args["MESSAGE"] = msg;
//LLNotificationsUtil::add("SystemMessage", args);
- reportToNearbyChat(msg);
+ report_to_nearby_chat(msg);
//
}
}
@@ -8877,7 +8878,28 @@ class LLCheckControl : public view_listener_t
}
};
-// Reset to default control
+// Control enhancements
+class LLTogglePerAccountControl : public view_listener_t
+{
+ bool handleEvent(const LLSD& userdata)
+ {
+ std::string control_name = userdata.asString();
+ BOOL checked = gSavedPerAccountSettings.getBOOL( control_name );
+ gSavedPerAccountSettings.setBOOL( control_name, !checked );
+ return true;
+ }
+};
+
+class LLCheckPerAccountControl : public view_listener_t
+{
+ bool handleEvent( const LLSD& userdata)
+ {
+ std::string callback_data = userdata.asString();
+ bool new_value = gSavedPerAccountSettings.getBOOL(callback_data);
+ return new_value;
+ }
+};
+
class FSResetControl : public view_listener_t
{
bool handleEvent( const LLSD& userdata)
@@ -8896,7 +8918,7 @@ class FSResetPerAccountControl : public view_listener_t
return true;
}
};
-// Reset to default control
+// Control enhancements
// not so generic
@@ -8964,13 +8986,13 @@ class LLAdvancedToggleDoubleClickTeleport: public view_listener_t
if (checked)
{
gSavedSettings.setBOOL("DoubleClickTeleport", FALSE);
- reportToNearbyChat(LLTrans::getString("DoubleClickTeleportDisabled"));
+ report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportDisabled"));
}
else
{
gSavedSettings.setBOOL("DoubleClickTeleport", TRUE);
gSavedSettings.setBOOL("DoubleClickAutoPilot", FALSE);
- reportToNearbyChat(LLTrans::getString("DoubleClickTeleportEnabled"));
+ report_to_nearby_chat(LLTrans::getString("DoubleClickTeleportEnabled"));
}
return true;
}
@@ -9365,7 +9387,7 @@ class FSDumpSimulatorFeaturesToChat : public view_listener_t
std::stringstream out_str;
region->getSimulatorFeatures(sim_features);
LLSDSerialize::toPrettyXML(sim_features, out_str);
- reportToNearbyChat(out_str.str());
+ report_to_nearby_chat(out_str.str());
}
return true;
}
@@ -9391,38 +9413,58 @@ class FSAddToContactSet : public view_listener_t
// Add to contact set
// Opensim menu item visibility control
-class LLGridCheck : public view_listener_t
+bool checkIsGrid(const LLSD& userdata)
{
- bool handleEvent(const LLSD& userdata)
+ std::string grid_type = userdata.asString();
+ if ("secondlife" == grid_type)
{
- std::string grid_type = userdata.asString();
- if ("secondlife" == grid_type)
- {
- return LLGridManager::getInstance()->isInSecondLife();
- }
+ return LLGridManager::getInstance()->isInSecondLife();
+ }
#ifdef OPENSIM
- else if ("opensim" == grid_type)
- {
- return LLGridManager::getInstance()->isInOpenSim();
- }
- else if ("aurorasim" == grid_type)
- {
- return LLGridManager::getInstance()->isInAuroraSim();
- }
+ else if ("opensim" == grid_type)
+ {
+ return LLGridManager::getInstance()->isInOpenSim();
+ }
+ else if ("aurorasim" == grid_type)
+ {
+ return LLGridManager::getInstance()->isInAuroraSim();
+ }
#else // !OPENSIM
- else if ("opensim" == grid_type || "aurorasim" == grid_type)
- {
- LL_DEBUGS("ViewerMenu") << grid_type << "is not a supported platform on Havok builds. Disabling item." << LL_ENDL;
- return false;
- }
+ else if ("opensim" == grid_type || "aurorasim" == grid_type)
+ {
+ LL_DEBUGS("ViewerMenu") << grid_type << "is not a supported platform on Havok builds. Disabling item." << LL_ENDL;
+ return false;
+ }
#endif // OPENSIM
+ else
+ {
+ LL_WARNS("ViewerMenu") << "Unhandled or bad on_visible gridcheck parameter! (" << grid_type << ")" << LL_ENDL;
+ }
+ return true;
+}
+
+bool isGridFeatureEnabled(const LLSD& userdata)
+{
+ if (LFSimFeatureHandler::instanceExists())
+ {
+ const std::string feature = userdata.asString();
+
+ if (feature == "avatar_picker")
+ {
+ return LFSimFeatureHandler::instance().hasAvatarPicker();
+ }
+ else if (feature == "destination_guide")
+ {
+ return LFSimFeatureHandler::instance().hasDestinationGuide();
+ }
else
{
- LL_WARNS("ViewerMenu") << "Unhandled or bad on_visible gridcheck parameter! (" << grid_type << ")" << LL_ENDL;
+ LL_WARNS("ViewerMenu") << "Unhandled or bad grid feature check parameter! (" << feature << ")" << LL_ENDL;
}
- return true;
}
-};
+
+ return false;
+}
//
class LLToolsSelectOnlyMyObjects : public view_listener_t
@@ -10773,7 +10815,8 @@ void initialize_menus()
// [FS communication UI]
//enable.add("Conversation.IsConversationLoggingAllowed", boost::bind(&LLFloaterIMContainer::isConversationLoggingAllowed));
- view_listener_t::addEnable(new LLGridCheck(), "GridCheck"); // Opensim menu item visibility control
+ enable.add("GridCheck", boost::bind(&checkIsGrid, _2)); // Opensim menu item visibility control
+ enable.add("GridFeatureCheck", boost::bind(&isGridFeatureEnabled, _2));
// Agent
commit.add("Agent.toggleFlying", boost::bind(&LLAgent::toggleFlying));
@@ -11262,10 +11305,12 @@ void initialize_menus()
view_listener_t::addMenu(new LLGoToObject(), "GoToObject");
commit.add("PayObject", boost::bind(&handle_give_money_dialog));
- // Reset to default control
+ // Control enhancements
+ view_listener_t::addMenu(new LLTogglePerAccountControl(), "TogglePerAccountControl");
+ view_listener_t::addMenu(new LLCheckPerAccountControl(), "CheckPerAccountControl");
view_listener_t::addMenu(new FSResetControl(), "ResetControl");
view_listener_t::addMenu(new FSResetPerAccountControl(), "ResetPerAccountControl");
- // Reset to default control
+ // Control enhancements
commit.add("Inventory.NewWindow", boost::bind(&LLFloaterInventory::showAgentInventory));
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index edeb03bc9d..cea46d7260 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -140,6 +140,7 @@
#include "fswsassetblacklist.h"
#include "llfloaterbump.h"
#include "llfloaterreg.h"
+#include "llfriendcard.h"
#include "llgiveinventory.h"
#include "lltexturefetch.h"
#include "rlvactions.h"
@@ -1129,6 +1130,17 @@ protected:
LL_DEBUGS("Inventory_Move") << "Found asset UUID: " << asset_uuid << LL_ENDL;
was_moved = true;
}
+ // We might end up here if LLFriendCardsManager tries to sync the friend cards at login
+ // and that might pop up the inventory window for extra annoyance -> silence this!
+ else if (added_item->getActualType() == LLAssetType::AT_CALLINGCARD)
+ {
+ if (LLFriendCardsManager::instance().isAvatarDataStored(added_item->getCreatorUUID()))
+ {
+ LL_DEBUGS("FriendCard") << "Skipping added calling card from friend cards sync: " << added_item->getCreatorUUID().asString() << LL_ENDL;
+ was_moved = true;
+ }
+ }
+ //
}
}
@@ -3611,8 +3623,11 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
args["slurl"] = location;
// Look for IRC-style emotes here so object name formatting is correct
- std::string prefix = message.substr(0, 4);
- if (prefix == "/me " || prefix == "/me'")
+ // Consolidate IRC /me prefix checks
+ //std::string prefix = message.substr(0, 4);
+ //if (prefix == "/me " || prefix == "/me'")
+ if (is_irc_me_prefix(message))
+ //
{
chat.mChatStyle = CHAT_STYLE_IRC;
}
@@ -4623,8 +4638,11 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
BOOL ircstyle = FALSE;
// Look for IRC-style emotes here so chatbubbles work
- std::string prefix = mesg.substr(0, 4);
- if (prefix == "/me " || prefix == "/me'")
+ // Consolidate IRC /me prefix checks
+ //std::string prefix = mesg.substr(0, 4);
+ //if (prefix == "/me " || prefix == "/me'")
+ if (is_irc_me_prefix(mesg))
+ //
{
ircstyle = TRUE;
}
@@ -6293,11 +6311,11 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
if (change_count > 0)
{
- reportToNearbyChat(formatString(increase_message, args));
+ report_to_nearby_chat(format_string(increase_message, args));
}
else if (change_count < 0)
{
- reportToNearbyChat(formatString(decrease_message, args));
+ report_to_nearby_chat(format_string(decrease_message, args));
}
}
}
@@ -7568,7 +7586,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
//
make_ui_sound("UISndRestart");
- reportToNearbyChat(LLTrans::getString("FSRegionRestartInLocalChat")); // FIRE-6307: Region restart notices in local chat
+ report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // FIRE-6307: Region restart notices in local chat
}
// FIRE-9858: Kill annoying "Autopilot canceled" toast
@@ -7793,7 +7811,7 @@ void process_alert_core(const std::string& message, BOOL modal)
}
make_ui_sound("UISndRestartOpenSim");
- reportToNearbyChat(LLTrans::getString("FSRegionRestartInLocalChat")); // FIRE-6307: Region restart notices in local chat
+ report_to_nearby_chat(LLTrans::getString("FSRegionRestartInLocalChat")); // FIRE-6307: Region restart notices in local chat
return;
}
//
@@ -7958,7 +7976,7 @@ void process_mean_collision_alert_message(LLMessageSystem *msgsystem, void **use
action = LLTrans::getString("Collision_UnknownType", args);
return;
}
- reportToNearbyChat(action);
+ report_to_nearby_chat(action);
}
// Nearby Chat Collision Messages
// Report Collision Messages to scripts
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 3181c26b4f..3111f54b61 100755
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -49,7 +49,7 @@
#include "lltrans.h"
#include "llvieweraudio.h"
-#include "fscommon.h" // For media filter reportToNearbyChat
+#include "fscommon.h" // For media filter report_to_nearby_chat
// Static Variables
@@ -926,7 +926,7 @@ void LLViewerParcelMedia::filterMediaUrl(LLParcel* parcel)
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentBlocked", format_args));
sMediaLastActionPlay = false;
}
else
@@ -1007,7 +1007,7 @@ void callback_media_alert2(const LLSD ¬ification, const LLSD &response, LLPar
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
LLViewerParcelMedia::sCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@@ -1024,7 +1024,7 @@ void callback_media_alert2(const LLSD ¬ification, const LLSD &response, LLPar
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
}
else if ((option == 2) && allow) // Whitelist URL
{
@@ -1035,7 +1035,7 @@ void callback_media_alert2(const LLSD ¬ification, const LLSD &response, LLPar
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysAllowed", format_args));
LLViewerParcelMedia::sCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@@ -1052,7 +1052,7 @@ void callback_media_alert2(const LLSD ¬ification, const LLSD &response, LLPar
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentUrlAlwaysBlocked", format_args));
}
// We've dealt with the alert, so mark it as inactive.
@@ -1132,7 +1132,7 @@ void callback_media_alert_single(const LLSD ¬ification, const LLSD &response,
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysBlocked", format_args));
}
else if (option == 3) // Whitelist domain
{
@@ -1143,7 +1143,7 @@ void callback_media_alert_single(const LLSD ¬ification, const LLSD &response,
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterMediaContentDomainAlwaysAllowed", format_args));
LLViewerParcelMedia::sCurrentMedia = *parcel;
if (parcel->getName() == currentparcel->getName())
{
@@ -1347,7 +1347,7 @@ void LLViewerParcelMedia::filterAudioUrl(std::string media_url)
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentBlocked", format_args));
LLViewerAudio::getInstance()->stopInternetStreamWithAutoFade();
sAudioLastActionPlay = false;
}
@@ -1430,7 +1430,7 @@ void callback_audio_alert2(const LLSD ¬ification, const LLSD &response, std::
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = media_url;
@@ -1447,7 +1447,7 @@ void callback_audio_alert2(const LLSD ¬ification, const LLSD &response, std::
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = "";
@@ -1464,7 +1464,7 @@ void callback_audio_alert2(const LLSD ¬ification, const LLSD &response, std::
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysAllowed", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = media_url;
@@ -1481,7 +1481,7 @@ void callback_audio_alert2(const LLSD ¬ification, const LLSD &response, std::
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentUrlAlwaysBlocked", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = "";
@@ -1567,7 +1567,7 @@ void callback_audio_alert_single(const LLSD ¬ification, const LLSD &response,
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysAllowed", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = media_url;
@@ -1584,7 +1584,7 @@ void callback_audio_alert_single(const LLSD ¬ification, const LLSD &response,
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterAudioContentDomainAlwaysBlocked", format_args));
if (gAudiop != NULL)
{
LLViewerParcelMedia::sCurrentMusic = "";
@@ -1775,7 +1775,7 @@ void LLViewerParcelMedia::filterMOAPUrl(LLMediaDataClientObject *object, LLObjec
{
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterSharedMediaContentBlocked", domain));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterSharedMediaContentBlocked", domain));
sAudioLastActionPlay = false;
}
else
@@ -1849,7 +1849,7 @@ void callback_MOAP_alert2(const LLSD ¬ification, const LLSD &response, LLMedi
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterSharedMediaContentDomainAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterSharedMediaContentDomainAlwaysAllowed", format_args));
nav_object->doNavigate(object, texture_index, media_url);
LLViewerParcelMedia::sCurrentMOAP = media_url;
LLViewerParcelMedia::sMOAPLastActionPlay = true;
@@ -1863,7 +1863,7 @@ void callback_MOAP_alert2(const LLSD ¬ification, const LLSD &response, LLMedi
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[DOMAIN]"] = domain;
- reportToNearbyChat(LLTrans::getString("MediaFilterSharedMediaContentDomainAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterSharedMediaContentDomainAlwaysBlocked", format_args));
LLViewerParcelMedia::sCurrentMOAP = "";
LLViewerParcelMedia::sMOAPLastActionPlay = false;
}
@@ -1876,7 +1876,7 @@ void callback_MOAP_alert2(const LLSD ¬ification, const LLSD &response, LLMedi
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterSharedMediaContentUrlAlwaysAllowed", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterSharedMediaContentUrlAlwaysAllowed", format_args));
nav_object->doNavigate(object, texture_index, media_url);
LLViewerParcelMedia::sCurrentMOAP = media_url;
LLViewerParcelMedia::sMOAPLastActionPlay = true;
@@ -1890,7 +1890,7 @@ void callback_MOAP_alert2(const LLSD ¬ification, const LLSD &response, LLMedi
LLViewerParcelMedia::saveDomainFilterList();
LLStringUtil::format_map_t format_args;
format_args["[MEDIAURL]"] = media_url;
- reportToNearbyChat(LLTrans::getString("MediaFilterSharedMediaContentUrlAlwaysBlocked", format_args));
+ report_to_nearby_chat(LLTrans::getString("MediaFilterSharedMediaContentUrlAlwaysBlocked", format_args));
LLViewerParcelMedia::sCurrentMOAP = "";
LLViewerParcelMedia::sMOAPLastActionPlay = false;
}
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index 56b9473a77..4390c95107 100755
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -68,6 +68,7 @@
#include "llweb.h"
#include "llvieweraudio.h"
#include "kcwlinterface.h"
+#include "llviewernetwork.h"
const F32 PARCEL_COLLISION_DRAW_SECS = 1.f;
@@ -1661,9 +1662,6 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
instance->mTeleportFinishedSignal(instance->mTeleportInProgressPosition, false);
}
}
-
- //KC: check for parcel changes for WL settings
- KCWindlightInterface::instance().ParcelChange();
}
else if (local_id == parcel_mgr.mAgentParcel->getLocalID())
{
@@ -1744,7 +1742,21 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use
}
// Request access list information for this land
+ // FIRE-17280: Requesting Experience access allow & block list breaks OpenSim
+ //parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_ALLOW_EXPERIENCE | AL_BLOCK_EXPERIENCE);
+#if OPENSIM
+ if (LLGridManager::instance().isInSecondLife())
+ {
+ parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_ALLOW_EXPERIENCE | AL_BLOCK_EXPERIENCE);
+ }
+ else
+ {
+ parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN);
+ }
+#else
parcel_mgr.sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_ALLOW_EXPERIENCE | AL_BLOCK_EXPERIENCE);
+#endif
+ //
#include "llviewermenu.h"
+#include "lfsimfeaturehandler.h"
#ifdef LL_WINDOWS
#pragma warning(disable:4355)
@@ -1977,7 +1978,7 @@ const LLViewerRegion::tex_matrix_t& LLViewerRegion::getWorldMapTiles() const
for (U32 x = 0; x != totalX; ++x)
for (U32 y = 0; y != totalY; ++y)
{
- const std::string map_url = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-1-%d-%d-objects.jpg", gridX + x, gridY + y);
+ const std::string map_url = LFSimFeatureHandler::instance().mapServerURL() + llformat("map-1-%d-%d-objects.jpg", gridX + x, gridY + y);
LLPointer tex(LLViewerTextureManager::getFetchedTextureFromUrl(map_url, FTT_MAP_TILE, TRUE,
LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
mWorldMapTiles.push_back(tex);
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 016147cf98..b2206db80b 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -4775,7 +4775,7 @@ BOOL LLViewerWindow::saveImageNumbered(LLImageFormatted *image, bool force_picke
{
LLStringUtil::format_map_t args;
args["FILENAME"] = filepath;
- reportToNearbyChat(LLTrans::getString("SnapshotSavedToDisk", args));
+ report_to_nearby_chat(LLTrans::getString("SnapshotSavedToDisk", args));
}
//
return image->save(filepath);
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index c39d7e5980..88e7e07949 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -6330,19 +6330,13 @@ LLViewerJointAttachment* LLVOAvatar::getTargetAttachmentPoint(LLViewerObject* vi
if (!attachment)
{
- if(attachmentID != 127 && !((attachmentID > 40) && (attachmentID <= 68)))
+ if(attachmentID != 127)
{
LL_WARNS() << "Object attachment point invalid: " << attachmentID
<< " trying to use 1 (chest)"
<< LL_ENDL;
}
-// attachment = get_if_there(mAttachmentPoints, 1, (LLViewerJointAttachment*)NULL); // Arbitrary using 1 (chest)
-// [SL:KB] - Patch: Appearance-LegacyMultiAttachment | Checked: 2010-08-28 (Catznip-2.6.0a) | Added: Catznip-2.1.2a
- S32 idxAttachPt = 1;
- if ( (!isSelf()) && (gSavedSettings.getBOOL("LegacyMultiAttachmentSupport")) && (attachmentID > 40) && (attachmentID <= 68) )
- idxAttachPt = attachmentID - 38;
- attachment = get_if_there(mAttachmentPoints, idxAttachPt, (LLViewerJointAttachment*)NULL);
-// [/SL:KB]
+ attachment = get_if_there(mAttachmentPoints, 1, (LLViewerJointAttachment*)NULL); // Arbitrary using 1 (chest)
if (attachment)
{
LL_WARNS() << "Object attachment point invalid: " << attachmentID
diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp
index 6d3ec0c947..f835abcf4a 100755
--- a/indra/newview/llworldmipmap.cpp
+++ b/indra/newview/llworldmipmap.cpp
@@ -189,19 +189,10 @@ LLPointer LLWorldMipmap::getObjectsTile(U32 grid_x, U32
LLPointer LLWorldMipmap::loadObjectsTile(U32 grid_x, U32 grid_y, S32 level)
{
// Get the grid coordinates
-// HG Maps
-#ifdef OPENSIM
- std::string hg_map;
- if (LLGridManager::getInstance()->isInOpenSim())
- {
- hg_map = LFSimFeatureHandler::instance().mapServerURL();
- }
- std::string imageurl = hg_map.empty() ? gSavedSettings.getString("CurrentMapServerURL") : hg_map;
- imageurl.append(llformat("map-%d-%d-%d-objects.jpg", level, grid_x, grid_y));
-#else // !OPENSIM
- std::string imageurl = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-%d-%d-%d-objects.jpg", level, grid_x, grid_y);
-#endif // OPENSIM
-//
+ // HG Maps
+ //std::string imageurl = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-%d-%d-%d-objects.jpg", level, grid_x, grid_y);
+ std::string imageurl = LFSimFeatureHandler::instance().mapServerURL() + llformat("map-%d-%d-%d-objects.jpg", level, grid_x, grid_y);
+ //
// DO NOT COMMIT!! DEBUG ONLY!!!
// Use a local jpeg for every tile to test map speed without S3 access
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
index ab970ccd04..b37b57687c 100755
--- a/indra/newview/llxmlrpctransaction.cpp
+++ b/indra/newview/llxmlrpctransaction.cpp
@@ -298,18 +298,6 @@ CURLcode LLXMLRPCTransaction::Impl::_sslCtxFunction(CURL * curl, void *sslctx, v
SSL_CTX_set_cert_verify_callback(ctx, _sslCertVerifyCallback, param);
// the calls are void
-
- // FIRE-11406
- // Some server at LL don't like it at all when curl/openssl try to speak TLSv1.2 to them, instead
- // of renegotiating to SSLv3 they clamp up and don't talk to us at all anywmore, not even dropping the connection.
- // This then leads to unfun timeouts and failed transactions.
-
-#ifdef SSL_TXT_TLSV1_2
- SSL_CTX_set_options( ctx, SSL_OP_ALL | SSL_OP_NO_TLSv1_2 );
-#endif
-
- //
-
return CURLE_OK;
}
diff --git a/indra/newview/qtoolalign.cpp b/indra/newview/qtoolalign.cpp
index e7805858aa..4c292eeed2 100644
--- a/indra/newview/qtoolalign.cpp
+++ b/indra/newview/qtoolalign.cpp
@@ -429,11 +429,11 @@ void QToolAlign::align()
{
if(AlignThread::sInstance)
{
- reportToNearbyChat(LLTrans::getString("qtool_still_busy"));
+ report_to_nearby_chat(LLTrans::getString("qtool_still_busy"));
}
else
{
- reportToNearbyChat(LLTrans::getString("qtool_busy"));
+ report_to_nearby_chat(LLTrans::getString("qtool_busy"));
AlignThread::sInstance = new AlignThread();
AlignThread::sInstance->start();
}
@@ -458,7 +458,7 @@ public:
delete AlignThread::sInstance;
AlignThread::sInstance = NULL;
LLSelectMgr::getInstance()->sendMultipleUpdate(UPD_POSITION);
- reportToNearbyChat(LLTrans::getString("qtool_done"));
+ report_to_nearby_chat(LLTrans::getString("qtool_done"));
return TRUE;
}
};
diff --git a/indra/newview/skins/ansastorm/xui/en/panel_toolbar_view.xml b/indra/newview/skins/ansastorm/xui/en/panel_toolbar_view.xml
index a87f701276..9988ad251a 100644
--- a/indra/newview/skins/ansastorm/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/ansastorm/xui/en/panel_toolbar_view.xml
@@ -224,15 +224,16 @@
parameter="fs_nearby_chat" />
-
+
Falscher Root-Joint-Name, "hip" verwenden.
+
+ [F] frm. [S] s. [FPS] FPS
+
Name:
@@ -117,8 +120,13 @@ Maximal erlaubt sind [MAX_LENGTH] Sekunden.
+
+ 300 frm. 30 s. 10 FPS
+
+
+
Handhaltung
@@ -177,9 +185,7 @@ Maximal erlaubt sind [MAX_LENGTH] Sekunden.
- Animationsdatei kann nicht gelesen werden.
-
-Wir empfehlen exportierte BVH-Dateien aus Poser 4.
+ Animationsdatei kann nicht gelesen werden. Wir empfehlen exportierte BVH-Dateien aus Poser 4.
diff --git a/indra/newview/skins/default/xui/de/floater_display_name.xml b/indra/newview/skins/default/xui/de/floater_display_name.xml
index c95fb2769f..46459fccbd 100755
--- a/indra/newview/skins/default/xui/de/floater_display_name.xml
+++ b/indra/newview/skins/default/xui/de/floater_display_name.xml
@@ -4,7 +4,7 @@
Der Anzeigename ist der Name, den Sie Ihrem Avatar geben. Sie können ihn einmal pro Woche ändern.
- Sie können Ihren Anzeigenamen erst wieder zu diesem Zeitpunkt ändern: [TIME].
+ Früheste Änderung möglich ab: [TIME].
Neuer Anzeigename:
diff --git a/indra/newview/skins/default/xui/de/floater_fs_im_session.xml b/indra/newview/skins/default/xui/de/floater_fs_im_session.xml
index b8c6929281..a8418b44ea 100644
--- a/indra/newview/skins/default/xui/de/floater_fs_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_fs_im_session.xml
@@ -42,6 +42,9 @@
+
+
+
@@ -54,6 +57,13 @@
Ungelesene Nachrichten: [NUM]
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/de/floater_fs_nearby_chat.xml b/indra/newview/skins/default/xui/de/floater_fs_nearby_chat.xml
index aedb27644f..0d3240ee6c 100644
--- a/indra/newview/skins/default/xui/de/floater_fs_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/de/floater_fs_nearby_chat.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/de/floater_select_key.xml b/indra/newview/skins/default/xui/de/floater_select_key.xml
index 8ab9db520a..fd71844122 100755
--- a/indra/newview/skins/default/xui/de/floater_select_key.xml
+++ b/indra/newview/skins/default/xui/de/floater_select_key.xml
@@ -1,5 +1,5 @@
-
+
Eine Taste drücken, um die Auslösetaste zum Sprechen festzulegen.
diff --git a/indra/newview/skins/default/xui/de/menu_fs_chat_options.xml b/indra/newview/skins/default/xui/de/menu_fs_chat_options.xml
new file mode 100644
index 0000000000..2e8d331d50
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_fs_chat_options.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
index 270cb6b83d..0e4d6e7b16 100644
--- a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends.xml
@@ -23,4 +23,5 @@
+
diff --git a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
index 083d75d89c..4a2e779f72 100644
--- a/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
+++ b/indra/newview/skins/default/xui/de/menu_fs_contacts_friends_multiselect.xml
@@ -14,4 +14,5 @@
+
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index dba20c19cb..b8933af722 100755
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -5125,4 +5125,8 @@ Welche Bezeichnung soll für die Region
Neue Auswahl kann nicht erstellt werden, da bereits die maximale Anzahl an Auswahlen erstellt wurde.
+
+ Abhängig von der Serverauslastung kann es einen Moment dauern, bis das Umschalten der Sichtbarkeit des Online-Status effektiv wird.
+
+
diff --git a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
index 4e9ec614e3..3220440e8f 100644
--- a/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/de/panel_fs_contacts_friends.xml
@@ -5,9 +5,9 @@
-
-
-
+
+
+
@@ -21,12 +21,12 @@
Freunde: [COUNT]
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index df4ae094b9..fd6a11a4a9 100755
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -1,7 +1,6 @@
-
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml
index b1532e73f5..7ecc52dc29 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_UI.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_UI.xml
@@ -58,6 +58,10 @@
(Erfordert Neustart)
+
+
+ (Erfordert Neustart)
+
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 228c9fcee3..dd6b99f20e 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -138,15 +138,17 @@
+
+
-
+
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
index d67cf4d277..b3a0e3be0a 100755
--- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
@@ -92,9 +92,10 @@
+
-
-
+
+
Standard
@@ -113,11 +114,11 @@
Meine Lautstärke:
-
+
Bitte warten
-
+
diff --git a/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml
index 453a92c5e5..ece291f491 100755
--- a/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml
@@ -2,7 +2,7 @@
Incorrect root joint name, use "hip".
+
+ [F] frm. [S] s. [FPS] FPS
+
+
+ 300 frm. 30 s. 10 FPS
+
+
+
Unable to read animation file.
We recommend BVH files exported from Poser 4.
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
index fd877adce5..5b7964ecc0 100755
--- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
@@ -33,7 +33,8 @@
left="10"
layout="topleft"
name="contains_text"
- width="276">
+ use_ellipses="true"
+ width="260">
<nolink>[NAME]</nolink> contains:
Contains:
diff --git a/indra/newview/skins/default/xui/en/floater_fs_im_session.xml b/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
index faad90623d..9b50e38036 100644
--- a/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
+++ b/indra/newview/skins/default/xui/en/floater_fs_im_session.xml
@@ -398,7 +398,31 @@
name="send_sysinfo_btn"
top="0"
width="24" />
-
+
+
+
+
+
-
+ name="send_chat"
+ label="Send"
+ tool_tip="Sends the IM" />
+
diff --git a/indra/newview/skins/default/xui/en/floater_fs_nearby_chat.xml b/indra/newview/skins/default/xui/en/floater_fs_nearby_chat.xml
index c6b2fff691..105bdd37b7 100644
--- a/indra/newview/skins/default/xui/en/floater_fs_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/en/floater_fs_nearby_chat.xml
@@ -105,6 +105,29 @@
image_unselected="Toolbar_Middle_Off"
tool_tip="Shows the muted chat in nearby chat transcript."
name="chat_history_muted_btn"/>
+
+
+
+ width="220">
Press a key to set your Speak button trigger.
+
+
+
-
+
-
-
+
diff --git a/indra/newview/skins/default/xui/en/widgets/notification_list_view.xml b/indra/newview/skins/default/xui/en/widgets/notification_list_view.xml
index 150225af27..abc9ae1306 100644
--- a/indra/newview/skins/default/xui/en/widgets/notification_list_view.xml
+++ b/indra/newview/skins/default/xui/en/widgets/notification_list_view.xml
@@ -6,13 +6,4 @@
keep_one_selected="false"
multi_select="false"
opaque="true">
-
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index 2b17db7839..e9aba2306b 100755
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -1,7 +1,6 @@
-
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
index 2f6a8a718f..1bdcc9cc81 100644
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -1,7 +1,6 @@
-
diff --git a/indra/newview/skins/default/xui/ja/panel_toolbar_view.xml b/indra/newview/skins/default/xui/ja/panel_toolbar_view.xml
index b9c8ea072f..dcf59a04a1 100644
--- a/indra/newview/skins/default/xui/ja/panel_toolbar_view.xml
+++ b/indra/newview/skins/default/xui/ja/panel_toolbar_view.xml
@@ -46,7 +46,6 @@
-
diff --git a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
index 9a7ef95b9d..3fc2e6cd90 100644
--- a/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
+++ b/indra/newview/skins/default/xui/pl/floater_animation_bvh_preview.xml
@@ -104,6 +104,9 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
Nieprawidłowa nazwa dla roota, użyj "hip".
+
+ [F] kl. [S] s. [FPS] FPS
+
Nazwa:
@@ -112,8 +115,13 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
-
-
+
+ 300 kl. 30 s. 10 FPS
+
+
+
+
+
Poz. ręki
@@ -170,8 +178,7 @@ Maksymalna długość pliku animacji wynosi [MAX_LENGTH] sekund.
- Nie można wczytać pliku animacji.
-Doradzamy eksport plików BVH z Poser 4.
+ Nie można wczytać pliku animacji. Doradzamy eksport plików BVH z Poser 4.
diff --git a/indra/newview/skins/default/xui/pl/floater_fs_im_session.xml b/indra/newview/skins/default/xui/pl/floater_fs_im_session.xml
index f615fbd70f..4b2fa57d5e 100644
--- a/indra/newview/skins/default/xui/pl/floater_fs_im_session.xml
+++ b/indra/newview/skins/default/xui/pl/floater_fs_im_session.xml
@@ -39,6 +39,9 @@
+
+
+
@@ -51,6 +54,13 @@
Nieprzeczytanych: [NUM]
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pl/floater_fs_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_fs_nearby_chat.xml
index c174660da2..6788cbb9a3 100644
--- a/indra/newview/skins/default/xui/pl/floater_fs_nearby_chat.xml
+++ b/indra/newview/skins/default/xui/pl/floater_fs_nearby_chat.xml
@@ -13,6 +13,9 @@
+
+
+
diff --git a/indra/newview/skins/default/xui/pl/floater_sys_well.xml b/indra/newview/skins/default/xui/pl/floater_sys_well.xml
index 165a9bae11..7e4368cc94 100755
--- a/indra/newview/skins/default/xui/pl/floater_sys_well.xml
+++ b/indra/newview/skins/default/xui/pl/floater_sys_well.xml
@@ -3,4 +3,7 @@
Rozmowy
+
+ Powiadomienia
+
diff --git a/indra/newview/skins/default/xui/pl/menu_fs_chat_options.xml b/indra/newview/skins/default/xui/pl/menu_fs_chat_options.xml
new file mode 100644
index 0000000000..c487991eb1
--- /dev/null
+++ b/indra/newview/skins/default/xui/pl/menu_fs_chat_options.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends.xml b/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends.xml
index 8451e37493..7e477dad43 100644
--- a/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends.xml
+++ b/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends.xml
@@ -23,4 +23,5 @@
+
diff --git a/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends_multiselect.xml
index 6c3fd7d83c..78870166b6 100644
--- a/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends_multiselect.xml
+++ b/indra/newview/skins/default/xui/pl/menu_fs_contacts_friends_multiselect.xml
@@ -14,4 +14,5 @@
+
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
index 01f473f94d..1f478a1e71 100755
--- a/indra/newview/skins/default/xui/pl/notifications.xml
+++ b/indra/newview/skins/default/xui/pl/notifications.xml
@@ -4776,4 +4776,8 @@ Czy chcesz autoryzować [APP_NAME] do ładowania zdjęć na Flickr?
Nie można utworzyć kolejnego Miejsca, ponieważ limit ich ilości został osiągnięty.
+
+ Ze względu na obciążenie serwera masowa zmiana widoczności online może zająć trochę czasu. Prosimy o cierpliwość.
+
+
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
index 602a69b601..a1d378a573 100755
--- a/indra/newview/skins/default/xui/pl/panel_people.xml
+++ b/indra/newview/skins/default/xui/pl/panel_people.xml
@@ -1,6 +1,5 @@
-
@@ -52,7 +51,7 @@ Chcesz spotkać ludzi? Spróbuj użyć [secondlife:///app/worldmap Mapy Świata]
-
+
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml b/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml
index f16103cee3..b12d8d80f6 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_UI.xml
@@ -56,6 +56,10 @@
(wymaga restartu)
+
+
+ (wymaga restartu)
+
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
index 8ea9f3803e..57c19c6c57 100755
--- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
@@ -14,7 +14,7 @@
-
+
@@ -132,12 +132,14 @@
+
+
diff --git a/indra/newview/skins/default/xui/ru/panel_people.xml b/indra/newview/skins/default/xui/ru/panel_people.xml
index e500e92167..5613ea7fef 100755
--- a/indra/newview/skins/default/xui/ru/panel_people.xml
+++ b/indra/newview/skins/default/xui/ru/panel_people.xml
@@ -1,6 +1,5 @@
-
diff --git a/indra/newview/skins/latency/colors.xml b/indra/newview/skins/latency/colors.xml
index 22adcaece8..63016932d4 100644
--- a/indra/newview/skins/latency/colors.xml
+++ b/indra/newview/skins/latency/colors.xml
@@ -188,7 +188,7 @@
+ reference="EmphasisColor_13" />
-
+
[DESC] [NUM]
diff --git a/indra/newview/skins/starlight/xui/en/panel_group_notify.xml b/indra/newview/skins/starlight/xui/en/panel_group_notify.xml
index a89c6fa488..bf25f77b40 100644
--- a/indra/newview/skins/starlight/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/starlight/xui/en/panel_group_notify.xml
@@ -100,4 +100,13 @@
right="-10"
name="btn_ok"
width="70" />
+
diff --git a/indra/newview/skins/starlight/xui/en/panel_toolbar_view.xml b/indra/newview/skins/starlight/xui/en/panel_toolbar_view.xml
index d266a71a9a..498f60e1ae 100644
--- a/indra/newview/skins/starlight/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/starlight/xui/en/panel_toolbar_view.xml
@@ -222,15 +222,16 @@
parameter="fs_nearby_chat" />
-
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/starlightcui/xui/en/panel_group_notify.xml b/indra/newview/skins/starlightcui/xui/en/panel_group_notify.xml
index a89c6fa488..bf25f77b40 100644
--- a/indra/newview/skins/starlightcui/xui/en/panel_group_notify.xml
+++ b/indra/newview/skins/starlightcui/xui/en/panel_group_notify.xml
@@ -100,4 +100,13 @@
right="-10"
name="btn_ok"
width="70" />
+
diff --git a/indra/newview/skins/starlightcui/xui/en/panel_toolbar_view.xml b/indra/newview/skins/starlightcui/xui/en/panel_toolbar_view.xml
index 9d65b56885..fda3bb16c0 100644
--- a/indra/newview/skins/starlightcui/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/starlightcui/xui/en/panel_toolbar_view.xml
@@ -222,15 +222,16 @@
parameter="fs_nearby_chat" />
-
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/de/panel_fs_contacts_friends.xml b/indra/newview/skins/vintage/xui/de/panel_fs_contacts_friends.xml
index a9fea4af49..e8c270daa3 100644
--- a/indra/newview/skins/vintage/xui/de/panel_fs_contacts_friends.xml
+++ b/indra/newview/skins/vintage/xui/de/panel_fs_contacts_friends.xml
@@ -5,11 +5,12 @@
-
-
-
-
-
+
+
+
+
+
+
-
diff --git a/indra/newview/skins/vintage/xui/en/floater_fs_im_container.xml b/indra/newview/skins/vintage/xui/en/floater_fs_im_container.xml
index 757c0d8e7e..115012da5a 100644
--- a/indra/newview/skins/vintage/xui/en/floater_fs_im_container.xml
+++ b/indra/newview/skins/vintage/xui/en/floater_fs_im_container.xml
@@ -1,7 +1,7 @@
-
diff --git a/indra/newview/skins/vintage/xui/en/floater_fs_im_session.xml b/indra/newview/skins/vintage/xui/en/floater_fs_im_session.xml
index 819e40048f..6aac377973 100644
--- a/indra/newview/skins/vintage/xui/en/floater_fs_im_session.xml
+++ b/indra/newview/skins/vintage/xui/en/floater_fs_im_session.xml
@@ -385,6 +385,29 @@
top="0"
width="24" />
+
+
+
+
-
+ name="send_chat"
+ label="Send"
+ tool_tip="Sends the IM" />
+
diff --git a/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml b/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml
index e91f68160b..15862150d8 100644
--- a/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml
+++ b/indra/newview/skins/vintage/xui/en/floater_fs_nearby_chat.xml
@@ -102,8 +102,29 @@
image_selected="PushButton_Selected_Press"
tool_tip="Shows the muted chat in nearby chat transcript."
name="chat_history_muted_btn">
-
-
+
+
+
+
diff --git a/indra/newview/skins/vintage/xui/en/floater_im_container.xml b/indra/newview/skins/vintage/xui/en/floater_im_container.xml
deleted file mode 100644
index 9fc3c59ae1..0000000000
--- a/indra/newview/skins/vintage/xui/en/floater_im_container.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
diff --git a/indra/newview/skins/vintage/xui/en/panel_people.xml b/indra/newview/skins/vintage/xui/en/panel_people.xml
index b3a699ff55..4ea0a2e85f 100644
--- a/indra/newview/skins/vintage/xui/en/panel_people.xml
+++ b/indra/newview/skins/vintage/xui/en/panel_people.xml
@@ -14,9 +14,6 @@
-
diff --git a/indra/newview/skins/vintage/xui/en/panel_toolbar_view.xml b/indra/newview/skins/vintage/xui/en/panel_toolbar_view.xml
index 424209b684..4da49e2a05 100644
--- a/indra/newview/skins/vintage/xui/en/panel_toolbar_view.xml
+++ b/indra/newview/skins/vintage/xui/en/panel_toolbar_view.xml
@@ -223,6 +223,7 @@
-
diff --git a/indra/newview/skins/vintage/xui/ja/panel_people.xml b/indra/newview/skins/vintage/xui/ja/panel_people.xml
index 0577d93678..0bcd79512f 100644
--- a/indra/newview/skins/vintage/xui/ja/panel_people.xml
+++ b/indra/newview/skins/vintage/xui/ja/panel_people.xml
@@ -4,7 +4,6 @@
-
diff --git a/indra/newview/skins/vintage/xui/pl/panel_people.xml b/indra/newview/skins/vintage/xui/pl/panel_people.xml
index 9eff4d646c..368c9a1004 100644
--- a/indra/newview/skins/vintage/xui/pl/panel_people.xml
+++ b/indra/newview/skins/vintage/xui/pl/panel_people.xml
@@ -1,6 +1,5 @@
-
diff --git a/indra/newview/skins/vintage/xui/ru/panel_people.xml b/indra/newview/skins/vintage/xui/ru/panel_people.xml
index 0f932662e5..71a4a4b5b7 100644
--- a/indra/newview/skins/vintage/xui/ru/panel_people.xml
+++ b/indra/newview/skins/vintage/xui/ru/panel_people.xml
@@ -1,6 +1,5 @@
-
diff --git a/indra/newview/streamtitledisplay.cpp b/indra/newview/streamtitledisplay.cpp
index 90995219a4..7c9210e904 100644
--- a/indra/newview/streamtitledisplay.cpp
+++ b/indra/newview/streamtitledisplay.cpp
@@ -87,7 +87,7 @@ void StreamTitleDisplay::checkMetadata()
if (ShowStreamMetadata > 1)
{
chat = LLTrans::getString("StreamtitleNowPlaying") + " " + chat;
- reportToNearbyChat(chat);
+ report_to_nearby_chat(chat);
}
else if (ShowStreamMetadata == 1
&& (mMetadata.has("TITLE") || mMetadata.has("ARTIST")))