summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rwxr-xr-xindra/newview/llinventoryfilter.cpp51
-rwxr-xr-xindra/newview/llinventoryfilter.h13
-rwxr-xr-xindra/newview/llinventorypanel.cpp5
-rwxr-xr-xindra/newview/llinventorypanel.h1
-rwxr-xr-xindra/newview/llpanelmaininventory.cpp43
-rw-r--r--indra/newview/llsyntaxid.cpp17
-rwxr-xr-xindra/newview/lltexturefetch.cpp3
-rwxr-xr-xindra/newview/llviewermessage.cpp140
-rwxr-xr-xindra/newview/llviewerregion.cpp4
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_inventory_view_finder.xml96
-rwxr-xr-xindra/newview/skins/default/xui/en/menu_inventory_gear_default.xml2
-rwxr-xr-xindra/newview/skins/default/xui/en/notifications.xml21
-rw-r--r--indra/newview/skins/default/xui/en/panel_tools_texture.xml3
-rwxr-xr-xindra/newview/skins/default/xui/en/teleport_strings.xml5
14 files changed, 296 insertions, 108 deletions
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index 000eee3317..0bbb4aeeff 100755
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -37,6 +37,7 @@
#include "llfolderview.h"
#include "llinventorybridge.h"
#include "llviewerfoldertype.h"
+#include "llradiogroup.h"
// linden library includes
#include "llclipboard.h"
@@ -51,6 +52,7 @@ LLInventoryFilter::FilterOps::FilterOps(const Params& p)
mMinDate(p.date_range.min_date),
mMaxDate(p.date_range.max_date),
mHoursAgo(p.hours_ago),
+ mDateSearchDirection(p.date_search_direction),
mShowFolderState(p.show_folder_state),
mPermissions(p.permissions),
mFilterTypes(p.types),
@@ -209,6 +211,7 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
{
const U16 HOURS_TO_SECONDS = 3600;
time_t earliest = time_corrected() - mFilterOps.mHoursAgo * HOURS_TO_SECONDS;
+
if (mFilterOps.mMinDate > time_min() && mFilterOps.mMinDate < earliest)
{
earliest = mFilterOps.mMinDate;
@@ -217,9 +220,19 @@ bool LLInventoryFilter::checkAgainstFilterType(const LLFolderViewModelItemInvent
{
earliest = 0;
}
- if (listener->getCreationDate() < earliest ||
- listener->getCreationDate() > mFilterOps.mMaxDate)
- return FALSE;
+
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection || isSinceLogoff())
+ {
+ if (listener->getCreationDate() < earliest ||
+ listener->getCreationDate() > mFilterOps.mMaxDate)
+ return FALSE;
+ }
+ else
+ {
+ if (listener->getCreationDate() > earliest ||
+ listener->getCreationDate() > mFilterOps.mMaxDate)
+ return FALSE;
+ }
}
////////////////////////////////////////////////////////////////////////////////
@@ -629,11 +642,22 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
bool is_increasing = hours > mFilterOps.mHoursAgo;
+ bool is_decreasing = hours < mFilterOps.mHoursAgo;
bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo && !isSinceLogoff();
// *NOTE: need to cache last filter time, in case filter goes stale
- BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
- BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+ BOOL less_restrictive;
+ BOOL more_restrictive;
+ if (FILTERDATEDIRECTION_NEWER == mFilterOps.mDateSearchDirection)
+ {
+ less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
+ more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+ }
+ else
+ {
+ less_restrictive = (are_date_limits_valid && ((is_decreasing && mFilterOps.mHoursAgo)) || !hours);
+ more_restrictive = (are_date_limits_valid && (!is_decreasing && hours) || is_increasing_from_zero);
+ }
mFilterOps.mHoursAgo = hours;
mFilterOps.mMinDate = time_min();
@@ -662,6 +686,20 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
}
}
+void LLInventoryFilter::setDateSearchDirection(U32 direction)
+{
+ if (direction != mFilterOps.mDateSearchDirection)
+ {
+ mFilterOps.mDateSearchDirection = direction;
+ setModified(FILTER_RESTART);
+ }
+}
+
+U32 LLInventoryFilter::getDateSearchDirection() const
+{
+ return mFilterOps.mDateSearchDirection;
+}
+
void LLInventoryFilter::setFilterLinks(U64 filter_links)
{
if (mFilterOps.mFilterLinks != filter_links)
@@ -926,6 +964,7 @@ LLInventoryFilter& LLInventoryFilter::operator=( const LLInventoryFilter& othe
setFilterObjectTypes(other.getFilterObjectTypes());
setDateRange(other.getMinDate(), other.getMaxDate());
setHoursAgo(other.getHoursAgo());
+ setDateSearchDirection(other.getDateSearchDirection());
setShowFolderState(other.getShowFolderState());
setFilterPermissions(other.getFilterPermissions());
setFilterSubString(other.getFilterSubString());
@@ -945,6 +984,7 @@ void LLInventoryFilter::toParams(Params& params) const
params.filter_ops.date_range.min_date = getMinDate();
params.filter_ops.date_range.max_date = getMaxDate();
params.filter_ops.hours_ago = getHoursAgo();
+ params.filter_ops.date_search_direction = getDateSearchDirection();
params.filter_ops.show_folder_state = getShowFolderState();
params.filter_ops.permissions = getFilterPermissions();
params.substring = getFilterSubString();
@@ -966,6 +1006,7 @@ void LLInventoryFilter::fromParams(const Params& params)
}
setDateRange(params.filter_ops.date_range.min_date, params.filter_ops.date_range.max_date);
setHoursAgo(params.filter_ops.hours_ago);
+ setDateSearchDirection(params.filter_ops.date_search_direction);
setShowFolderState(params.filter_ops.show_folder_state);
setFilterPermissions(params.filter_ops.permissions);
setFilterSubString(params.substring);
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
index ce516af0b9..0d3d3889cb 100755
--- a/indra/newview/llinventoryfilter.h
+++ b/indra/newview/llinventoryfilter.h
@@ -55,6 +55,12 @@ public:
FILTERTYPE_EMPTYFOLDERS = 0x1 << 5 // pass if folder is not a system folder to be hidden if
};
+ enum EFilterDateDirection
+ {
+ FILTERDATEDIRECTION_NEWER,
+ FILTERDATEDIRECTION_OLDER
+ };
+
enum EFilterLink
{
FILTERLINK_INCLUDE_LINKS, // show links too
@@ -94,7 +100,8 @@ public:
Optional<EFilterLink> links;
Optional<LLUUID> uuid;
Optional<DateRange> date_range;
- Optional<S32> hours_ago;
+ Optional<U32> hours_ago;
+ Optional<U32> date_search_direction;
Optional<EFolderShow> show_folder_state;
Optional<PermissionMask> permissions;
@@ -107,6 +114,7 @@ public:
uuid("uuid"),
date_range("date_range"),
hours_ago("hours_ago", 0),
+ date_search_direction("date_search_direction", FILTERDATEDIRECTION_NEWER),
show_folder_state("show_folder_state", SHOW_NON_EMPTY_FOLDERS),
permissions("permissions", PERM_NONE)
{}
@@ -124,6 +132,7 @@ public:
time_t mMinDate,
mMaxDate;
U32 mHoursAgo;
+ U32 mDateSearchDirection;
EFolderShow mShowFolderState;
PermissionMask mPermissions;
@@ -177,6 +186,8 @@ public:
void setHoursAgo(U32 hours);
U32 getHoursAgo() const;
+ void setDateSearchDirection(U32 direction);
+ U32 getDateSearchDirection() const;
void setFilterLinks(U64 filter_link);
U64 getFilterLinks() const;
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
index a4a85e2e8d..db5be2cef5 100755
--- a/indra/newview/llinventorypanel.cpp
+++ b/indra/newview/llinventorypanel.cpp
@@ -400,6 +400,11 @@ void LLInventoryPanel::setHoursAgo(U32 hours)
getFilter().setHoursAgo(hours);
}
+void LLInventoryPanel::setDateSearchDirection(U32 direction)
+{
+ getFilter().setDateSearchDirection(direction);
+}
+
void LLInventoryPanel::setFilterLinks(U64 filter_links)
{
getFilter().setFilterLinks(filter_links);
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
index 91c3efd8f0..a490dfce5d 100755
--- a/indra/newview/llinventorypanel.h
+++ b/indra/newview/llinventorypanel.h
@@ -173,6 +173,7 @@ public:
const std::string getFilterSubString();
void setSinceLogoff(BOOL sl);
void setHoursAgo(U32 hours);
+ void setDateSearchDirection(U32 direction);
BOOL getSinceLogoff();
void setFilterLinks(U64 filter_links);
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index b02298090a..6c8765c62d 100755
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -55,6 +55,7 @@
#include "llviewertexturelist.h"
#include "llsidepanelinventory.h"
#include "llfolderview.h"
+#include "llradiogroup.h"
const std::string FILTERS_FILENAME("filters.xml");
@@ -82,6 +83,7 @@ public:
void updateElementsFromFilter();
BOOL getCheckShowEmpty();
BOOL getCheckSinceLogoff();
+ U32 getDateSearchDirection();
static void onTimeAgo(LLUICtrl*, void *);
static void onCloseBtn(void* user_data);
@@ -700,6 +702,30 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
if ( self->mSpinSinceDays->get() || self->mSpinSinceHours->get() )
{
self->getChild<LLUICtrl>("check_since_logoff")->setValue(false);
+
+ U32 days = (U32)self->mSpinSinceDays->get();
+ U32 hours = (U32)self->mSpinSinceHours->get();
+ if (hours >= 24)
+ {
+ // Try to handle both cases of spinner clicking and text input in a sensible fashion as best as possible.
+ // There is no way to tell if someone has clicked the spinner to get to 24 or input 24 manually, so in
+ // this case add to days. Any value > 24 means they have input the hours manually, so do not add to the
+ // current day value.
+ if (24 == hours) // Got to 24 via spinner clicking or text input of 24
+ {
+ days = days + hours / 24;
+ }
+ else // Text input, so do not add to days
+ {
+ days = hours / 24;
+ }
+ hours = (U32)hours % 24;
+ self->mSpinSinceHours->setFocus(false);
+ self->mSpinSinceDays->setFocus(false);
+ self->mSpinSinceDays->set((F32)days);
+ self->mSpinSinceHours->set((F32)hours);
+ self->mSpinSinceHours->setFocus(true);
+ }
}
}
@@ -719,6 +745,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
std::string filter_string = mFilter->getFilterSubString();
LLInventoryFilter::EFolderShow show_folders = mFilter->getShowFolderState();
U32 hours = mFilter->getHoursAgo();
+ U32 date_search_direction = mFilter->getDateSearchDirection();
// update the ui elements
setTitle(mFilter->getName());
@@ -740,6 +767,7 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
getChild<LLUICtrl>("check_since_logoff")->setValue(mFilter->isSinceLogoff());
mSpinSinceHours->set((F32)(hours % 24));
mSpinSinceDays->set((F32)(hours / 24));
+ getChild<LLRadioGroup>("date_search_direction")->setSelectedIndex(date_search_direction);
}
void LLFloaterInventoryFinder::draw()
@@ -840,17 +868,23 @@ void LLFloaterInventoryFinder::draw()
}
U32 days = (U32)mSpinSinceDays->get();
U32 hours = (U32)mSpinSinceHours->get();
- if (hours > 24)
+ if (hours >= 24)
{
- days += hours / 24;
+ days = hours / 24;
hours = (U32)hours % 24;
+ // A UI element that has focus will not display a new value set to it
+ mSpinSinceHours->setFocus(false);
+ mSpinSinceDays->setFocus(false);
mSpinSinceDays->set((F32)days);
mSpinSinceHours->set((F32)hours);
+ mSpinSinceHours->setFocus(true);
}
hours += days * 24;
+
mPanelMainInventory->getPanel()->setHoursAgo(hours);
mPanelMainInventory->getPanel()->setSinceLogoff(getCheckSinceLogoff());
mPanelMainInventory->setFilterTextFromFilter();
+ mPanelMainInventory->getPanel()->setDateSearchDirection(getDateSearchDirection());
LLPanel::draw();
}
@@ -865,6 +899,11 @@ BOOL LLFloaterInventoryFinder::getCheckSinceLogoff()
return getChild<LLUICtrl>("check_since_logoff")->getValue();
}
+U32 LLFloaterInventoryFinder::getDateSearchDirection()
+{
+ return getChild<LLRadioGroup>("date_search_direction")->getSelectedIndex();
+}
+
void LLFloaterInventoryFinder::onCloseBtn(void* user_data)
{
LLFloaterInventoryFinder* finderp = (LLFloaterInventoryFinder*)user_data;
diff --git a/indra/newview/llsyntaxid.cpp b/indra/newview/llsyntaxid.cpp
index b1194dcd1b..a763d42a8d 100644
--- a/indra/newview/llsyntaxid.cpp
+++ b/indra/newview/llsyntaxid.cpp
@@ -47,23 +47,22 @@ public:
LL_DEBUGS("SyntaxLSL") << "Instantiating with file saving to: '" << filespec << "'" << LL_ENDL;
}
- virtual void errorWithContent(U32 status,
- const std::string& reason,
- const LLSD& content)
+ /* virtual */ void httpFailure()
{
- LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << status << "]: " << content << LL_ENDL;
+ LL_WARNS("SyntaxLSL") << "failed to fetch syntax file [status:" << getStatus() << "]: " << getContent() << LL_ENDL;
}
- virtual void result(const LLSD& content_ref)
+ /* virtual */ void httpSuccess()
{
// Continue only if a valid LLSD object was returned.
- if (content_ref.isMap())
+ const LLSD& content = getContent();
+ if (content.isMap())
{
- if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content_ref))
+ if (LLSyntaxIdLSL::getInstance()->isSupportedVersion(content))
{
- LLSyntaxIdLSL::getInstance()->setKeywordsXml(content_ref);
+ LLSyntaxIdLSL::getInstance()->setKeywordsXml(content);
- cacheFile(content_ref);
+ cacheFile(content);
LLSyntaxIdLSL::getInstance()->handleFileFetched(mFileSpec);
}
else
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 9ea46cab68..62b2f5f976 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1336,17 +1336,20 @@ bool LLTextureFetchWorker::doWork(S32 param)
LL_WARNS() << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
}
setUrl(http_url + "/?texture_id=" + mID.asString().c_str());
+ LL_DEBUGS("Texture") << "Texture URL " << mUrl << LL_ENDL;
mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
}
else
{
mCanUseHTTP = false ;
+ LL_DEBUGS("Texture") << "Texture not available via HTTP: no URL " << mUrl << LL_ENDL;
}
}
else
{
// This will happen if not logged in or if a region deoes not have HTTP Texture enabled
//LL_WARNS() << "Region not found for host: " << mHost << LL_ENDL;
+ LL_DEBUGS("Texture") << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
mCanUseHTTP = false;
}
}
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 9d5c3c4d4a..332d04a1f4 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -5747,83 +5747,101 @@ bool handle_special_notification(std::string notificationID, LLSD& llsdBlock)
}
// some of the server notifications need special handling. This is where we do that.
-bool handle_teleport_access_blocked(LLSD& llsdBlock)
+bool handle_teleport_access_blocked(LLSD& llsdBlock, const std::string & notificationID, const std::string & defaultMessage)
{
- std::string notificationID("TeleportEntryAccessBlocked");
U8 regionAccess = static_cast<U8>(llsdBlock["_region_access"].asInteger());
std::string regionMaturity = LLViewerRegion::accessToString(regionAccess);
LLStringUtil::toLower(regionMaturity);
llsdBlock["REGIONMATURITY"] = regionMaturity;
bool returnValue = false;
- LLNotificationPtr maturityLevelNotification;
- std::string notifySuffix = "_Notify";
- if (regionAccess == SIM_ACCESS_MATURE)
- {
- if (gAgent.isTeen())
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
- returnValue = true;
+ LLNotificationPtr tp_failure_notification;
+ std::string notifySuffix;
- notifySuffix = "_NotifyAdultsOnly";
- }
- else if (gAgent.prefersPG())
+ if (notificationID == std::string("TeleportEntryAccessBlocked"))
+ {
+ notifySuffix = "_Notify";
+ if (regionAccess == SIM_ACCESS_MATURE)
{
- if (gAgent.hasRestartableFailedTeleportRequest())
+ if (gAgent.isTeen())
{
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
returnValue = true;
+
+ notifySuffix = "_NotifyAdultsOnly";
+ }
+ else if (gAgent.prefersPG())
+ {
+ if (gAgent.hasRestartableFailedTeleportRequest())
+ {
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ returnValue = true;
+ }
+ else
+ {
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ returnValue = true;
+ }
}
else
{
gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
returnValue = true;
}
}
- else
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
- returnValue = true;
- }
- }
- else if (regionAccess == SIM_ACCESS_ADULT)
- {
- if (!gAgent.isAdult())
- {
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
- returnValue = true;
-
- notifySuffix = "_NotifyAdultsOnly";
- }
- else if (gAgent.prefersPG() || gAgent.prefersMature())
+ else if (regionAccess == SIM_ACCESS_ADULT)
{
- if (gAgent.hasRestartableFailedTeleportRequest())
+ if (!gAgent.isAdult())
{
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_AdultsOnlyContent", llsdBlock);
returnValue = true;
+
+ notifySuffix = "_NotifyAdultsOnly";
+ }
+ else if (gAgent.prefersPG() || gAgent.prefersMature())
+ {
+ if (gAgent.hasRestartableFailedTeleportRequest())
+ {
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_ChangeAndReTeleport", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_and_reteleport_callback);
+ returnValue = true;
+ }
+ else
+ {
+ gAgent.clearTeleportRequest();
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ returnValue = true;
+ }
}
else
{
gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_Change", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
+ tp_failure_notification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
returnValue = true;
}
}
- else
+ } // End of special handling for "TeleportEntryAccessBlocked"
+ else
+ { // Normal case, no message munging
+ gAgent.clearTeleportRequest();
+ if (LLNotifications::getInstance()->templateExists(notificationID))
{
- gAgent.clearTeleportRequest();
- maturityLevelNotification = LLNotificationsUtil::add(notificationID+"_PreferencesOutOfSync", llsdBlock, llsdBlock, handle_prompt_for_maturity_level_change_callback);
- returnValue = true;
+ tp_failure_notification = LLNotificationsUtil::add(notificationID, llsdBlock, llsdBlock);
}
+ else
+ {
+ llsdBlock["MESSAGE"] = defaultMessage;
+ tp_failure_notification = LLNotificationsUtil::add("GenericAlertOK", llsdBlock);
}
+ returnValue = true;
+ }
- if ((maturityLevelNotification == NULL) || maturityLevelNotification->isIgnored())
+ if ((tp_failure_notification == NULL) || tp_failure_notification->isIgnored())
{
- // Given a simple notification if no maturityLevelNotification is set or it is ignore
+ // Given a simple notification if no tp_failure_notification is set or it is ignore
LLNotificationsUtil::add(notificationID + notifySuffix, llsdBlock);
}
@@ -6039,8 +6057,8 @@ void process_alert_core(const std::string& message, BOOL modal)
std::string alert_name(message.substr(ALERT_PREFIX.length()));
if (!handle_special_alerts(alert_name))
{
- LLNotificationsUtil::add(alert_name);
- }
+ LLNotificationsUtil::add(alert_name);
+ }
}
else if (message.find(NOTIFY_PREFIX) == 0)
{
@@ -6062,10 +6080,10 @@ void process_alert_core(const std::string& message, BOOL modal)
LLFloaterRegionRestarting::close();
}
- std::string new_msg =LLNotifications::instance().getGlobalString(text);
- args["MESSAGE"] = new_msg;
- LLNotificationsUtil::add("SystemMessage", args);
- }
+ std::string new_msg =LLNotifications::instance().getGlobalString(text);
+ args["MESSAGE"] = new_msg;
+ LLNotificationsUtil::add("SystemMessage", args);
+ }
else if (modal)
{
LLSD args;
@@ -6648,8 +6666,8 @@ std::string formatted_time(const time_t& the_time)
void process_teleport_failed(LLMessageSystem *msg, void**)
{
- std::string reason;
- std::string big_reason;
+ std::string message_id; // Tag from server, like "RegionEntryAccessBlocked"
+ std::string big_reason; // Actual message to display
LLSD args;
// Let the interested parties know that teleport failed.
@@ -6659,16 +6677,16 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
if (msg->has(_PREHASH_AlertInfo) && msg->getSizeFast(_PREHASH_AlertInfo, _PREHASH_Message) > 0)
{
// Get the message ID
- msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, reason);
- big_reason = LLAgent::sTeleportErrorMessages[reason];
+ msg->getStringFast(_PREHASH_AlertInfo, _PREHASH_Message, message_id);
+ big_reason = LLAgent::sTeleportErrorMessages[message_id];
if ( big_reason.size() > 0 )
{ // Substitute verbose reason from the local map
args["REASON"] = big_reason;
}
else
{ // Nothing found in the map - use what the server returned in the original message block
- msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
- args["REASON"] = reason;
+ msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, big_reason);
+ args["REASON"] = big_reason;
}
LLSD llsd_block;
@@ -6684,7 +6702,7 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
else
{
// change notification name in this special case
- if (handle_teleport_access_blocked(llsd_block))
+ if (handle_teleport_access_blocked(llsd_block, message_id, args["REASON"]))
{
if( gAgent.getTeleportState() != LLAgent::TELEPORT_NONE )
{
@@ -6697,17 +6715,17 @@ void process_teleport_failed(LLMessageSystem *msg, void**)
}
else
- {
- msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, reason);
+ { // Extra message payload not found - use what the simulator sent
+ msg->getStringFast(_PREHASH_Info, _PREHASH_Reason, message_id);
- big_reason = LLAgent::sTeleportErrorMessages[reason];
+ big_reason = LLAgent::sTeleportErrorMessages[message_id];
if ( big_reason.size() > 0 )
{ // Substitute verbose reason from the local map
args["REASON"] = big_reason;
}
else
{ // Nothing found in the map - use what the server returned
- args["REASON"] = reason;
+ args["REASON"] = message_id;
}
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index cd5f64b9ca..11cbf3fc24 100755
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -285,8 +285,8 @@ private:
{
regionp->setCapability(iter->first, iter->second);
- LL_DEBUGS("AppInit", "Capabilities") << "got capability for "
- << iter->first << LL_ENDL;
+ LL_DEBUGS("AppInit", "Capabilities")
+ << "Capability '" << iter->first << "' is '" << iter->second << "'" << LL_ENDL;
/* HACK we're waiting for the ServerReleaseNotes */
if (iter->first == "ServerReleaseNotes" && regionp->getReleaseNotesRequested())
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
index c86ed595a7..17bc818cc1 100755
--- a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
+++ b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
@@ -2,7 +2,7 @@
<floater
legacy_header_height="18"
can_minimize="false"
- height="408"
+ height="440"
layout="topleft"
name="Inventory Finder"
help_topic="inventory_finder"
@@ -95,36 +95,36 @@
width="126" />
<icon
height="16"
- image_name="Inv_Mesh"
+ image_name="Inv_Notecard"
layout="topleft"
left="8"
mouse_opaque="true"
- name="icon_mesh"
- top="142"
+ name="icon_notecard"
+ top="122"
width="16" />
<check_box
height="16"
- label="Meshes"
+ label="Notecards"
layout="topleft"
left_pad="2"
- name="check_mesh"
+ name="check_notecard"
top_delta="0"
width="126" />
<icon
height="16"
- image_name="Inv_Notecard"
+ image_name="Inv_Mesh"
layout="topleft"
left="8"
mouse_opaque="true"
- name="icon_notecard"
- top="122"
+ name="icon_mesh"
+ top="142"
width="16" />
<check_box
height="16"
- label="Notecards"
+ label="Meshes"
layout="topleft"
left_pad="2"
- name="check_notecard"
+ name="check_mesh"
top_delta="0"
width="126" />
<icon
@@ -223,25 +223,33 @@
top="262"
width="100" />
<button
- follows="left|top"
height="20"
label="None"
label_selected="None"
- layout="topleft"
left_delta="0"
name="None"
- top_pad="4"
+ left_pad="10"
width="100" />
<check_box
height="16"
label="Always show folders"
layout="topleft"
- left_delta="0"
+ left="8"
name="check_show_empty"
- top_pad="4"
+ top_pad="6"
width="144" />
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="horiz_separator"
+ top_pad="8"
+ width="260"/>
<check_box
height="16"
+ top="324"
label="Since Logoff"
layout="topleft"
left_delta="0"
@@ -257,36 +265,74 @@
layout="topleft"
left_delta="0"
name="- OR -"
- top_delta="16"
+ top="342"
width="144">
- OR -
</text>
+ <radio_group
+ height="16"
+ layout="topleft"
+ name="date_search_direction"
+ top="360"
+ left="8"
+ width="270">
+ <radio_item
+ label="Newer than"
+ layout="topleft"
+ name="newer"
+ top_pad="6"
+ left="0" />
+ <radio_item
+ label="Older than"
+ layout="topleft"
+ name="older"
+ top_delta="0"
+ left="120" />
+ </radio_group>
<spinner
follows="left|top"
height="16"
increment="1"
initial_value="0"
- label="Hours Ago"
- label_width="64"
layout="topleft"
left_delta="0"
max_val="240000"
name="spin_hours_ago"
top_pad="4"
- width="144" />
+ width="64" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="3"
+ top_delta="4"
+ width="80">
+ Hours
+ </text>
<spinner
follows="left|top"
height="16"
increment="1"
initial_value="0"
- label="Days Ago"
- label_width="64"
layout="topleft"
- left_delta="0"
max_val="10000"
name="spin_days_ago"
top_pad="4"
- width="144" />
+ left="8"
+ width="64" />
+ <text
+ type="string"
+ length="1"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="3"
+ top_delta="4"
+ width="80">
+ Days
+ </text>
<button
follows="top|right"
height="20"
@@ -295,6 +341,6 @@
layout="topleft"
name="Close"
right="-6"
- top="382"
+ top="406"
width="76" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
index d2519a5aa4..06d0b849a3 100755
--- a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
@@ -63,7 +63,7 @@
<menu_item_separator
layout="topleft" />
<menu_item_call
- label="Show Filters"
+ label="Show Filters..."
layout="topleft"
name="show_filters">
<on_click
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 772d81c448..2c7dbc3c18 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -169,6 +169,16 @@ No tutorial is currently available.
<notification
icon="alertmodal.tga"
+ name="GenericAlertOK"
+ type="alertmodal">
+[MESSAGE]
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="BadInstallation"
type="alertmodal">
An error occurred while updating [APP_NAME]. Please [http://get.secondlife.com download the latest version] of the Viewer.
@@ -4631,6 +4641,17 @@ The region you're trying to visit contains [REGIONMATURITY] content, but your cu
<notification
icon="alertmodal.tga"
+ name="RegionTPSpecialUsageBlocked"
+ type="alertmodal">
+ <tag>fail</tag>
+ Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+ <usetemplate
+ name="okbutton"
+ yestext="OK"/>
+ </notification>
+
+ <notification
+ icon="alertmodal.tga"
name="PreferredMaturityChanged"
type="alertmodal">
You won't receive any more notifications that you're about to visit a region with [RATING] content. You may change your content preferences in the future by using Me &gt; Preferences &gt; General from the menu bar.
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
index 426c0c4915..cb6b2fafd8 100644
--- a/indra/newview/skins/default/xui/en/panel_tools_texture.xml
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -36,8 +36,9 @@
<color_swatch
can_apply_immediately="true"
follows="left|top"
- height="45"
+ height="22"
label=""
+ label_height="0"
layout="topleft"
left="10"
name="colorswatch"
diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml
index fdf41991cd..5a9a16d344 100755
--- a/indra/newview/skins/default/xui/en/teleport_strings.xml
+++ b/indra/newview/skins/default/xui/en/teleport_strings.xml
@@ -48,7 +48,10 @@ Go to &apos;Welcome Island Public&apos; to repeat the tutorial.
<message name="MustGetAgeRegion">
You must be age 18 or over to enter this region.
</message>
- </message_set>
+ <message name="RegionTPSpecialUsageBlocked">
+ Unable to enter region. '[REGION_NAME]' is a Skill Gaming Region, and you must meet certain criteria in order to enter. For details, please review the [http://wiki.secondlife.com/wiki/Linden_Lab_Official:Skill_Gaming_in_Second_Life Skill Gaming FAQ].
+ </message>
+ </message_set>
<message_set name="progress">
<message name="sending_dest">
Sending to destination.