summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/Info-SecondLife.plist2
-rw-r--r--indra/newview/app_settings/settings.xml10
-rw-r--r--indra/newview/llappearancemgr.cpp2
-rw-r--r--indra/newview/llappviewer.cpp205
-rw-r--r--indra/newview/llappviewer.h7
-rw-r--r--indra/newview/llfacebookconnect.cpp3
-rw-r--r--indra/newview/llfilteredwearablelist.cpp6
-rw-r--r--indra/newview/llflickrconnect.cpp3
-rw-r--r--indra/newview/llfloaterimagepreview.cpp2
-rw-r--r--indra/newview/llfloatermemleak.cpp7
-rw-r--r--indra/newview/llfloaterreporter.cpp13
-rw-r--r--indra/newview/llfloaterreporter.h1
-rw-r--r--indra/newview/llfloaterwebprofile.cpp6
-rw-r--r--indra/newview/llfloaterworldmap.cpp4
-rw-r--r--indra/newview/llfloaterworldmap.h2
-rw-r--r--indra/newview/llglsandbox.cpp2
-rw-r--r--indra/newview/llinventorybridge.cpp4
-rw-r--r--indra/newview/llmoveview.cpp10
-rw-r--r--indra/newview/lloutfitgallery.cpp11
-rw-r--r--indra/newview/lloutfitslist.cpp4
-rw-r--r--indra/newview/llpanelmarketplaceinboxinventory.cpp1
-rw-r--r--indra/newview/llpanelobject.cpp4
-rw-r--r--indra/newview/llpanelobjectinventory.cpp12
-rw-r--r--indra/newview/llpanelwearing.cpp33
-rw-r--r--indra/newview/llpanelwearing.h1
-rw-r--r--indra/newview/llphysicsmotion.cpp16
-rw-r--r--indra/newview/llpreviewscript.cpp10
-rw-r--r--indra/newview/lltexturecache.cpp38
-rw-r--r--indra/newview/lltexturefetch.cpp6
-rw-r--r--indra/newview/lltwitterconnect.cpp3
-rw-r--r--indra/newview/llviewermenu.cpp2
-rw-r--r--indra/newview/llviewertextureanim.cpp2
-rw-r--r--indra/newview/llviewerwindow.cpp10
-rw-r--r--indra/newview/llvoavatar.cpp4
-rw-r--r--indra/newview/llvovolume.cpp6
-rw-r--r--indra/newview/llwearableitemslist.cpp2
-rw-r--r--indra/newview/skins/default/xui/da/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/de/floater_tos.xml7
-rw-r--r--indra/newview/skins/default/xui/en/floater_snapshot.xml4
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml10
-rw-r--r--indra/newview/skins/default/xui/es/floater_tos.xml5
-rw-r--r--indra/newview/skins/default/xui/fr/floater_tos.xml3
-rw-r--r--indra/newview/skins/default/xui/it/floater_tos.xml5
-rw-r--r--indra/newview/skins/default/xui/ja/floater_tos.xml5
-rw-r--r--indra/newview/skins/default/xui/pl/floater_tos.xml4
-rw-r--r--indra/newview/skins/default/xui/pt/floater_tos.xml5
-rw-r--r--indra/newview/skins/default/xui/ru/floater_tos.xml5
-rw-r--r--indra/newview/skins/default/xui/tr/floater_tos.xml3
-rw-r--r--indra/newview/skins/default/xui/zh/floater_tos.xml5
49 files changed, 240 insertions, 279 deletions
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
index 8aabd6818b..af4cf26ac6 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -21,7 +21,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+ <string>${MACOSX_BUNDLE_LONG_VERSION_STRING}</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index dd07972249..3b518515cb 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -2369,7 +2369,7 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>DebugShowPrivateMem</key>
+ <key>DEPRECATED: DebugShowPrivateMem</key> <!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
<string>Show Private Mem Info</string>
@@ -6408,10 +6408,10 @@
<key>Value</key>
<real>600.0</real>
</map>
- <key>MemoryPrivatePoolEnabled</key>
+ <key>MemoryPrivatePoolEnabled</key> <!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
- <string>Enable the private memory pool management</string>
+ <string>DEPRECATED: Enable the private memory pool management</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@@ -6419,10 +6419,10 @@
<key>Value</key>
<integer>0</integer>
</map>
- <key>MemoryPrivatePoolSize</key>
+ <key>MemoryPrivatePoolSize</key> <!-- deprecated (see MAINT-8091) -->
<map>
<key>Comment</key>
- <string>Size of the private memory pool in MB (min. value is 256)</string>
+ <string>DEPRECATED: Size of the private memory pool in MB (min. value is 256)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 0fb811a386..c0f88ef704 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -1919,7 +1919,7 @@ bool LLAppearanceMgr::getCanReplaceCOF(const LLUUID& outfit_cat_id)
}
// Check whether it's the base outfit.
- if (outfit_cat_id.isNull() || outfit_cat_id == getBaseOutfitUUID())
+ if (outfit_cat_id.isNull())
{
return false;
}
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 464e216cf0..d9273dfcb5 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -353,6 +353,8 @@ BOOL gCrashOnStartup = FALSE;
BOOL gLLErrorActivated = FALSE;
BOOL gLogoutInProgress = FALSE;
+BOOL gSimulateMemLeak = FALSE;
+
////////////////////////////////////////////////////////////
// Internal globals... that should be removed.
static std::string gArgs;
@@ -797,7 +799,6 @@ bool LLAppViewer::init()
initMaxHeapSize() ;
LLCoros::instance().setStackSize(gSavedSettings.getS32("CoroutineStackSize"));
- LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled"), (U32)gSavedSettings.getU32("MemoryPrivatePoolSize")*1024*1024) ;
// write Google Breakpad minidump files to a per-run dump directory to avoid multiple viewer issues.
std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_DUMP, "");
mDumpPath = logdir;
@@ -1318,13 +1319,49 @@ LLTrace::BlockTimerStatHandle FTM_FRAME("Frame");
bool LLAppViewer::frame()
{
+ bool ret = false;
+
+ if (gSimulateMemLeak)
+ {
+ try
+ {
+ ret = doFrame();
+ }
+ catch (const LLContinueError&)
+ {
+ LOG_UNHANDLED_EXCEPTION("");
+ }
+ catch (std::bad_alloc)
+ {
+ LLMemory::logMemoryInfo(TRUE);
+ LLFloaterMemLeak* mem_leak_instance = LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
+ if (mem_leak_instance)
+ {
+ mem_leak_instance->stop();
+ }
+ LL_WARNS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL;
+ }
+ }
+ else
+ {
+ try
+ {
+ ret = doFrame();
+ }
+ catch (const LLContinueError&)
+ {
+ LOG_UNHANDLED_EXCEPTION("");
+ }
+ }
+
+ return ret;
+}
+
+bool LLAppViewer::doFrame()
+{
LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop"));
LLSD newFrame;
- //LLPrivateMemoryPoolTester::getInstance()->run(false) ;
- //LLPrivateMemoryPoolTester::getInstance()->run(true) ;
- //LLPrivateMemoryPoolTester::destroy() ;
-
LL_RECORD_BLOCK_TIME(FTM_FRAME);
LLTrace::BlockTimer::processTimes();
LLTrace::get_frame_recording().nextPeriod();
@@ -1338,7 +1375,6 @@ bool LLAppViewer::frame()
//check memory availability information
checkMemory() ;
- try
{
pingMainloopTimeout("Main:MiscNativeWindowEvents");
@@ -1362,12 +1398,15 @@ bool LLAppViewer::frame()
}
//memory leaking simulation
- LLFloaterMemLeak* mem_leak_instance =
- LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
- if(mem_leak_instance)
+ if (gSimulateMemLeak)
{
- mem_leak_instance->idle() ;
- }
+ LLFloaterMemLeak* mem_leak_instance =
+ LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
+ if (mem_leak_instance)
+ {
+ mem_leak_instance->idle();
+ }
+ }
// canonical per-frame event
mainloop.post(newFrame);
@@ -1542,60 +1581,13 @@ bool LLAppViewer::frame()
pingMainloopTimeout("Main:End");
}
}
- catch (const LLContinueError&)
- {
- LOG_UNHANDLED_EXCEPTION("");
- }
- catch(std::bad_alloc)
- {
- LLMemory::logMemoryInfo(TRUE) ;
-
- //stop memory leaking simulation
- LLFloaterMemLeak* mem_leak_instance =
- LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
- if(mem_leak_instance)
- {
- mem_leak_instance->stop() ;
- LL_WARNS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ;
- }
- else
- {
- //output possible call stacks to log file.
- LLError::LLCallStacks::print() ;
-
- LL_ERRS() << "Bad memory allocation in LLAppViewer::frame()!" << LL_ENDL ;
- }
- }
- catch (...)
- {
- CRASH_ON_UNHANDLED_EXCEPTION("");
- }
if (LLApp::isExiting())
{
// Save snapshot for next time, if we made it through initialization
if (STATE_STARTED == LLStartUp::getStartupState())
{
- try
- {
- saveFinalSnapshot();
- }
- catch(std::bad_alloc)
- {
- LL_WARNS() << "Bad memory allocation when saveFinalSnapshot() is called!" << LL_ENDL ;
-
- //stop memory leaking simulation
- LLFloaterMemLeak* mem_leak_instance =
- LLFloaterReg::findTypedInstance<LLFloaterMemLeak>("mem_leaking");
- if(mem_leak_instance)
- {
- mem_leak_instance->stop() ;
- }
- }
- catch (...)
- {
- CRASH_ON_UNHANDLED_EXCEPTION("saveFinalSnapshot()");
- }
+ saveFinalSnapshot();
}
delete gServicePump;
@@ -2078,9 +2070,6 @@ bool LLAppViewer::cleanup()
LLMainLoopRepeater::instance().stop();
- //release all private memory pools.
- LLPrivateMemoryPoolManager::destroyClass() ;
-
ll_close_fail_log();
LLError::LLCallStacks::cleanup();
@@ -3230,7 +3219,7 @@ LLSD LLAppViewer::getViewerInfo() const
return info;
}
-std::string LLAppViewer::getViewerInfoString() const
+std::string LLAppViewer::getViewerInfoString(bool default_string) const
{
std::ostringstream support;
@@ -3240,7 +3229,7 @@ std::string LLAppViewer::getViewerInfoString() const
LLStringUtil::format_map_t args;
// allow the "Release Notes" URL label to be localized
- args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes");
+ args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes", default_string);
for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap());
ii != iend; ++ii)
@@ -3250,7 +3239,7 @@ std::string LLAppViewer::getViewerInfoString() const
// Scalar value
if (ii->second.isUndefined())
{
- args[ii->first] = LLTrans::getString("none_text");
+ args[ii->first] = LLTrans::getString("none_text", default_string);
}
else
{
@@ -3269,101 +3258,37 @@ std::string LLAppViewer::getViewerInfoString() const
}
// Now build the various pieces
- support << LLTrans::getString("AboutHeader", args);
+ support << LLTrans::getString("AboutHeader", args, default_string);
if (info.has("BUILD_CONFIG"))
{
- support << "\n" << LLTrans::getString("BuildConfig", args);
+ support << "\n" << LLTrans::getString("BuildConfig", args, default_string);
}
if (info.has("REGION"))
{
- support << "\n\n" << LLTrans::getString("AboutPosition", args);
+ support << "\n\n" << LLTrans::getString("AboutPosition", args, default_string);
}
- support << "\n\n" << LLTrans::getString("AboutSystem", args);
+ support << "\n\n" << LLTrans::getString("AboutSystem", args, default_string);
support << "\n";
if (info.has("GRAPHICS_DRIVER_VERSION"))
{
- support << "\n" << LLTrans::getString("AboutDriver", args);
+ support << "\n" << LLTrans::getString("AboutDriver", args, default_string);
}
- support << "\n" << LLTrans::getString("AboutOGL", args);
- support << "\n\n" << LLTrans::getString("AboutSettings", args);
- support << "\n\n" << LLTrans::getString("AboutLibs", args);
+ support << "\n" << LLTrans::getString("AboutOGL", args, default_string);
+ support << "\n\n" << LLTrans::getString("AboutSettings", args, default_string);
+ support << "\n\n" << LLTrans::getString("AboutLibs", args, default_string);
if (info.has("COMPILER"))
{
- support << "\n" << LLTrans::getString("AboutCompiler", args);
+ support << "\n" << LLTrans::getString("AboutCompiler", args, default_string);
}
if (info.has("PACKETS_IN"))
{
- support << '\n' << LLTrans::getString("AboutTraffic", args);
+ support << '\n' << LLTrans::getString("AboutTraffic", args, default_string);
}
// SLT timestamp
LLSD substitution;
substitution["datetime"] = (S32)time(NULL);//(S32)time_corrected();
- support << "\n" << LLTrans::getString("AboutTime", substitution);
-
- return support.str();
-}
-
-std::string LLAppViewer::getShortViewerInfoString() const
-{
- std::ostringstream support;
- LLSD info(getViewerInfo());
-
- support << LLTrans::getString("APP_NAME") << " " << info["VIEWER_VERSION_STR"].asString();
- support << " (" << info["CHANNEL"].asString() << ")";
- if (info.has("BUILD_CONFIG"))
- {
- support << "\n" << "Build Configuration " << info["BUILD_CONFIG"].asString();
- }
- if (info.has("REGION"))
- {
- support << "\n\n" << "You are at " << ll_vector3_from_sd(info["POSITION_LOCAL"]) << " in " << info["REGION"].asString();
- support << " located at " << info["HOSTNAME"].asString() << " (" << info["HOSTIP"].asString() << ")";
- support << "\n" << "SLURL: " << info["SLURL"].asString();
- support << "\n" << "(Global coordinates " << ll_vector3_from_sd(info["POSITION"]) << ")";
- support << "\n" << info["SERVER_VERSION"].asString();
- }
-
- support << "\n\n" << "CPU: " << info["CPU"].asString();
- support << "\n" << "Memory: " << info["MEMORY_MB"].asString() << " MB";
- support << "\n" << "OS: " << info["OS_VERSION"].asString();
- support << "\n" << "Graphics Card: " << info["GRAPHICS_CARD"].asString() << " (" << info["GRAPHICS_CARD_VENDOR"].asString() << ")";
-
- if (info.has("GRAPHICS_DRIVER_VERSION"))
- {
- support << "\n" << "Windows Graphics Driver Version: " << info["GRAPHICS_DRIVER_VERSION"].asString();
- }
-
- support << "\n" << "OpenGL Version: " << info["OPENGL_VERSION"].asString();
-
- support << "\n\n" << "Window size:" << info["WINDOW_WIDTH"].asString() << "x" << info["WINDOW_HEIGHT"].asString();
- support << "\n" << "Language: " << LLUI::getLanguage();
- support << "\n" << "Font Size Adjustment: " << info["FONT_SIZE_ADJUSTMENT"].asString() << "pt";
- support << "\n" << "UI Scaling: " << info["UI_SCALE"].asString();
- support << "\n" << "Draw distance: " << info["DRAW_DISTANCE"].asString();
- support << "\n" << "Bandwidth: " << info["NET_BANDWITH"].asString() << "kbit/s";
- support << "\n" << "LOD factor: " << info["LOD_FACTOR"].asString();
- support << "\n" << "Render quality: " << info["RENDER_QUALITY"].asString() << " / 7";
- support << "\n" << "ALM: " << info["GPU_SHADERS"].asString();
- support << "\n" << "Texture memory: " << info["TEXTURE_MEMORY"].asString() << "MB";
- support << "\n" << "VFS (cache) creation time: " << info["VFS_TIME"].asString();
-
- support << "\n\n" << "J2C Decoder: " << info["J2C_VERSION"].asString();
- support << "\n" << "Audio Driver: " << info["AUDIO_DRIVER_VERSION"].asString();
- support << "\n" << "LLCEFLib/CEF: " << info["LLCEFLIB_VERSION"].asString();
- support << "\n" << "LibVLC: " << info["LIBVLC_VERSION"].asString();
- support << "\n" << "Voice Server: " << info["VOICE_VERSION"].asString();
-
- if (info.has("PACKETS_IN"))
- {
- support << "\n" << "Packets Lost: " << info["PACKETS_LOST"].asInteger() << "/" << info["PACKETS_IN"].asInteger();
- F32 packets_pct = info["PACKETS_PCT"].asReal();
- support << " (" << ll_round(packets_pct, 0.001f) << "%)";
- }
-
- LLSD substitution;
- substitution["datetime"] = (S32)time(NULL);
- support << "\n" << LLTrans::getString("AboutTime", substitution);
+ support << "\n" << LLTrans::getString("AboutTime", substitution, default_string);
return support.str();
}
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index 6eb45d2495..e607b4a994 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -99,8 +99,7 @@ public:
void setServerReleaseNotesURL(const std::string& url) { mServerReleaseNotesURL = url; }
LLSD getViewerInfo() const;
- std::string getViewerInfoString() const;
- std::string getShortViewerInfoString() const;
+ std::string getViewerInfoString(bool default_string = false) const;
// Report true if under the control of a debugger. A null-op default.
virtual bool beingDebugged() { return false; }
@@ -222,6 +221,8 @@ protected:
private:
+ bool doFrame();
+
void initMaxHeapSize();
bool initThreads(); // Initialize viewer threads, return false on failure.
bool initConfiguration(); // Initialize settings from the command line/config file.
@@ -396,4 +397,6 @@ extern LLUUID gBlackSquareID;
extern BOOL gRandomizeFramerate;
extern BOOL gPeriodicSlowFrame;
+extern BOOL gSimulateMemLeak;
+
#endif // LL_LLAPPVIEWER_H
diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp
index 1de4102dba..43b01fa2f1 100644
--- a/indra/newview/llfacebookconnect.cpp
+++ b/indra/newview/llfacebookconnect.cpp
@@ -503,13 +503,10 @@ LLFacebookConnect::LLFacebookConnect()
void LLFacebookConnect::openFacebookWeb(std::string url)
{
- // Open the URL in an internal browser window without navigation UI
LLFloaterWebContent::Params p;
p.url(url);
p.show_chrome(true);
- p.allow_address_entry(false);
p.allow_back_forward_navigation(false);
- p.trusted_content(true);
p.clean_browser(true);
LLFloater *floater = LLFloaterReg::showInstance("fbc_web", p);
//the internal web browser has a bug that prevents it from gaining focus unless a mouse event occurs first (it seems).
diff --git a/indra/newview/llfilteredwearablelist.cpp b/indra/newview/llfilteredwearablelist.cpp
index e67a6a2b77..2bfaa1e5bc 100644
--- a/indra/newview/llfilteredwearablelist.cpp
+++ b/indra/newview/llfilteredwearablelist.cpp
@@ -32,6 +32,7 @@
#include "llinventoryitemslist.h"
#include "llinventorymodel.h"
#include "llviewerinventory.h"
+#include "lltrans.h"
LLFilteredWearableListManager::LLFilteredWearableListManager(LLInventoryItemsList* list, LLInventoryCollectFunctor* collector)
@@ -118,6 +119,11 @@ void LLFilteredWearableListManager::populateList()
// Probably will also need to get items from Library (waiting for reply in EXT-6724).
+ if (item_array.empty() && gInventory.isCategoryComplete(gInventory.getRootFolderID()))
+ {
+ mWearableList->setNoItemsCommentText(LLTrans::getString("NoneFound"));
+ }
+
mWearableList->refreshList(item_array);
}
diff --git a/indra/newview/llflickrconnect.cpp b/indra/newview/llflickrconnect.cpp
index c0ca5b8cf8..d7d161f239 100644
--- a/indra/newview/llflickrconnect.cpp
+++ b/indra/newview/llflickrconnect.cpp
@@ -397,13 +397,10 @@ LLFlickrConnect::LLFlickrConnect()
void LLFlickrConnect::openFlickrWeb(std::string url)
{
- // Open the URL in an internal browser window without navigation UI
LLFloaterWebContent::Params p;
p.url(url);
p.show_chrome(true);
- p.allow_address_entry(false);
p.allow_back_forward_navigation(false);
- p.trusted_content(true);
p.clean_browser(true);
LLFloater *floater = LLFloaterReg::showInstance("flickr_web", p);
//the internal web browser has a bug that prevents it from gaining focus unless a mouse event occurs first (it seems).
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index a9e4d752ac..0c2bb25e07 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -793,7 +793,7 @@ void LLImagePreviewSculpted::setPreviewTarget(LLImageRaw* imagep, F32 distance)
if (imagep)
{
- mVolume->sculpt(imagep->getWidth(), imagep->getHeight(), imagep->getComponents(), imagep->getData(), 0);
+ mVolume->sculpt(imagep->getWidth(), imagep->getHeight(), imagep->getComponents(), imagep->getData(), 0, false);
}
const LLVolumeFace &vf = mVolume->getVolumeFace(0);
diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp
index 9edfe1e354..c43526acaf 100644
--- a/indra/newview/llfloatermemleak.cpp
+++ b/indra/newview/llfloatermemleak.cpp
@@ -42,6 +42,8 @@ U32 LLFloaterMemLeak::sTotalLeaked = 0 ;
S32 LLFloaterMemLeak::sStatus = LLFloaterMemLeak::STOP ;
BOOL LLFloaterMemLeak::sbAllocationFailed = FALSE ;
+extern BOOL gSimulateMemLeak;
+
LLFloaterMemLeak::LLFloaterMemLeak(const LLSD& key)
: LLFloater(key)
{
@@ -104,6 +106,7 @@ void LLFloaterMemLeak::release()
sStatus = STOP ;
sTotalLeaked = 0 ;
sbAllocationFailed = FALSE ;
+ gSimulateMemLeak = FALSE;
}
void LLFloaterMemLeak::stop()
@@ -140,8 +143,7 @@ void LLFloaterMemLeak::idle()
}
if(!p)
{
- sStatus = STOP ;
- sbAllocationFailed = TRUE ;
+ stop();
}
}
@@ -181,6 +183,7 @@ void LLFloaterMemLeak::onChangeMaxMemLeaking()
void LLFloaterMemLeak::onClickStart()
{
sStatus = START ;
+ gSimulateMemLeak = TRUE;
}
void LLFloaterMemLeak::onClickStop()
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
index c0f5e63623..3a3660bb31 100644
--- a/indra/newview/llfloaterreporter.cpp
+++ b/indra/newview/llfloaterreporter.cpp
@@ -162,7 +162,8 @@ LLFloaterReporter::LLFloaterReporter(const LLSD& key)
mPosition(),
mCopyrightWarningSeen( FALSE ),
mResourceDatap(new LLResourceData()),
- mAvatarNameCacheConnection()
+ mAvatarNameCacheConnection(),
+ mSnapshotTimer()
{
}
@@ -245,6 +246,12 @@ LLFloaterReporter::~LLFloaterReporter()
void LLFloaterReporter::draw()
{
LLFloater::draw();
+ static LLCachedControl<F32> screenshot_delay(gSavedSettings, "AbuseReportScreenshotDelay");
+ if (mSnapshotTimer.getStarted() && mSnapshotTimer.getElapsedTimeF32() > screenshot_delay)
+ {
+ mSnapshotTimer.stop();
+ takeNewSnapshot();
+ }
}
void LLFloaterReporter::enableControls(BOOL enable)
@@ -877,8 +884,7 @@ void LLFloaterReporter::onOpen(const LLSD& key)
{
childSetEnabled("send_btn", false);
//Time delay to avoid UI artifacts. MAINT-7067
- doAfterInterval(boost::bind(&LLFloaterReporter::takeNewSnapshot,this), gSavedSettings.getF32("AbuseReportScreenshotDelay"));
-
+ mSnapshotTimer.start();
}
void LLFloaterReporter::onLoadScreenshotDialog(const LLSD& notification, const LLSD& response)
@@ -950,6 +956,7 @@ void LLFloaterReporter::setPosBox(const LLVector3d &pos)
void LLFloaterReporter::onClose(bool app_quitting)
{
+ mSnapshotTimer.stop();
gSavedPerAccountSettings.setBOOL("PreviousScreenshotForReport", app_quitting);
}
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
index decc01be98..f5ba63ce7f 100644
--- a/indra/newview/llfloaterreporter.h
+++ b/indra/newview/llfloaterreporter.h
@@ -149,6 +149,7 @@ private:
LLPointer<LLImageRaw> mImageRaw;
LLPointer<LLImageRaw> mPrevImageRaw;
+ LLFrameTimer mSnapshotTimer;
};
#endif
diff --git a/indra/newview/llfloaterwebprofile.cpp b/indra/newview/llfloaterwebprofile.cpp
index a46f1d8af2..891bb90c0e 100644
--- a/indra/newview/llfloaterwebprofile.cpp
+++ b/indra/newview/llfloaterwebprofile.cpp
@@ -38,8 +38,10 @@ LLFloaterWebProfile::LLFloaterWebProfile(const Params& key) :
void LLFloaterWebProfile::onOpen(const LLSD& key)
{
Params p(key);
- p.show_chrome(false).
- window_class("profile");
+ p.show_chrome(true);
+ p.window_class("profile");
+ p.allow_address_entry(false);
+ p.trusted_content(true);
LLFloaterWebContent::onOpen(p);
applyPreferredRect();
}
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
index 83f268818e..3c3b004d2c 100644
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -549,10 +549,10 @@ void LLFloaterWorldMap::trackAvatar( const LLUUID& avatar_id, const std::string&
getChild<LLUICtrl>("teleport_coordinate_z")->setValue(LLSD(200.f));
}
// Don't re-request info if we already have it or we won't have it in time to teleport
- if (mTrackedStatus != LLTracker::TRACKING_AVATAR || name != mTrackedAvatarName)
+ if (mTrackedStatus != LLTracker::TRACKING_AVATAR || avatar_id != mTrackedAvatarID)
{
mTrackedStatus = LLTracker::TRACKING_AVATAR;
- mTrackedAvatarName = name;
+ mTrackedAvatarID = avatar_id;
LLTracker::trackAvatar(avatar_id, name);
}
}
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
index c5801c8819..fce945df6c 100644
--- a/indra/newview/llfloaterworldmap.h
+++ b/indra/newview/llfloaterworldmap.h
@@ -190,7 +190,7 @@ private:
LLVector3d mTrackedLocation;
LLTracker::ETrackingStatus mTrackedStatus;
std::string mTrackedSimName;
- std::string mTrackedAvatarName;
+ LLUUID mTrackedAvatarID;
LLSLURL mSLURL;
LLCtrlListInterface * mListFriendCombo;
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
index 63270e13fe..fc93181ef4 100644
--- a/indra/newview/llglsandbox.cpp
+++ b/indra/newview/llglsandbox.cpp
@@ -920,7 +920,7 @@ public:
// unbind
if (texUnit)
{
- texUnit->unbind(LLTexUnit::TT_TEXTURE);
+ texUnit->unbind(LLTexUnit::TT_TEXTURE);
}
// ensure that we delete these textures regardless of how we exit
LLImageGL::deleteTextures(source.size(), &source[0]);
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 3acfaeb049..67b51f11b3 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -6588,11 +6588,9 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
getClipboardEntries(true, items, disabled_items, flags);
items.push_back(std::string("Wearable And Object Separator"));
-
items.push_back(std::string("Wearable Edit"));
- bool modifiable = !gAgentWearables.isWearableModifiable(item->getUUID());
- if (((flags & FIRST_SELECTED_ITEM) == 0) || modifiable)
+ if (((flags & FIRST_SELECTED_ITEM) == 0) || (item && !gAgentWearables.isWearableModifiable(item->getUUID())))
{
disabled_items.push_back(std::string("Wearable Edit"));
}
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
index 4999318973..c03080beb8 100644
--- a/indra/newview/llmoveview.cpp
+++ b/indra/newview/llmoveview.cpp
@@ -400,12 +400,12 @@ void LLFloaterMove::initMovementMode()
{
initMovementMode = MM_FLY;
}
- setMovementMode(initMovementMode);
+
+ mCurrentMode = initMovementMode;
+ bool hide_mode_buttons = (MM_FLY == mCurrentMode) || (isAgentAvatarValid() && gAgentAvatarp->isSitting());
- if (isAgentAvatarValid())
- {
- showModeButtons(!gAgentAvatarp->isSitting());
- }
+ updateButtonsWithMovementMode(mCurrentMode);
+ showModeButtons(!hide_mode_buttons);
}
void LLFloaterMove::setModeTooltip(const EMovementMode mode)
diff --git a/indra/newview/lloutfitgallery.cpp b/indra/newview/lloutfitgallery.cpp
index c38d3ab140..dc3b153da2 100644
--- a/indra/newview/lloutfitgallery.cpp
+++ b/indra/newview/lloutfitgallery.cpp
@@ -1267,6 +1267,13 @@ LLUUID LLOutfitGallery::getDefaultPhoto()
void LLOutfitGallery::onTexturePickerCommit(LLTextureCtrl::ETexturePickOp op, LLUUID id)
{
+ LLUUID selected_outfit_id = getSelectedOutfitUUID();
+
+ if (selected_outfit_id.isNull())
+ {
+ return;
+ }
+
LLFloaterTexturePicker* floaterp = (LLFloaterTexturePicker*)mFloaterHandle.get();
if (floaterp && op == LLTextureCtrl::TEXTURE_SELECT)
@@ -1316,8 +1323,8 @@ void LLOutfitGallery::onTexturePickerCommit(LLTextureCtrl::ETexturePickOp op, LL
return;
}
- checkRemovePhoto(getSelectedOutfitUUID());
- linkPhotoToOutfit(image_item_id, getSelectedOutfitUUID());
+ checkRemovePhoto(selected_outfit_id);
+ linkPhotoToOutfit(image_item_id, selected_outfit_id);
}
}
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
index e2157f985e..892fa385d7 100644
--- a/indra/newview/lloutfitslist.cpp
+++ b/indra/newview/lloutfitslist.cpp
@@ -1050,15 +1050,15 @@ bool LLOutfitContextMenu::onEnable(LLSD::String param)
bool LLOutfitContextMenu::onVisible(LLSD::String param)
{
LLUUID outfit_cat_id = mUUIDs.back();
- bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == outfit_cat_id;
if ("edit" == param)
{
+ bool is_worn = LLAppearanceMgr::instance().getBaseOutfitUUID() == outfit_cat_id;
return is_worn;
}
else if ("wear_replace" == param)
{
- return !is_worn;
+ return true;
}
else if ("delete" == param)
{
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
index 2d2ba30e9b..f089faea09 100644
--- a/indra/newview/llpanelmarketplaceinboxinventory.cpp
+++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp
@@ -139,6 +139,7 @@ void LLInboxFolderViewFolder::draw()
if (!hasBadgeHolderParent())
{
addBadgeToParentHolder();
+ setDrawBadgeAtTop(true);
}
setBadgeVisibility(mFresh);
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 0bf4d48421..73d08ec335 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -342,9 +342,9 @@ void LLPanelObject::getState( )
}
// can move or rotate only linked group with move permissions, or sub-object with move and modify perms
- BOOL enable_move = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && !objectp->isAttachment() && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
+ BOOL enable_move = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
BOOL enable_scale = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && objectp->permModify();
- BOOL enable_rotate = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && ( (objectp->permModify() && !objectp->isAttachment()) || !gSavedSettings.getBOOL("EditLinkedParts"));
+ BOOL enable_rotate = objectp->permMove() && !objectp->isPermanentEnforced() && ((root_objectp == NULL) || !root_objectp->isPermanentEnforced()) && (objectp->permModify() || !gSavedSettings.getBOOL("EditLinkedParts"));
S32 selected_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
BOOL single_volume = (LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ))
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index b5ee68ba25..c50f3477ad 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -696,6 +696,10 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
items.push_back(std::string("Task Open"));
}
items.push_back(std::string("Task Properties"));
+ if ((flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Task Properties"));
+ }
if(isItemRenameable())
{
items.push_back(std::string("Task Rename"));
@@ -1017,6 +1021,10 @@ void LLTaskSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
items.push_back(std::string("Task Properties"));
+ if ((flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Task Properties"));
+ }
if(isItemRenameable())
{
items.push_back(std::string("Task Rename"));
@@ -1388,6 +1396,10 @@ void LLTaskMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
}
}
items.push_back(std::string("Task Properties"));
+ if ((flags & FIRST_SELECTED_ITEM) == 0)
+ {
+ disabled_items.push_back(std::string("Task Properties"));
+ }
if(isItemRenameable())
{
items.push_back(std::string("Task Rename"));
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
index 3099a6e039..75c8765c5b 100644
--- a/indra/newview/llpanelwearing.cpp
+++ b/indra/newview/llpanelwearing.cpp
@@ -65,7 +65,7 @@ public:
LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
registrar.add("Gear.Edit", boost::bind(&edit_outfit));
- registrar.add("Gear.TakeOff", boost::bind(&LLWearingGearMenu::onTakeOff, this));
+ registrar.add("Gear.TakeOff", boost::bind(&LLPanelWearing::onRemoveItem, mPanelWearing));
registrar.add("Gear.Copy", boost::bind(&LLPanelWearing::copyToClipboard, mPanelWearing));
enable_registrar.add("Gear.OnEnable", boost::bind(&LLPanelWearing::isActionEnabled, mPanelWearing, _2));
@@ -79,13 +79,6 @@ public:
private:
- void onTakeOff()
- {
- uuid_vec_t selected_uuids;
- mPanelWearing->getSelectedItemsUUIDs(selected_uuids);
- LLAppearanceMgr::instance().removeItemsFromAvatar(selected_uuids);
- }
-
LLToggleableMenu* mMenu;
LLPanelWearing* mPanelWearing;
};
@@ -343,7 +336,14 @@ bool LLPanelWearing::isActionEnabled(const LLSD& userdata)
if (command_name == "take_off")
{
- return hasItemSelected() && canTakeOffSelected();
+ if (mWearablesTab->isExpanded())
+ {
+ return hasItemSelected() && canTakeOffSelected();
+ }
+ else
+ {
+ return mTempItemsList->hasSelectedItem();
+ }
}
return false;
@@ -532,6 +532,21 @@ void LLPanelWearing::onRemoveAttachment()
}
}
+void LLPanelWearing::onRemoveItem()
+{
+ if (mWearablesTab->isExpanded())
+ {
+ uuid_vec_t selected_uuids;
+ getSelectedItemsUUIDs(selected_uuids);
+ LLAppearanceMgr::instance().removeItemsFromAvatar(selected_uuids);
+ }
+ else
+ {
+ onRemoveAttachment();
+ }
+}
+
+
void LLPanelWearing::copyToClipboard()
{
std::string text;
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
index c5cb79092a..715404a457 100644
--- a/indra/newview/llpanelwearing.h
+++ b/indra/newview/llpanelwearing.h
@@ -80,6 +80,7 @@ public:
void onAccordionTabStateChanged();
void setAttachmentDetails(LLSD content);
void requestAttachmentDetails();
+ void onRemoveItem();
void onEditAttachment();
void onRemoveAttachment();
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
index 08d734ddac..f48ce680fd 100644
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -44,7 +44,9 @@ typedef std::map<std::string, std::string> controller_map_t;
typedef std::map<std::string, F32> default_controller_map_t;
#define MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION 0.f
-#define TIME_ITERATION_STEP 0.05f
+// we use TIME_ITERATION_STEP_MAX in division operation, make sure this is a simple
+// value and devision result won't end with repeated/recurring tail like 1.333(3)
+#define TIME_ITERATION_STEP_MAX 0.05f // minimal step size will end up as 0.025
inline F64 llsgn(const F64 a)
{
@@ -480,7 +482,7 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
if (!mParamDriver)
return FALSE;
- if (!mLastTime)
+ if (!mLastTime || mLastTime >= time)
{
mLastTime = time;
return FALSE;
@@ -561,14 +563,10 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
// bounce at right (relatively) position.
// Note: this doesn't look to be optimal, since it provides only "roughly same" behavior, but
// irregularity at higher fps looks to be insignificant so it works good enough for low fps.
- for (F32 time_iteration = 0; time_iteration <= time_delta; time_iteration += TIME_ITERATION_STEP)
+ U32 steps = (U32)(time_delta / TIME_ITERATION_STEP_MAX) + 1;
+ F32 time_iteration_step = time_delta / (F32)steps; //minimal step size ends up as 0.025
+ for (U32 i = 0; i < steps; i++)
{
- F32 time_iteration_step = TIME_ITERATION_STEP;
- if (time_iteration + TIME_ITERATION_STEP > time_delta)
- {
- time_iteration_step = time_delta-time_iteration;
- }
-
// mPositon_local should be in normalized 0,1 range already. Just making sure...
const F32 position_current_local = llclamp(mPosition_local,
0.0f,
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 6ecc4c7fb9..945f3c370c 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -2041,7 +2041,15 @@ void LLLiveLSLEditor::loadScriptText(LLVFS *vfs, const LLUUID &uuid, LLAssetType
mScriptEd->setScriptText(LLStringExplicit(&buffer[0]), TRUE);
mScriptEd->makeEditorPristine();
- mScriptEd->setScriptName(getItem()->getName());
+
+ std::string script_name = DEFAULT_SCRIPT_NAME;
+ const LLInventoryItem* inv_item = getItem();
+
+ if(inv_item)
+ {
+ script_name = inv_item->getName();
+ }
+ mScriptEd->setScriptName(script_name);
}
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index dadf2f9701..2a0d961952 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -117,7 +117,7 @@ public:
~LLTextureCacheWorker()
{
llassert_always(!haveWork());
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
}
// override this interface
@@ -237,7 +237,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
// << " Bytes: " << mDataSize << " Offset: " << mOffset
// << " / " << mDataSize << LL_ENDL;
mDataSize = 0; // failed
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
}
return true;
@@ -252,7 +252,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
{
mDataSize = local_size;
}
- mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
+ mReadData = (U8*)ll_aligned_malloc_16(mDataSize);
S32 bytes_read = LLAPRFile::readEx(mFileName, mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool());
@@ -262,7 +262,7 @@ bool LLTextureCacheLocalFileWorker::doRead()
// << " Bytes: " << mDataSize << " Offset: " << mOffset
// << " / " << mDataSize << LL_ENDL;
mDataSize = 0;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
}
else
@@ -386,7 +386,7 @@ bool LLTextureCacheRemoteWorker::doRead()
mDataSize = local_size;
}
// Allocate read buffer
- mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
+ mReadData = (U8*)ll_aligned_malloc_16(mDataSize);
if (mReadData)
{
@@ -402,7 +402,7 @@ bool LLTextureCacheRemoteWorker::doRead()
<< " Bytes: " << mDataSize << " Offset: " << mOffset
<< " / " << mDataSize << LL_ENDL;
mDataSize = 0;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
}
else
@@ -451,7 +451,7 @@ bool LLTextureCacheRemoteWorker::doRead()
S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset;
size = llmin(size, mDataSize);
// Allocate the read buffer
- mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), size);
+ mReadData = (U8*)ll_aligned_malloc_16(size);
if (mReadData)
{
S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName,
@@ -461,7 +461,7 @@ bool LLTextureCacheRemoteWorker::doRead()
LL_WARNS() << "LLTextureCacheWorker: " << mID
<< " incorrect number of bytes read from header: " << bytes_read
<< " / " << size << LL_ENDL;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
mDataSize = -1; // failed
done = true;
@@ -500,7 +500,7 @@ bool LLTextureCacheRemoteWorker::doRead()
S32 data_offset, file_size, file_offset;
// Reserve the whole data buffer first
- U8* data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize);
+ U8* data = (U8*)ll_aligned_malloc_16(mDataSize);
if (data)
{
// Set the data file pointers taking the read offset into account. 2 cases:
@@ -514,7 +514,7 @@ bool LLTextureCacheRemoteWorker::doRead()
// Copy the raw data we've been holding from the header cache into the new sized buffer
llassert_always(mReadData);
memcpy(data, mReadData, data_offset);
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
}
else
@@ -540,7 +540,7 @@ bool LLTextureCacheRemoteWorker::doRead()
LL_WARNS() << "LLTextureCacheWorker: " << mID
<< " incorrect number of bytes read from body: " << bytes_read
<< " / " << file_size << LL_ENDL;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
mDataSize = -1; // failed
done = true;
@@ -550,7 +550,7 @@ bool LLTextureCacheRemoteWorker::doRead()
{
LL_WARNS() << "LLTextureCacheWorker: " << mID
<< " failed to allocate memory for reading: " << mDataSize << LL_ENDL;
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
mDataSize = -1; // failed
done = true;
@@ -673,11 +673,11 @@ bool LLTextureCacheRemoteWorker::doWrite()
{
// We need to write a full record in the header cache so, if the amount of data is smaller
// than a record, we need to transfer the data to a buffer padded with 0 and write that
- U8* padBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), TEXTURE_CACHE_ENTRY_SIZE);
+ U8* padBuffer = (U8*)ll_aligned_malloc_16(TEXTURE_CACHE_ENTRY_SIZE);
memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE); // Init with zeros
memcpy(padBuffer, mWriteData, mDataSize); // Copy the write buffer
bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool());
- FREE_MEM(LLImageBase::getPrivatePool(), padBuffer);
+ ll_aligned_free_16(padBuffer);
}
else
{
@@ -783,7 +783,7 @@ void LLTextureCacheWorker::finishWork(S32 param, bool completed)
}
else
{
- FREE_MEM(LLImageBase::getPrivatePool(), mReadData);
+ ll_aligned_free_16(mReadData);
mReadData = NULL;
}
}
@@ -845,7 +845,7 @@ LLTextureCache::~LLTextureCache()
writeUpdatedEntries() ;
delete mFastCachep;
delete mFastCachePoolp;
- FREE_MEM(LLImageBase::getPrivatePool(), mFastCachePadBuffer);
+ ll_aligned_free_16(mFastCachePadBuffer);
}
//////////////////////////////////////////////////////////////////////////////
@@ -1983,10 +1983,10 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d
}
discardlevel = head[3];
- data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), image_size);
+ data = (U8*)ll_aligned_malloc_16(image_size);
if(mFastCachep->read(data, image_size) != image_size)
{
- FREE_MEM(LLImageBase::getPrivatePool(), data);
+ ll_aligned_free_16(data);
closeFastCache();
return NULL;
}
@@ -2078,7 +2078,7 @@ void LLTextureCache::openFastCache(bool first_time)
{
if(!mFastCachePadBuffer)
{
- mFastCachePadBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), TEXTURE_FAST_CACHE_ENTRY_SIZE);
+ mFastCachePadBuffer = (U8*)ll_aligned_malloc_16(TEXTURE_FAST_CACHE_ENTRY_SIZE);
}
mFastCachePoolp = new LLVolatileAPRPool();
if (LLAPRFile::isExist(mFastCacheFileName, mFastCachePoolp))
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index 1f7796e6d0..6fd90e4935 100644
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1761,7 +1761,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
mRequestedOffset += src_offset;
}
- U8 * buffer = (U8 *)ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_size);
+ U8 * buffer = (U8 *)ll_aligned_malloc_16(total_size);
if (!buffer)
{
// abort. If we have no space for packet, we have not enough space to decode image
@@ -2266,7 +2266,7 @@ bool LLTextureFetchWorker::processSimulatorPackets()
if (buffer_size > cur_size)
{
/// We have new data
- U8* buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), buffer_size);
+ U8* buffer = (U8*)ll_aligned_malloc_16(buffer_size);
S32 offset = 0;
if (cur_size > 0 && mFirstPacket > 0)
{
@@ -5059,7 +5059,7 @@ void LLTextureFetchDebugger::callbackHTTP(FetchEntry & fetch, LLCore::HttpRespon
//LL_INFOS(LOG_TXT) << "Fetch Debugger : got results for " << fetch.mID << ", data_size = " << data_size << ", received = " << fetch.mCurlReceivedSize << ", requested = " << fetch.mRequestedSize << ", partial = " << partial << LL_ENDL;
if ((fetch.mCurlReceivedSize >= fetch.mRequestedSize) || !partial || (fetch.mRequestedSize == 600))
{
- U8* d_buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), data_size);
+ U8* d_buffer = (U8*)ll_aligned_malloc_16(data_size);
if (ba)
{
ba->read(0, d_buffer, data_size);
diff --git a/indra/newview/lltwitterconnect.cpp b/indra/newview/lltwitterconnect.cpp
index 9b7c13b57d..5d598aaebe 100644
--- a/indra/newview/lltwitterconnect.cpp
+++ b/indra/newview/lltwitterconnect.cpp
@@ -380,13 +380,10 @@ LLTwitterConnect::LLTwitterConnect()
void LLTwitterConnect::openTwitterWeb(std::string url)
{
- // Open the URL in an internal browser window without navigation UI
LLFloaterWebContent::Params p;
p.url(url);
p.show_chrome(true);
- p.allow_address_entry(false);
p.allow_back_forward_navigation(false);
- p.trusted_content(true);
p.clean_browser(true);
LLFloater *floater = LLFloaterReg::showInstance("twitter_web", p);
//the internal web browser has a bug that prevents it from gaining focus unless a mouse event occurs first (it seems).
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 5bbf5650ad..e973363e0f 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -8001,7 +8001,7 @@ void handle_report_bug(const LLSD& param)
LLUIString url(param.asString());
LLStringUtil::format_map_t replace;
- replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getShortViewerInfoString());
+ replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString(true));
LLSLURL location_url;
LLAgentUI::buildSLURL(location_url);
replace["[LOCATION]"] = LLURI::escape(location_url.getSLURLString());
diff --git a/indra/newview/llviewertextureanim.cpp b/indra/newview/llviewertextureanim.cpp
index 9af92d7377..9603811066 100644
--- a/indra/newview/llviewertextureanim.cpp
+++ b/indra/newview/llviewertextureanim.cpp
@@ -146,6 +146,8 @@ S32 LLViewerTextureAnim::animateTextures(F32 &off_s, F32 &off_t,
if (!(mMode & SMOOTH))
{
frame_counter = (F32)llfloor(frame_counter + 0.01f);
+ // account for 0.01, we shouldn't step over full length
+ frame_counter = llmin(full_length - 1.f, frame_counter);
}
if (mMode & PING_PONG)
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 74deaffe16..c057954606 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -740,16 +740,6 @@ public:
ypos += y_inc;
}
- if (gSavedSettings.getBOOL("DebugShowPrivateMem"))
- {
- LLPrivateMemoryPoolManager::getInstance()->updateStatistics() ;
- addText(xpos, ypos, llformat("Total Reserved(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalReservedSize / 1024));
- ypos += y_inc;
-
- addText(xpos, ypos, llformat("Total Allocated(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalAllocatedSize / 1024));
- ypos += y_inc;
- }
-
// only display these messages if we are actually rendering beacons at this moment
if (LLPipeline::getRenderBeacons() && LLFloaterReg::instanceVisible("beacons"))
{
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index eae8f2cc56..652a447545 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -5304,6 +5304,10 @@ LLUUID LLVOAvatar::remapMotionID(const LLUUID& id)
if (use_new_walk_run)
result = ANIM_AGENT_FEMALE_RUN_NEW;
}
+ else if (id == ANIM_AGENT_SIT)
+ {
+ result = ANIM_AGENT_SIT_FEMALE;
+ }
}
else
{
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 7b4d8ef329..d93cae992b 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -1200,7 +1200,7 @@ void LLVOVolume::sculpt()
mSculptTexture->updateBindStatsForTester() ;
}
}
- getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level);
+ getVolume()->sculpt(sculpt_width, sculpt_height, sculpt_components, sculpt_data, discard_level, mSculptTexture->isMissingAsset());
//notify rebuild any other VOVolumes that reference this sculpty volume
for (S32 i = 0; i < mSculptTexture->getNumVolumes(); ++i)
@@ -2525,7 +2525,9 @@ void LLVOVolume::mediaNavigateBounceBack(U8 texture_index)
LL_WARNS("MediaOnAPrim") << "FAILED to bounce back URL \"" << url << "\" -- unloading impl" << LL_ENDL;
impl->setMediaFailed(true);
}
- else {
+ // Make sure we are not bouncing to url we came from
+ else if (impl->getCurrentMediaURL() != url)
+ {
// Okay, navigate now
LL_INFOS("MediaOnAPrim") << "bouncing back to URL: " << url << LL_ENDL;
impl->navigateTo(url, "", false, true);
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 5fb3d62445..ee2270c323 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -645,7 +645,7 @@ LLWearableItemsList::LLWearableItemsList(const LLWearableItemsList::Params& p)
setRightMouseDownCallback(boost::bind(&LLWearableItemsList::onRightClick, this, _2, _3));
}
mWornIndicationEnabled = p.worn_indication_enabled;
- setNoItemsCommentText(LLTrans::getString("NoneFound"));
+ setNoItemsCommentText(LLTrans::getString("LoadingData"));
}
// virtual
diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml
index af9ee0bd06..bd8ecb92e9 100644
--- a/indra/newview/skins/default/xui/da/floater_tos.xml
+++ b/indra/newview/skins/default/xui/da/floater_tos.xml
@@ -8,7 +8,9 @@
</floater.string>
<button label="Fortsæt" label_selected="Fortsæt" name="Continue"/>
<button label="Annullér" label_selected="Annullér" name="Cancel"/>
- <check_box label="Jeg er enig med &quot;Terms of Service and Privacy Policy&quot;" name="agree_chk"/>
+ <text name="agree_list">
+ Jeg er enig med &quot;Terms of Service and Privacy Policy&quot;
+ </text>
<text name="tos_heading">
Læs venligst følgende &quot;Terms of Service and Privacy Policy&quot; grundigt. For at fortsætte med at logge på [SECOND_LIFE], skal du acceptere aftale.
</text>
diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml
index 636c2629da..47551d2a82 100644
--- a/indra/newview/skins/default/xui/de/floater_tos.xml
+++ b/indra/newview/skins/default/xui/de/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
Sie müssen sich unter https://my.secondlife.com anmelden und die Servicebedingungen akzeptieren, bevor Sie fortfahren können. Vielen Dank!
</text>
- <check_box label="Ich habe die" name="agree_chk"/>
<text name="agree_list">
- Allgemeinen Geschäftsbedingungen, die Datenschutzrichtlinie sowie die Servicebedingungen inklusive der Anforderungen zur Streitschlichtung gelesen und akzeptiere diese.
- </text>
- <button label="Weiter" label_selected="Weiter" name="Continue"/>
+ Ich habe die Allgemeinen Geschäftsbedingungen, die Datenschutzrichtlinie sowie die Servicebedingungen inklusive der Anforderungen zur Streitschlichtung gelesen und akzeptiere diese.
+ </text>
+ <button label="Weiter" label_selected="Weiter" name="Continue" top_delta="45"/>
<button label="Abbrechen" label_selected="Abbrechen" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
index 76adaad57c..e50747cb5f 100644
--- a/indra/newview/skins/default/xui/en/floater_snapshot.xml
+++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml
@@ -127,7 +127,7 @@
top_delta="0"
width="31" />
<panel
- height="154"
+ height="159"
layout="topleft"
follows="top|left"
left="0"
@@ -250,7 +250,7 @@
left="0"
name="panel_container"
default_panel_name="panel_snapshot_options"
- top_pad="10"
+ top_pad="5"
width="215">
<panel
class="llpanelsnapshotoptions"
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 92511167c0..fa15fb0657 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2373,16 +2373,6 @@
function="ToggleControl"
parameter="DebugShowMemory" />
</menu_item_check>
- <menu_item_check
- label="Show Private Mem Info"
- name="Show Private Mem Info">
- <menu_item_check.on_check
- function="CheckControl"
- parameter="DebugShowPrivateMem" />
- <menu_item_check.on_click
- function="ToggleControl"
- parameter="DebugShowPrivateMem" />
- </menu_item_check>
<menu_item_separator/>
diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml
index 412e0501a0..8d83eb5b24 100644
--- a/indra/newview/skins/default/xui/es/floater_tos.xml
+++ b/indra/newview/skins/default/xui/es/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
Para poder proseguir, debes iniciar sesión en https://my.secondlife.com y aceptar las Condiciones del servicio. Gracias.
</text>
- <check_box label="He leído y acepto" name="agree_chk"/>
<text name="agree_list">
- los Términos y Condiciones, la Política de privacidad y las Condiciones del servicio de Second Life, incluyendo los requerimientos para resolver disputas.
- </text>
+ He leído y acepto los Términos y Condiciones, la Política de privacidad y las Condiciones del servicio de Second Life, incluyendo los requerimientos para resolver disputas.
+ </text>
<button label="Continuar" label_selected="Continuar" name="Continue"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml
index 124a8ffee2..4e359e6482 100644
--- a/indra/newview/skins/default/xui/fr/floater_tos.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tos.xml
@@ -12,9 +12,8 @@
<text name="external_tos_required">
Vous devez vous rendre sur https://my.secondlife.com et vous connecter pour accepter les Conditions d’utilisation avant de pouvoir continuer. Merci !
</text>
- <check_box label="J&apos;ai lu et j&apos;accepte" name="agree_chk"/>
<text name="agree_list">
- les termes et conditions; la Politique de confidentialité et les Conditions d&apos;utilisation de Second Life, y compris ls exigences de résolution des différends.
+ J&apos;ai lu et j&apos;accepte les termes et conditions; la Politique de confidentialité et les Conditions d&apos;utilisation de Second Life, y compris ls exigences de résolution des différends.
</text>
<button label="Continuer" label_selected="Continuer" name="Continue"/>
<button label="Annuler" label_selected="Annuler" name="Cancel"/>
diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml
index 8fa74e0fca..0016df1882 100644
--- a/indra/newview/skins/default/xui/it/floater_tos.xml
+++ b/indra/newview/skins/default/xui/it/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
Per continuare, visita https://my.secondlife.com e accedi per accettare i Termini del servizio. Grazie.
</text>
- <check_box label="Ho letto e sono d’accordo con" name="agree_chk"/>
<text name="agree_list">
- i Termini e le Condizioni di Second Life, le clausole di riservatezza, i Termini del Servizio, compresi i requisiti per la risoluzione delle dispute.
- </text>
+ Ho letto e sono d’accordo con i Termini e le Condizioni di Second Life, le clausole di riservatezza, i Termini del Servizio, compresi i requisiti per la risoluzione delle dispute.
+ </text>
<button label="Continua" label_selected="Continua" name="Continue"/>
<button label="Annulla" label_selected="Annulla" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml
index 28e51e6d63..8045a1f1f7 100644
--- a/indra/newview/skins/default/xui/ja/floater_tos.xml
+++ b/indra/newview/skins/default/xui/ja/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
操作を続けるに、https://my.secondlife.com に移動し、利用規約に同意する必要があります。
</text>
- <check_box label="私は以下の内容を読み、同意します。" name="agree_chk"/>
<text name="agree_list">
- Second Life の利用規約、プライバシーポリシー、およびサービス規約(紛争解決のための必要条件を含む)。
- </text>
+ 私は以下の内容を読み、同意します。Second Life の利用規約、プライバシーポリシー、およびサービス規約(紛争解決のための必要条件を含む)。
+ </text>
<button label="続行" label_selected="続行" name="Continue"/>
<button label="取り消し" label_selected="取り消し" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/pl/floater_tos.xml b/indra/newview/skins/default/xui/pl/floater_tos.xml
index c3bc528d17..789c65a16e 100644
--- a/indra/newview/skins/default/xui/pl/floater_tos.xml
+++ b/indra/newview/skins/default/xui/pl/floater_tos.xml
@@ -5,7 +5,9 @@
</floater.string>
<button label="Kontynuuj" label_selected="Kontynuuj" name="Continue" />
<button label="Anuluj" label_selected="Anuluj" name="Cancel" />
- <check_box label="Zgadzam się na Warunki korzystania z Usług (Terms of Service) i Politykę Prywatności (Privacy Policy)" name="agree_chk" />
+ <text name="agree_list">
+ Zgadzam się na Warunki korzystania z Usług (Terms of Service) i Politykę Prywatności (Privacy Policy)
+ </text>
<text name="tos_heading">
Proszę dokładnie przeczytać Warunki korzystania z Usług (Terms of Service) i Politykę Prywatności (Privacy Policy). Musisz je zaakceptować, aby kontynuować logowanie.
</text>
diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml
index f8b2bc4aa7..09a90bc76c 100644
--- a/indra/newview/skins/default/xui/pt/floater_tos.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
Antes de continuar, você precisará visitar https://my.secondlife.com e fazer login para aceitar os Termos de Serviço. Obrigado!
</text>
- <check_box label="Li e concordo" name="agree_chk"/>
<text name="agree_list">
- os Termos e condições, Política de privacidade e Termos de serviço do Second Life, incluindo as exigências para resolver disputas.
- </text>
+ Li e concordo os Termos e condições, Política de privacidade e Termos de serviço do Second Life, incluindo as exigências para resolver disputas.
+ </text>
<button label="Continuar" label_selected="Continuar" name="Continue"/>
<button label="Cancelar" label_selected="Cancelar" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_tos.xml b/indra/newview/skins/default/xui/ru/floater_tos.xml
index 4c53fc9038..4cfdf5af70 100644
--- a/indra/newview/skins/default/xui/ru/floater_tos.xml
+++ b/indra/newview/skins/default/xui/ru/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
Для продолжения перейдите на сайт https://my.secondlife.com, войдите и примите Условия обслуживания. Спасибо!
</text>
- <check_box label="Я прочитал и согласен с" name="agree_chk"/>
<text name="agree_list">
- условия и положения по конфиденциальности Пользовательского соглашения, включая требования по разрешению разногласий.
- </text>
+ Я прочитал и согласен с условиями и положениями по конфиденциальности Пользовательского соглашения, включая требования по разрешению разногласий.
+ </text>
<button label="Продолжить" label_selected="Продолжить" name="Continue"/>
<button label="Отмена" label_selected="Отмена" name="Cancel"/>
</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_tos.xml b/indra/newview/skins/default/xui/tr/floater_tos.xml
index 249a0f691e..9c0249526a 100644
--- a/indra/newview/skins/default/xui/tr/floater_tos.xml
+++ b/indra/newview/skins/default/xui/tr/floater_tos.xml
@@ -12,9 +12,8 @@
<text name="external_tos_required">
Devam edebilmeniz için https://my.secondlife.com adresine gidip oturum açarak Hizmet Sözleşmesi&apos;ni kabul etmeniz gerekir. Teşekkürler!
</text>
- <check_box label="Uyuşmazlıkların çözümü gerekliliklerini içeren Second Life Şartlar ve Koşulları, Gizlilik Politikası&apos;nı ve Hizmet Koşulları&apos;nı" name="agree_chk"/>
<text name="agree_list">
- okudum ve kabul ediyorum.
+ Uyuşmazlıkların çözümü gerekliliklerini içeren Second Life Şartlar ve Koşulları, Gizlilik Politikası&apos;nı ve Hizmet Koşulları&apos;nı okudum ve kabul ediyorum.
</text>
<button label="Devam Et" label_selected="Devam Et" name="Continue"/>
<button label="İptal" label_selected="İptal" name="Cancel"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml
index 4e028c849f..cde6445e34 100644
--- a/indra/newview/skins/default/xui/zh/floater_tos.xml
+++ b/indra/newview/skins/default/xui/zh/floater_tos.xml
@@ -12,10 +12,9 @@
<text name="external_tos_required">
你需先登入 https://my.secondlife.com 同意服務條款,才可繼續。 謝謝你!
</text>
- <check_box label="我已閱畢並同意" name="agree_chk"/>
<text name="agree_list">
- Second Life使用條款、隱私政策、服務條款,包括解決爭端的規定途徑。
- </text>
+ 我已閱畢並同意 Second Life使用條款、隱私政策、服務條款,包括解決爭端的規定途徑。
+ </text>
<button label="繼續" label_selected="繼續" name="Continue"/>
<button label="取消" label_selected="取消" name="Cancel"/>
</floater>