Merge Firestorm LGPL

master
Ansariel 2019-10-18 18:29:27 +02:00
commit e35c22b8ee
205 changed files with 2212 additions and 1328 deletions

View File

@ -39,6 +39,7 @@ ab632018105ccfdf8a9e5ea1a8302badd58b686e Firestorm_5.0.1_Release
8888a131acad19c49fcff1ad2cf75c54c8a41bb8 Firestorm_6.0.1_Beta
ba5e1592f3a79317a3ebac441ee5946a81b97fab Firestorm_6.0.2_Release
7b5a98fba31fa019bddb3ae900c6dd94604bc8be Firestorm_6.2.4_Release
381d04b870a59ef98cc442a5d4aeb6b38cfdbed7 Firestorm_6.3.2_Release
bb38ff1a763738609e1b3cada6d15fa61e5e84b9 2.1.1-release
003dd9461bfa479049afcc34545ab3431b147c7c v2start
52d96ad3d39be29147c5b2181b3bb46af6164f0e alpha-3
@ -595,3 +596,4 @@ ab2ec5c5423b277d23fd0511ce50c15123ff2e03 6.2.3-release
67297f9902857e357570c44722ad84de3aff974e 6.2.4-release
9777aec6dc4a30a24537297ac040861ce16b82ae 6.3.0-release
ece699718f163921717bb95a6131e94af4c4138f 6.3.1-release
07f5d5bc9faebb45695853d40a9549773db816c0 6.3.2-release

View File

@ -41,5 +41,3 @@ Logs:
Output:
Look for output in build-linux-x86_64/newview/Release

View File

@ -52,5 +52,3 @@ Logs:
Output:
Look for output in build-vc120-32/newview/Release for 32bit builds and build-vc120-64/newview/Release for 64bit

View File

@ -258,7 +258,7 @@
<key>hash</key>
<string>b760b4f3ab7794a897cf7f464d92e587</string>
<key>url</key>
<uri>http://downloads.phoenixviewer.com/discord_rpc-3.4.0-windows-192510505.tar.bz2</uri>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-windows-192510505.tar.bz2</uri>
</map>
<key>name</key>
<string>windows</string>
@ -270,7 +270,7 @@
<key>hash</key>
<string>cefa1cdb50a85e36114ca89df66c0b5a</string>
<key>url</key>
<uri>http://downloads.phoenixviewer.com/discord_rpc-3.4.0-linux64-192540843.tar.bz2</uri>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-linux64-192540843.tar.bz2</uri>
</map>
<key>name</key>
<string>linux64</string>
@ -282,7 +282,7 @@
<key>hash</key>
<string>3bc297a0fa47094bb52d361f80186387</string>
<key>url</key>
<uri>http://downloads.phoenixviewer.com/discord_rpc-3.4.0-darwin64-192522358.tar.bz2</uri>
<uri>http://3p.firestormviewer.org/discord_rpc-3.4.0-darwin64-192522358.tar.bz2</uri>
</map>
<key>name</key>
<string>darwin64</string>
@ -1058,11 +1058,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>0fcdc89c60271eda1fb37879b0c4a373</string>
<string>d892f61440dd1888327d764b04158c88</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.00.03-darwin-192401637.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.00.05-darwin-192862021.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@ -1072,11 +1072,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>09f22b6a3ac41739073418bb6b8544d6</string>
<string>4bf66af7313c2a859bde553a563698e3</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.00.03-linux64-192401637.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.00.05-linux64-192862026.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -1086,11 +1086,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>a0d1821154e7ce5c418e3cdc2f26f3fc</string>
<string>c668bd6961489c9bd6f07f1203a9d6eb</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.00.03-windows-192171947.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.00.05-windows-192861134.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -1100,18 +1100,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>b98d2da1ed02f8ba218de414a83d0edc</string>
<string>2cf52c44f8943f69b91c950ae7ea356a</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.00.03-windows64-192171948.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.00.05-windows64-192861136.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>2.00.03</string>
<string>2.00.05</string>
</map>
<key>fmodex</key>
<map>
@ -3512,9 +3512,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>aaf04f5ed1d28477781d976dc04871ee</string>
<string>c5ab9d9d7482e48cd76f4bf391900a8c</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/31904/266163/viewer_manager-2.0.524157-darwin64-524157.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/43369/385585/viewer_manager-2.0.531000-darwin64-531000.tar.bz2</string>
</map>
<key>name</key>
<string>darwin64</string>
@ -3548,9 +3548,9 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>archive</key>
<map>
<key>hash</key>
<string>4604624f11b215b052f4a840f4da4bf8</string>
<string>6b10d7407686d9e12e63576256581e3e</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/31906/266177/viewer_manager-2.0.524157-windows-524157.tar.bz2</string>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/43370/385592/viewer_manager-2.0.531000-windows-531000.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -3561,7 +3561,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>source_type</key>
<string>hg</string>
<key>version</key>
<string>2.0.524157</string>
<string>2.0.531000</string>
</map>
<key>vlc-bin</key>
<map>

View File

@ -1456,6 +1456,7 @@ Tonya Souther
STORM-1905
BUG-3875
BUG-3968
OPEN-345
Torben Trautman
TouchaHoney Perhaps
TraductoresAnonimos Alter

View File

@ -1,23 +1,17 @@
# -*- cmake -*-
if (DISCORD_API_KEY)
include(Prebuilt)
use_prebuilt_binary(discord-rpc)
set(DISCORD_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/discord-rpc)
include(Prebuilt)
use_prebuilt_binary(discord-rpc)
set(DISCORD_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/discord-rpc)
if (WINDOWS)
if (ADDRESS_SIZE EQUAL 32)
set(DISCORD_LIBRARY discord-rpc)
else ()
set(DISCORD_LIBRARY discord-rpc_x64)
endif(ADDRESS_SIZE EQUAL 32)
elseif (LINUX)
set(DISCORD_LIBRARY discord-rpc)
elseif (DARWIN)
set(DISCORD_LIBRARY discord-rpc)
endif (WINDOWS)
add_definitions( -DDISCORD_API_KEY=\"${DISCORD_API_KEY}\")
add_definitions( -DHAS_DISCORD )
set(USE_DISCORD TRUE)
endif (DISCORD_API_KEY)
if (WINDOWS)
if (ADDRESS_SIZE EQUAL 32)
set(DISCORD_LIBRARY discord-rpc)
else ()
set(DISCORD_LIBRARY discord-rpc_x64)
endif(ADDRESS_SIZE EQUAL 32)
elseif (LINUX)
set(DISCORD_LIBRARY discord-rpc)
elseif (DARWIN)
set(DISCORD_LIBRARY discord-rpc)
endif (WINDOWS)

View File

@ -147,6 +147,9 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(DARWIN 1)
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
message(STATUS "CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY = '${CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}'")
string(REGEX MATCH "-mmacosx-version-min=([^ ]+)" scratch "$ENV{LL_BUILD}")
set(CMAKE_OSX_DEPLOYMENT_TARGET "${CMAKE_MATCH_1}")
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET = '${CMAKE_OSX_DEPLOYMENT_TARGET}'")
@ -210,6 +213,9 @@ set(GRID agni CACHE STRING "Target Grid")
set(FLICKR_API_KEY "daaabff93a967e0f37fa18863bb43b29")
set(FLICKR_API_SECRET "846f0958020b553e")
# Discord client key.
set(DDISCORD_API_KEY "427641535253708801")
set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
set(SIGNING_IDENTITY "" CACHE STRING "Specifies the signing identity to use, if necessary.")

View File

@ -56,7 +56,7 @@ LLControlGroup gWarningSettings("Warnings"); // persists ignored dialogs/warning
#include "llavatarname.h"
// Stub for rlvGetAnonym
const std::string& rlvGetAnonym(const LLAvatarName& avName)
std::string rlvGetAnonym(const LLAvatarName& avName)
{
static std::string strAnonym = "A resident";
return strAnonym;

View File

@ -205,14 +205,10 @@ private:
friend BlockTimer timeThisBlock(BlockTimerStatHandle&);
BlockTimer(BlockTimerStatHandle& timer);
#if !defined(MSC_VER) || MSC_VER < 1700
// Visual Studio 2010 has a bug where capturing an object returned by value
// into a local reference requires access to the copy constructor at the call site.
// This appears to be fixed in 2012.
public:
#endif
// no-copy
BlockTimer(const BlockTimer& other) {};
BlockTimer(const BlockTimer& other);
BlockTimer& operator=(const BlockTimer& other);
private:
U64 mStartTime;

View File

@ -37,6 +37,42 @@ LLMortician::~LLMortician()
sGraveyard.remove(this);
}
U32 LLMortician::logClass(std::stringstream &str)
{
U32 size = sGraveyard.size();
str << "Mortician graveyard count: " << size;
str << " Zealous: " << (sDestroyImmediate ? "True" : "False");
if (size == 0)
{
return size;
}
str << " Output:\n";
std::list<LLMortician*>::iterator iter = sGraveyard.begin();
std::list<LLMortician*>::iterator end = sGraveyard.end();
while (iter!=end)
{
LLMortician* dead = *iter;
iter++;
// Be as detailed and safe as possible to figure out issues
str << "Pointer: " << dead;
if (dead)
{
try
{
str << " Is dead: " << (dead->isDead() ? "True" : "False");
str << " Name: " << typeid(*dead).name();
}
catch (...)
{
}
}
str << "\n";
}
str << "--------------------------------------------";
return size;
}
void LLMortician::updateClass()
{
while (!sGraveyard.empty())

View File

@ -34,6 +34,8 @@ class LL_COMMON_API LLMortician
{
public:
LLMortician() { mIsDead = FALSE; }
static U32 graveyardCount() { return sGraveyard.size(); };
static U32 logClass(std::stringstream &str);
static void updateClass();
virtual ~LLMortician();
void die();

View File

@ -5293,22 +5293,15 @@ bool LLVolumeFace::cacheOptimize()
// LLVCacheVertexData suddenly does point to unrelated vertices. It is an interesting fact that this is no problem for the
// windows version.
//
// To solve the issue with the pointer invalidation it would make sense to use a std::vector< U16 > for triangle indices, sort this
// using
// To solve the issue with the pointer invalidation it use a std::vector< U16 > for triangle indices, sort this using
// std::sort( v.begin(), v.end(), [&triangle_data](U16 rhs, U16 lhs ){ return triangle_data[rhs].mScore > triangle_data[lhs].mScore; }
// Then access all LLVCacheTriangleData> via triangle_data[ v[ idx ] ].
//
// This will help indeed with the destroyed triangles; but the result will still not be perfect and there are problems with alpha due to
// what looks like z order.
//
// It is peculiar that none of this happens when compiling with MSVC.
// Sadly for Linux it seems to be a decision between two evils
// - Disable cacheOptimize and have correct meshes but potentially a bit of less FPS.
// - Enable/fix cacheOptimize, potentially have a bit higher FPS but broken meshes.
//
// Having meshes correctly seems to be a bit of a lesser evil. Then do some wider testing on different systems to test for any other potential sideeffects.
// Unfortunately this is a bit of a messy interwoven change all of this method, alternative is to copy a Linux specific version. Which
// won't be that great either
// NB The change really should be safe for Winows too, in fact it is surprising Windows does not suffer fro the sae bug. Just cannot test
// the windows versions right now.
#ifndef LL_LINUX
LLVCacheLRU cache;
if (mNumVertices < 3)
@ -5343,6 +5336,13 @@ bool LLVolumeFace::cacheOptimize()
triangle_data[tri_idx].mVertex[i%3] = &(vertex_data[idx]);
}
// <FS:ND> FIRE-23370/BUG-8801/MAIN-5060
#ifdef LL_LINUX
std::vector< U32 > v;
for (U32 j = 0; j < triangle_data.size(); ++j)
v.push_back( j );
#endif
/*F32 pre_acmr = 1.f;
//measure cache misses from before rebuild
{
@ -5374,14 +5374,28 @@ bool LLVolumeFace::cacheOptimize()
}
//sort triangle data by score
// <FS:ND> FIRE-23370/BUG-8801/MAIN-5060
#ifndef LL_LINUX
std::sort(triangle_data.begin(), triangle_data.end());
#else
std::sort( v.begin(), v.end(),
[&triangle_data](U16 rhs, U16 lhs )
{ return triangle_data[rhs].mScore > triangle_data[lhs].mScore; }
);
#endif
std::vector<U16> new_indices;
LLVCacheTriangleData* tri;
//prime pump by adding first triangle to cache;
// <FS:ND> FIRE-23370/BUG-8801/MAIN-5060
#ifndef LL_LINUX
tri = &(triangle_data[0]);
#else
tri = &(triangle_data[v[0]]);
#endif
cache.addTriangle(tri);
new_indices.push_back(tri->mVertex[0]->mIdx);
new_indices.push_back(tri->mVertex[1]->mIdx);
@ -5398,11 +5412,21 @@ bool LLVolumeFace::cacheOptimize()
breaks++;
for (U32 j = 0; j < triangle_data.size(); ++j)
{
// <FS:ND> FIRE-23370/BUG-8801/MAIN-5060
#ifndef LL_LINUX
if (triangle_data[j].mActive)
{
tri = &(triangle_data[j]);
break;
}
#else
if (triangle_data[v[j]].mActive)
{
tri = &(triangle_data[v[j]]);
break;
}
#endif
}
}
@ -5534,8 +5558,6 @@ bool LLVolumeFace::cacheOptimize()
//std::string result = llformat("ACMR pre/post: %.3f/%.3f -- %d triangles %d breaks", pre_acmr, post_acmr, mNumIndices/3, breaks);
//LL_INFOS() << result << LL_ENDL;
#endif // <FS:ND/>
return true;
}

View File

@ -44,6 +44,7 @@ bool LLTransUtil::parseStrings(const std::string& xml_filename, const std::set<s
bool success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root, LLDir::ALL_SKINS);
if (!success)
{
gDirUtilp->dumpCurrentDirectories(LLError::LEVEL_WARN);
LL_ERRS() << "Couldn't load string table " << xml_filename << ". Please reinstall viewer from https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
return false;
}

View File

@ -929,7 +929,7 @@ std::string LLUrlEntryAgentUserName::getName(const LLAvatarName& avatar_name)
// [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
// Defined in rlvcommon.cpp - redirects to RlvStrings::getAnonym() since we can't really get to that class from here
extern const std::string& rlvGetAnonym(const LLAvatarName& avName);
extern std::string rlvGetAnonym(const LLAvatarName& avName);
//
// LLUrlEntryAgentRLVAnonymizedName Describes an RLV anonymized agent name Url, e.g.,

View File

@ -37,7 +37,7 @@
// [RLVa:KB] - Checked: 2010-11-12 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
// Stub for rlvGetAnonym
const std::string& rlvGetAnonym(const LLAvatarName& avName)
std::string rlvGetAnonym(const LLAvatarName& avName)
{
static std::string strAnonym = "A resident";
return strAnonym;

View File

@ -1185,26 +1185,26 @@ bool LLDir::setSoundCacheDir(const std::string& path)
}
// </FS:Ansariel>
void LLDir::dumpCurrentDirectories()
void LLDir::dumpCurrentDirectories(LLError::ELevel level)
{
LL_DEBUGS("AppInit","Directories") << "Current Directories:" << LL_ENDL;
LL_VLOGS(level, "AppInit","Directories") << "Current Directories:" << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " CurPath: " << getCurPath() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " AppName: " << getAppName() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " TempDir: " << getTempDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " CAFile: " << getCAFile() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " SkinBaseDir: " << getSkinBaseDir() << LL_ENDL;
LL_DEBUGS("AppInit","Directories") << " SkinDir: " << getSkinDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " CurPath: " << getCurPath() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " AppName: " << getAppName() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " ExecutableFilename: " << getExecutableFilename() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " ExecutableDir: " << getExecutableDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " ExecutablePathAndName: " << getExecutablePathAndName() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " WorkingDir: " << getWorkingDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " AppRODataDir: " << getAppRODataDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " OSUserDir: " << getOSUserDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " OSUserAppDir: " << getOSUserAppDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " LindenUserDir: " << getLindenUserDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " TempDir: " << getTempDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " CAFile: " << getCAFile() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " SkinBaseDir: " << getSkinBaseDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " SkinDir: " << getSkinDir() << LL_ENDL;
// [SL:KB] - Patch: Viewer-Skins | Checked: 2011-02-14 (Catznip-2.5)
LL_DEBUGS("AppInit","Directories") << " SkinThemeDir: " << getSkinThemeDir() << LL_ENDL;
LL_VLOGS(level, "AppInit", "Directories") << " SkinThemeDir: " << getSkinThemeDir() << LL_ENDL;
// [/SL:KB]
}

View File

@ -251,7 +251,7 @@ class LLDir
virtual bool setSoundCacheDir(const std::string& path);
// </FS:Ansariel>
virtual void dumpCurrentDirectories();
virtual void dumpCurrentDirectories(LLError::ELevel level = LLError::LEVEL_DEBUG);
// Utility routine
std::string buildSLOSCacheDir() const;

View File

@ -27,11 +27,6 @@
#import <Cocoa/Cocoa.h>
#import "llopenglview-objc.h"
// [Cinder] Override NSApplication to give us access to sendEvent
@interface LLNSApplication : NSApplication
@end
// [/Cinder]
@interface LLAppDelegate : NSObject <NSApplicationDelegate> {
LLNSWindow *window;
NSWindow *inputWindow;
@ -51,3 +46,6 @@
- (void) languageUpdated;
- (bool) romanScript;
@end
@interface LLApplication : NSApplication
@end

View File

@ -519,17 +519,6 @@ attributedStringInfo getSegments(NSAttributedString *str)
{
[[self inputContext] handleEvent:theEvent];
}
// OS X intentionally does not send us key-up information on cmd-key combinations.
// This behaviour is not a bug, and only applies to cmd-combinations (no others).
// Since SL assumes we receive those, we fake it here.
// <FS:Ansariel> Cinder Roxley's fix for FIRE-11648
//if (mModifiers & NSCommandKeyMask && !mHasMarkedText)
//{
// eventData.mKeyEvent = NativeKeyEventData::KEYUP;
// callKeyUp([theEvent keyCode], mModifiers);
//}
// </FS:Ansariel>
}
- (void)flagsChanged:(NSEvent *)theEvent
@ -837,7 +826,9 @@ attributedStringInfo getSegments(NSAttributedString *str)
[super setMarkedText:aString selectedRange:selectedRange replacementRange:replacementRange];
if ([aString length] == 0) // this means Input Widow becomes empty
{
[_window orderOut:_window]; // Close this to avoid empty Input Window
//[_window orderOut:_window]; // Close this to avoid empty Input Window
// <FS:TS> Xcode 11 compile fix
[self.window orderOut:self.window]; // Close this to avoid empty Input Window
}
}
@ -861,7 +852,9 @@ attributedStringInfo getSegments(NSAttributedString *str)
(mKeyPressed >= 0xF700 && mKeyPressed <= 0xF8FF))
{
// this is case a) of above comment
[_window orderOut:_window]; // to avoid empty Input Window
// <FS:TS> Xcode 11 compile fix
//[_window orderOut:_window]; // to avoid empty Input Window
[self.window orderOut:self.window]; // to avoid empty Input Window
}
}

View File

@ -77,7 +77,7 @@ BOOL check_for_card(const char* RENDERER, const char* bad_card)
"\n"
"If you own a supported card and continue to receive this message, try \n"
"updating to the latest video card drivers. Otherwise contact the\n"
"Phoenix Viewer Support group in world, or visit www.phoenixviewer.com\n"
"Phoenix Viewer Support group in world, or visit www.firestormviewer.org\n"
"for support.\n"
"\n"
"You can try to run Firestorm, but it will probably crash or run\n"

View File

@ -1631,6 +1631,18 @@ configure_file(
list(APPEND viewer_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/exoflickrkeys.h)
# </exodus>
#<FS:LO> Discord rich presence
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/fsdiscordkey.h.in
${CMAKE_CURRENT_BINARY_DIR}/fsdiscordkey.h
@ONLY
)
list(APPEND viewer_HEADER_FILES ${CMAKE_CURRENT_BINARY_DIR}/fsdiscordkey.h)
LIST(APPEND viewer_HEADER_FILES fsfloaterdiscord.h fsdiscordconnect.h)
LIST(APPEND viewer_SOURCE_FILES fsfloaterdiscord.cpp fsdiscordconnect.cpp)
#</FS:LO>
# <FS:TS> Generate the version information header file.
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/fsversionvalues.h.in
@ -1687,13 +1699,6 @@ if (DARWIN)
)
# [FS]
#<FS:LO> Discord rich presence
if( USE_DISCORD )
LIST(APPEND viewer_HEADER_FILES fsfloaterdiscord.h fsdiscordconnect.h)
LIST(APPEND viewer_SOURCE_FILES fsfloaterdiscord.cpp fsdiscordconnect.cpp)
endif()
#</FS:LO>
find_library(AGL_LIBRARY AGL)
find_library(APPKIT_LIBRARY AppKit)
find_library(COCOA_LIBRARY Cocoa)
@ -1753,13 +1758,6 @@ if (LINUX)
LIST(APPEND viewer_SOURCE_FILES desktopnotifierlinux.cpp growlmanager.cpp)
# [FS] Growl support
#<FS:LO> Discord rich presence
if( USE_DISCORD )
LIST(APPEND viewer_HEADER_FILES fsfloaterdiscord.h fsdiscordconnect.h)
LIST(APPEND viewer_SOURCE_FILES fsfloaterdiscord.cpp fsdiscordconnect.cpp)
endif()
#</FS:LO>
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed")
set(viewer_LIBRARIES
@ -1803,13 +1801,6 @@ if (WINDOWS)
# [FS]
)
#<FS:LO> Discord rich presence
if( USE_DISCORD )
LIST(APPEND viewer_HEADER_FILES fsfloaterdiscord.h fsdiscordconnect.h)
LIST(APPEND viewer_SOURCE_FILES fsfloaterdiscord.cpp fsdiscordconnect.cpp)
endif()
#</FS:LO>
# precompiled header configuration
# llviewerprecompiledheaders.cpp generates
# the .pch file.
@ -2452,9 +2443,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${GROWL_LIBRARY}
)
if( USE_DISCORD )
target_link_libraries(${VIEWER_BINARY_NAME} ${DISCORD_LIBRARY} )
endif()
target_link_libraries(${VIEWER_BINARY_NAME} ${DISCORD_LIBRARY} )
if (BUGSPLAT_DB)
target_link_libraries(${VIEWER_BINARY_NAME}
@ -2573,7 +2562,7 @@ if (DARWIN)
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2019 The Phoenix Firestorm Project, Inc.")
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLNSApplication")
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
# https://blog.kitware.com/upcoming-in-cmake-2-8-12-osx-rpath-support/
set(CMAKE_MACOSX_RPATH 1)

View File

@ -1 +1 @@
6.3.2
6.3.3

View File

@ -6733,7 +6733,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://wiki.phoenixviewer.com/[TOPIC]</string>
<string>https://wiki.firestormviewer.org/[TOPIC]</string>
<key>Backup</key>
<integer>0</integer>
</map>
@ -6746,7 +6746,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>http://www.phoenixviewer.com/viewerfloater/howtofloater/index.html</string>
<string>https://wiki.firestormviewer.org/start#basic_functions</string>
<key>Backup</key>
<integer>0</integer>
</map>
@ -18590,7 +18590,6 @@ Change of this parameter will affect the layout of buttons in notification toast
<string>script_floater</string>
<string>world_map</string>
<string>preferences</string>
<string>facebook</string>
<string>flickr</string>
<string>twitter</string>
</array>

View File

@ -1238,7 +1238,7 @@
<key>FSEnableDiscordIntegration</key>
<map>
<key>Comment</key>
<string>If enabled, well allow Firestorm to connect to discord if open and share location data with. Default (false)</string>
<string>If enabled, will allow Firestorm to connect to discord if open and share location data with. Default (false)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@ -1268,5 +1268,16 @@
<key>Value</key>
<array></array>
</map>
<key>FSShareNameToDiscord</key>
<map>
<key>Comment</key>
<string>If enabled, will allow Firestorm to share avatar user and display name with discord. Default (false)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -15,8 +15,8 @@
<file>nirmala.ttf</file>
<file>tahoma.ttf</file>
<file load_collection="true">Cambria.ttc</file>
<file>malgun.ttf</file>
</os>
<file>malgun.ttf</file>
</os>
<os name="Mac">
<file>ヒラギノ角ゴシック W3.ttc</file>
<file>ヒラギノ角ゴ Pro W3.otf</file>

View File

@ -48,9 +48,7 @@
#include "boost/algorithm/string/case_conv.hpp"
#ifndef DISCORD_API_KEY
#define DISCORD_API_KEY ""
#endif
#include "fsdiscordkey.h"
boost::scoped_ptr<LLEventPump> FSDiscordConnect::sStateWatcher(new LLEventStream("DiscordConnectState"));
boost::scoped_ptr<LLEventPump> FSDiscordConnect::sInfoWatcher(new LLEventStream("DiscordConnectInfo"));
@ -207,10 +205,11 @@ void FSDiscordConnect::updateRichPresence()
DiscordRichPresence discordPresence;
memset(&discordPresence, 0, sizeof(discordPresence));
discordPresence.state = region_name.c_str();
LLAvatarName av_name;
std::string name;
if (RlvActions::canShowName(RlvActions::SNC_DEFAULT, gAgentID))
if (RlvActions::canShowName(RlvActions::SNC_DEFAULT, gAgentID) && gSavedPerAccountSettings.getBOOL("FSShareNameToDiscord"))
{
LLAvatarName av_name;
if (LLAvatarNameCache::get(gAgentID, &av_name))
{
name = av_name.getCompleteName(true, true);
@ -219,12 +218,9 @@ void FSDiscordConnect::updateRichPresence()
{
name = gAgentUsername;
}
discordPresence.details = name.c_str();
}
else
{
name = RlvStrings::getAnonym(av_name);
}
discordPresence.details = name.c_str();
discordPresence.startTimestamp = mConnectTime;
discordPresence.largeImageKey = "secondlife_512";
@ -233,7 +229,8 @@ void FSDiscordConnect::updateRichPresence()
std::string appName = std::string("via " + APP_NAME);
discordPresence.smallImageText = appName.c_str();
discordPresence.partyId = gAgent.getRegion()->getRegionID().asString().c_str();
std::string regionId = gAgent.getRegion()->getRegionID().asString();
discordPresence.partyId = regionId.c_str();
discordPresence.partySize = gAgent.getRegion()->mMapAvatars.size();
discordPresence.partyMax = LLRegionInfoModel::instance().mAgentLimit;
Discord_UpdatePresence(&discordPresence);

View File

@ -0,0 +1,4 @@
// THIS FILE IS AUTOGENERATED BY THE BUILD PROCESS
// You can either set the keys in Variables.cmake or at the autobuild command
#define DISCORD_API_KEY "@DDISCORD_API_KEY@"

View File

@ -29,16 +29,16 @@
#include "fsfloaterdiscord.h"
#include "fsdiscordconnect.h"
#include "llagent.h"
#include "llagentui.h"
#include "llcheckboxctrl.h"
#include "llcombobox.h"
#include "fsdiscordconnect.h"
#include "llfloaterreg.h"
#include "lltrans.h"
#include "llviewerregion.h"
#include "llviewercontrol.h"
#include "lltabcontainer.h"
#include "lltrans.h"
#include "llviewercontrol.h"
#include "llviewerregion.h"
#include "boost/algorithm/string/case_conv.hpp"
@ -48,7 +48,7 @@
void FSFloaterDiscord::onVisibilityChange(BOOL visible)
{
if(visible)
if (visible)
{
LLEventPumps::instance().obtain("DiscordConnectState").stopListening("FSDiscordAccountPanel");
LLEventPumps::instance().obtain("DiscordConnectState").listen("FSDiscordAccountPanel", boost::bind(&FSFloaterDiscord::onDiscordConnectStateChange, this, _1));
@ -64,7 +64,7 @@ void FSFloaterDiscord::onVisibilityChange(BOOL visible)
}
//Connected
if(FSDiscordConnect::instance().isConnected())
if (FSDiscordConnect::instance().isConnected())
{
showConnectedLayout();
}
@ -86,14 +86,9 @@ void FSFloaterDiscord::onVisibilityChange(BOOL visible)
}
}
void FSFloaterDiscord::onAllow()
{
gSavedPerAccountSettings.setBOOL("FSEnableDiscordIntegration", mAllowCheckbox->get());
}
bool FSFloaterDiscord::onDiscordConnectStateChange(const LLSD& data)
{
if(FSDiscordConnect::instance().isConnected())
if (FSDiscordConnect::instance().isConnected())
{
mAccountCaptionLabel->setText(getString("discord_connected"));
showConnectedLayout();
@ -111,7 +106,7 @@ bool FSFloaterDiscord::onDiscordConnectInfoChange()
{
LLSD info = FSDiscordConnect::instance().getInfo();
if(info.has("name"))
if (info.has("name"))
{
mAccountNameLabel->setText(info["name"].asString());
}
@ -121,7 +116,7 @@ bool FSFloaterDiscord::onDiscordConnectInfoChange()
void FSFloaterDiscord::showConnectButton()
{
if(!mConnectButton->getVisible())
if (!mConnectButton->getVisible())
{
mConnectButton->setVisible(TRUE);
mDisconnectButton->setVisible(FALSE);
@ -130,7 +125,7 @@ void FSFloaterDiscord::showConnectButton()
void FSFloaterDiscord::hideConnectButton()
{
if(mConnectButton->getVisible())
if (mConnectButton->getVisible())
{
mConnectButton->setVisible(FALSE);
mDisconnectButton->setVisible(TRUE);
@ -140,7 +135,7 @@ void FSFloaterDiscord::hideConnectButton()
void FSFloaterDiscord::showDisconnectedLayout()
{
mAccountCaptionLabel->setText(getString("discord_disconnected"));
mAccountNameLabel->setText(std::string(""));
mAccountNameLabel->setText(std::string());
showConnectButton();
}
@ -161,23 +156,16 @@ void FSFloaterDiscord::onDisconnect()
}
FSFloaterDiscord::FSFloaterDiscord(const LLSD& key) : LLFloater(key),
mStatusText(nullptr)
mStatusText(nullptr)
{
mCommitCallbackRegistrar.add("FSDiscord.Connect", boost::bind(&FSFloaterDiscord::onConnect, this));
mCommitCallbackRegistrar.add("FSDiscord.Disconnect", boost::bind(&FSFloaterDiscord::onDisconnect, this));
mCommitCallbackRegistrar.add("FSDiscord.Allow", boost::bind(&FSFloaterDiscord::onAllow, this));
mCommitCallbackRegistrar.add("FSDiscord.Combo", boost::bind(&FSFloaterDiscord::onCombo, this));
mCommitCallbackRegistrar.add("FSDiscord.Add", boost::bind(&FSFloaterDiscord::onAdd, this));
mCommitCallbackRegistrar.add("FSDiscord.Rem", boost::bind(&FSFloaterDiscord::onRemove, this));
setVisibleCallback(boost::bind(&FSFloaterDiscord::onVisibilityChange, this, _2));
}
void FSFloaterDiscord::onCombo()
{
gSavedPerAccountSettings.setU32("FSMaxSharedMaturity", mMaturityCombo->getSelectedValue().asInteger());
}
void FSFloaterDiscord::onAdd()
{
std::string name = mBlacklistEntry->getText();
@ -257,12 +245,8 @@ BOOL FSFloaterDiscord::postBuild()
mAccountNameLabel = getChild<LLTextBox>("account_name_label");
mDisconnectButton = getChild<LLButton>("disconnect_btn");
mConnectButton = getChild<LLButton>("connect_btn");
mAllowCheckbox = getChild<LLCheckBoxCtrl>("startup_check");
mMaturityCombo = getChild<LLComboBox>("maturity_desired_combobox");
mBlacklistedNames = getChild<LLScrollListCtrl>("blacklisted_names");
mBlacklistEntry = getChild<LLLineEditor>("blacklist_entry");
mAddBlacklist = getChild<LLButton>("blacklist_entry_add");
mRemBlacklist = getChild<LLButton>("blacklist_entry_rem");
LLSD list = gSavedPerAccountSettings.getLLSD("FSBlacklistedRegionNames");
for (LLSD::array_const_iterator iter = list.beginArray();
@ -272,10 +256,6 @@ BOOL FSFloaterDiscord::postBuild()
mBlacklistedNames->addSimpleElement(iter->asString());
}
mMaturityCombo->selectByValue((LLSD::Integer)gSavedPerAccountSettings.getU32("FSMaxSharedMaturity"));
mAllowCheckbox->set(gSavedPerAccountSettings.getBOOL("FSEnableDiscordIntegration"));
// Connection status widgets
mStatusText = getChild<LLTextBox>("connection_status_text");
@ -320,4 +300,3 @@ void FSFloaterDiscord::draw()
}
LLFloater::draw();
}

View File

@ -28,12 +28,12 @@
#define FS_FSFLOATERDISCORD_H
#include "llfloater.h"
#include "lltextbox.h"
class LLCheckBoxCtrl;
class LLComboBox;
class LLScrollListCtrl;
class LLLineEditor;
class LLTextBox;
class FSFloaterDiscord : public LLFloater
{
@ -48,10 +48,7 @@ private:
bool onDiscordConnectStateChange(const LLSD& data);
bool onDiscordConnectInfoChange();
void onConnect();
void onUseAnotherAccount();
void onDisconnect();
void onAllow();
void onCombo();
void onAdd();
void onRemove();
@ -60,19 +57,13 @@ private:
void showDisconnectedLayout();
void showConnectedLayout();
LLTextBox * mAccountCaptionLabel;
LLTextBox * mAccountNameLabel;
LLButton * mConnectButton;
LLButton * mDisconnectButton;
LLCheckBoxCtrl * mAllowCheckbox;
LLComboBox * mMaturityCombo;
LLScrollListCtrl * mBlacklistedNames;
LLLineEditor * mBlacklistEntry;
LLButton * mAddBlacklist;
LLButton * mRemBlacklist;
LLTextBox* mStatusText;
LLTextBox* mAccountCaptionLabel;
LLTextBox* mAccountNameLabel;
LLButton* mConnectButton;
LLButton* mDisconnectButton;
LLScrollListCtrl* mBlacklistedNames;
LLLineEditor* mBlacklistEntry;
LLTextBox* mStatusText;
};
#endif // FS_FSFLOATERDISCORD_H

View File

@ -791,7 +791,9 @@ RMDir "$INSTDIR"
IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
FOLDERFOUND:
MessageBox MB_OK $(DeleteProgramFilesMB) /SD IDOK IDOK NOFOLDER
# Silent uninstall always removes all files (/SD IDYES)
MessageBox MB_YESNO $(DeleteProgramFilesMB) /SD IDYES IDNO NOFOLDER
RMDir /r "$INSTDIR"
NOFOLDER:

View File

@ -126,7 +126,7 @@ SOLUTION:- Usually this indicates that your graphics card does not meet
<https://help.ubuntu.com/community/BinaryDriverHowto>
* If your distribution does not make it easy, then you can download the
required Linux drivers straight from your graphics card manufacturer:
- <http://wiki.phoenixviewer.com/phoenix_downloads#video_drivers>
- <https://wiki.firestormviewer.org/downloads#video_drivers>
PROBLEM 2:- My whole system seems to hang when running Firestorm.
SOLUTION:- This is typically a hardware/driver issue. The first thing to
@ -201,19 +201,19 @@ configuration options for advanced troubleshooters.
We're pleased to have released Firestorm client's source code under
an Open Source license compatible with the 'LGPL'.
<http://wiki.phoenixviewer.com/phoenix_downloads#source_code>
<https://wiki.firestormviewer.org/downloads#source_code>
8. GETTING MORE HELP AND REPORTING PROBLEMS
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
For general help and support with Firestorm:
<http://wiki.phoenixviewer.com>
<http://wiki.firestormviewer.org>
In-world discussion:
Main support: Join one of our in-world support groups.
<http://wiki.phoenixviewer.com/firestorm_in-world_groups>
<http://wiki.firestormviewer.org/firestorm_in-world_groups>
There is also a 'Linux Client Users' group inside Second Life which
is free to join. You can find it by pressing the 'Search' button at
@ -222,7 +222,7 @@ searching for 'Linux'. This group is useful for discussing Linux
issues with fellow Linux client users who are online.
The Firestorm Issue Tracker:
<http://jira.phoenixviewer.com/>
<https://jira.firestormviewer.org/>
This is the right place for finding known issues and reporting new
bugs in all Firestorm releases if you find that the Troubleshooting
section in this file hasn't helped.

View File

@ -13,7 +13,7 @@ function install_desktop_entry()
local desktop_entry="\
[Desktop Entry]\n\
Name=Firestorm Viewer\n\
Comment=Client for accessing 3D virtual words\n\
Comment=Client for accessing 3D virtual worlds\n\
Exec=${installation_prefix}/firestorm\n\
Icon=${installation_prefix}/firestorm_icon.png\n\
Terminal=false\n\

View File

@ -183,7 +183,7 @@ most common problems when launching the Viewer (particularly
loading shared libraries') may be solved by enabling 32-bit
architecture and installing one or more 32-bit compatibility libraries.
Consult the Firestorm wiki at
http://wiki.phoenixviewer.com/32-bit_viewer_in_64-bit_linux
http://wiki.firestormviewer.org/32-bit_viewer_in_64-bit_linux
EOFMARKER
fi
fi

View File

@ -4416,6 +4416,23 @@ BOOL LLAgent::getHomePosGlobal( LLVector3d* pos_global )
return TRUE;
}
bool LLAgent::isInHomeRegion()
{
if(!mHaveHomePosition)
{
return false;
}
if (!getRegion())
{
return false;
}
if (getRegion()->getHandle() != mHomeRegionHandle)
{
return false;
}
return true;
}
void LLAgent::clearVisualParams(void *data)
{
if (isAgentAvatarValid())

View File

@ -237,6 +237,8 @@ public:
void setStartPosition(U32 location_id); // Marks current location as start, sends information to servers
void setHomePosRegion(const U64& region_handle, const LLVector3& pos_region);
BOOL getHomePosGlobal(LLVector3d* pos_global);
bool isInHomeRegion();
private:
void setStartPositionSuccess(const LLSD &result);

View File

@ -37,21 +37,6 @@
#include "llappviewermacosx-for-objc.h"
#include <Carbon/Carbon.h> // Used for Text Input Services ("Safe" API - it's supported)
// [Cinder] We need to override sendEvent in NSApplication and force those
// Apple bastards to send us Command keyUp events!
@implementation LLNSApplication
- (void)sendEvent:(NSEvent *)event {
// Fuck you, conventions!
if ([event type] == NSKeyUp && ([event modifierFlags] & NSCommandKeyMask))
[[self keyWindow] sendEvent:event];
else
[super sendEvent:event];
}
@end
// [Cinder]
@implementation LLAppDelegate
@synthesize window;
@ -359,3 +344,16 @@ struct AttachmentInfo
#endif // LL_BUGSPLAT
@end
@implementation LLApplication
- (void)sendEvent:(NSEvent *)event
{
[super sendEvent:event];
if ([event type] == NSKeyUp && ([event modifierFlags] & NSCommandKeyMask))
{
[[self keyWindow] sendEvent:event];
}
}
@end

View File

@ -3443,6 +3443,7 @@ void LLAppViewer::initStrings()
if (strings_path_full.empty() || !LLFile::isfile(strings_path_full))
{
// initial check to make sure files are there failed
gDirUtilp->dumpCurrentDirectories(LLError::LEVEL_WARN);
LL_ERRS() << "Viewer failed to find localization and UI files. Please reinstall viewer from https://secondlife.com/support/downloads/ and contact https://support.secondlife.com if issue persists after reinstall." << LL_ENDL;
}
LLTransUtil::parseStrings(strings_file, default_trans_args);
@ -3733,7 +3734,7 @@ LLSD LLAppViewer::getViewerInfo() const
// https://releasenotes.secondlife.com/viewer/2.1.0.123456.html
std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL");
// <FS:Ansariel> FIRE-13993: Leave out channel so we can use a URL like
// http://wiki.phoenixviewer.com/firestorm_change_log_x.y.z.rev
// http://wiki.firestormviewer.org/firestorm_change_log_x.y.z.rev
//if (! LLStringUtil::endsWith(url, "/"))
// url += "/";
//url += LLURI::escape(LLVersionInfo::getVersion()) + ".html";
@ -5345,10 +5346,37 @@ void LLAppViewer::saveFinalSnapshot()
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
snap_filename += SCREEN_LAST_FILENAME;
snap_filename += LLStartUp::getScreenLastFilename();
// use full pixel dimensions of viewer window (not post-scale dimensions)
gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, TRUE);
gViewerWindow->saveSnapshot(snap_filename,
gViewerWindow->getWindowWidthRaw(),
gViewerWindow->getWindowHeightRaw(),
FALSE,
TRUE,
LLSnapshotModel::SNAPSHOT_TYPE_COLOR,
LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
mSavedFinalSnapshot = TRUE;
if (gAgent.isInHomeRegion())
{
LLVector3d home;
if (gAgent.getHomePosGlobal(&home) && dist_vec(home, gAgent.getPositionGlobal()) < 10)
{
// We are at home position or close to it, see if we need to create home screenshot
// Notes:
// 1. It might be beneficial to also replace home if file is too old
// 2. This is far from best way/place to update screenshot since location might be not fully loaded,
// but we don't have many options
std::string snap_home = gDirUtilp->getLindenUserDir();
snap_home += gDirUtilp->getDirDelimiter();
snap_home += LLStartUp::getScreenHomeFilename();
if (!gDirUtilp->fileExists(snap_home))
{
// We are at home position yet no home image exist, fix it
LLFile::copy(snap_filename, snap_home);
}
}
}
}
}

View File

@ -385,12 +385,12 @@ void ll_nvapi_init(NvDRSSessionHandle hSession)
#if DEBUGGING_SEH_FILTER
# define WINMAIN DebuggingWinMain
#else
# define WINMAIN WinMain
# define WINMAIN wWinMain
#endif
int APIENTRY WINMAIN(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
PWSTR pCmdLine,
int nCmdShow)
{
const S32 MAX_HEAPS = 255;
@ -430,8 +430,8 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// *FIX: global
gIconResource = MAKEINTRESOURCE(IDI_LL_ICON);
LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(ll_convert_wide_to_string(pCmdLine).c_str());
gOldTerminateHandler = std::set_terminate(exceptionTerminateHandler);
viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
@ -543,9 +543,9 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
// in a method that uses object destructors. Go figure.
// This winmain just calls the real winmain inside __try.
// The __except calls our exception filter function. For debugging purposes.
int APIENTRY WinMain(HINSTANCE hInstance,
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
PWSTR lpCmdLine,
int nCmdShow)
{
__try

View File

@ -522,13 +522,14 @@ void LLCOFWearables::populateAttachmentsAndBodypartsLists(const LLInventoryModel
{
mAttachments->sort();
mAttachments->notify(REARRANGE); //notifying the parent about the list's size change (cause items were added with rearrange=false)
setAttachmentsTitle();
}
else
{
mAttachments->setNoItemsCommentText(LLTrans::getString("no_attachments"));
}
setAttachmentsTitle();
if (mBodyParts->size())
{
mBodyParts->sort();

View File

@ -327,10 +327,13 @@ LLControlAvatar *LLControlAvatar::createControlAvatar(LLVOVolume *obj)
{
LLControlAvatar *cav = (LLControlAvatar*)gObjectList.createObjectViewer(LL_PCODE_LEGACY_AVATAR, gAgent.getRegion(), CO_FLAG_CONTROL_AVATAR);
cav->mRootVolp = obj;
if (cav)
{
cav->mRootVolp = obj;
// Sync up position/rotation with object
cav->matchVolumeTransform();
// Sync up position/rotation with object
cav->matchVolumeTransform();
}
return cav;
}

View File

@ -1745,6 +1745,12 @@ bool LLDrawPoolAvatar::getRiggedGeometry(
face->setIndicesIndex(0);
//rigged faces do not batch textures
// <FS:ND> if needed reset drawinfo as the face was set up for texture for batching
if (face->getTextureIndex() != 0xFF )
face->setDrawInfo(nullptr);
// <FS:ND>
face->setTextureIndex(255);
if (buffer.isNull() || buffer->getTypeMask() != data_mask || !buffer->isWriteable())

View File

@ -478,7 +478,10 @@ void LLFace::setTextureIndex(U8 index)
}
else
{
// <FS:ND> Restore old test, as the new one would also crash on empty texture list, which is exactly what the original test did avoid
//if (mDrawInfo && mDrawInfo->mTextureList.size() <= 1)
if (mDrawInfo && !mDrawInfo->mTextureList.empty())
// </FS:ND>
{
LL_ERRS() << "Face with no texture index references indexed texture draw info." << LL_ENDL;
}

View File

@ -2332,9 +2332,6 @@ void LLPanelLandOptions::refresh()
mCheckShowDirectory->setLabel(getString("DirectoryFee", map));
}
}
// <FS:Ansariel> Disable label text for show avi checkbox as well
getChild<LLTextBox>("allow_label5")->setColor(LLUIColorTable::instance().getColor(mSeeAvatarsCtrl->getEnabled() ? "LabelTextColor" : "LabelDisabledColor"));
}
S32 LLPanelLandOptions::getDirectoryFee()

View File

@ -41,6 +41,7 @@ const S32 SIZE_OF_ONE_KB = 1024;
LLFloaterMyScripts::LLFloaterMyScripts(const LLSD& seed)
: LLFloater(seed),
mGotAttachmentMemoryUsed(false),
mAttachmentDetailsRequested(false),
mAttachmentMemoryMax(0),
mAttachmentMemoryUsed(0),
mGotAttachmentURLsUsed(false),
@ -55,12 +56,24 @@ BOOL LLFloaterMyScripts::postBuild()
std::string msg_waiting = LLTrans::getString("ScriptLimitsRequestWaiting");
getChild<LLUICtrl>("loading_text")->setValue(LLSD(msg_waiting));
return requestAttachmentDetails();
mAttachmentDetailsRequested = requestAttachmentDetails();
return TRUE;
}
BOOL LLFloaterMyScripts::requestAttachmentDetails()
// virtual
void LLFloaterMyScripts::onOpen(const LLSD& key)
{
if (!gAgent.getRegion()) return FALSE;
if (!mAttachmentDetailsRequested)
{
mAttachmentDetailsRequested = requestAttachmentDetails();
}
LLFloater::onOpen(key);
}
bool LLFloaterMyScripts::requestAttachmentDetails()
{
if (!gAgent.getRegion()) return false;
LLSD body;
std::string url = gAgent.getRegion()->getCapability("AttachmentResources");
@ -68,11 +81,11 @@ BOOL LLFloaterMyScripts::requestAttachmentDetails()
{
LLCoros::instance().launch("LLFloaterMyScripts::getAttachmentLimitsCoro",
boost::bind(&LLFloaterMyScripts::getAttachmentLimitsCoro, this, url));
return TRUE;
return true;
}
else
{
return FALSE;
return false;
}
}
@ -284,7 +297,7 @@ void LLFloaterMyScripts::onClickRefresh(void* userdata)
btn->setEnabled(false);
}
instance->clearList();
instance->requestAttachmentDetails();
instance->mAttachmentDetailsRequested = instance->requestAttachmentDetails();
}
else
{

View File

@ -36,15 +36,17 @@ public:
LLFloaterMyScripts(const LLSD& seed);
BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
void setAttachmentDetails(LLSD content);
void setAttachmentSummary(LLSD content);
BOOL requestAttachmentDetails();
bool requestAttachmentDetails();
void clearList();
private:
void getAttachmentLimitsCoro(std::string url);
bool mGotAttachmentMemoryUsed;
bool mAttachmentDetailsRequested;
S32 mAttachmentMemoryMax;
S32 mAttachmentMemoryUsed;

View File

@ -38,7 +38,7 @@
#include "llcallbacklist.h"
#include "llcheckboxctrl.h"
#include "llfontgl.h"
#include "llimagebmp.h"
#include "llimagepng.h"
#include "llimagej2c.h"
#include "llinventory.h"
#include "llnotificationsutil.h"
@ -89,7 +89,7 @@
#include "llcorehttputil.h"
#include "llviewerassetupload.h"
const std::string SCREEN_PREV_FILENAME = "screen_report_last.bmp";
const std::string SCREEN_PREV_FILENAME = "screen_report_last.png";
//=========================================================================
//-----------------------------------------------------------------------------
@ -886,10 +886,10 @@ void LLFloaterReporter::takeScreenshot(bool use_prev_screenshot)
if(!use_prev_screenshot)
{
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
if(bmp_image->encode(mImageRaw, 0.0f))
LLPointer<LLImagePNG> png_image = new LLImagePNG;
if(png_image->encode(mImageRaw, 0.0f))
{
bmp_image->save(screenshot_filename);
png_image->save(screenshot_filename);
}
}
else
@ -969,10 +969,10 @@ void LLFloaterReporter::takeNewSnapshot(bool refresh)
{
std::string screenshot_filename(gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_PREV_FILENAME);
mPrevImageRaw = new LLImageRaw;
LLPointer<LLImageBMP> start_image_bmp = new LLImageBMP;
if(start_image_bmp->load(screenshot_filename))
LLPointer<LLImagePNG> start_image_png = new LLImagePNG;
if(start_image_png->load(screenshot_filename))
{
if (start_image_bmp->decode(mPrevImageRaw, 0.0f))
if (start_image_png->decode(mPrevImageRaw, 0.0f))
{
LLNotificationsUtil::add("LoadPreviousReportScreenshot", LLSD(), LLSD(), boost::bind(&LLFloaterReporter::onLoadScreenshotDialog,this, _1, _2));
return;

View File

@ -136,6 +136,7 @@ void LLFloaterSearch::onOpen(const LLSD& key)
// </FS:AW opensim search support>
LLFloaterWebContent::onOpen(p);
mWebBrowser->setFocus(TRUE);
search(p.search);
}

View File

@ -1083,6 +1083,18 @@ void LLFloaterTools::onOpen(const LLSD& key)
{
mTab->selectTabByName(panel);
}
LLTool* tool = LLToolMgr::getInstance()->getCurrentTool();
if (tool == LLToolCompInspect::getInstance()
|| tool == LLToolDragAndDrop::getInstance())
{
// Something called floater up while it was supressed (during drag n drop, inspect),
// so it won't be getting any layout or visibility updates, update once
// further updates will come from updateLayout()
LLCoordGL select_center_screen;
MASK mask = gKeyboard->currentMask(TRUE);
updatePopup(select_center_screen, mask);
}
//gMenuBarView->setItemVisible("BuildTools", TRUE);
}

View File

@ -129,6 +129,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
bool confirm_attachment_rez(const LLSD& notification, const LLSD& response);
void teleport_via_landmark(const LLUUID& asset_id);
static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
static bool can_move_to_my_outfits(LLInventoryModel* model, LLInventoryCategory* inv_cat, U32 wear_limit);
static BOOL can_move_to_landmarks(LLInventoryItem* inv_item);
// <FS:CR> Function left unused from FIRE-7219
//static bool check_category(LLInventoryModel* model,
@ -2522,7 +2523,7 @@ public:
// Can be destroyed (or moved to trash)
BOOL LLFolderBridge::isItemRemovable() const
{
if (!get_is_category_removable(getInventoryModel(), mUUID))
if (!get_is_category_removable(getInventoryModel(), mUUID) || isMarketplaceListingsFolder())
{
return FALSE;
}
@ -2538,11 +2539,6 @@ BOOL LLFolderBridge::isItemRemovable() const
return FALSE;
}
}
if (isMarketplaceListingsFolder() && LLMarketplaceData::instance().getActivationState(mUUID))
{
return FALSE;
}
return TRUE;
}
@ -2777,9 +2773,28 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
is_movable = FALSE;
// tooltip?
}
U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
if (is_movable && move_is_into_outfit)
{
if((mUUID == my_outifts_id) || (getCategory() && getCategory()->getPreferredType() == LLFolderType::FT_NONE))
if (mUUID == my_outifts_id)
{
if (source != LLToolDragAndDrop::SOURCE_AGENT || move_is_from_marketplacelistings)
{
tooltip_msg = LLTrans::getString("TooltipOutfitNotInInventory");
is_movable = false;
}
else if (can_move_to_my_outfits(model, inv_cat, max_items_to_wear))
{
is_movable = true;
}
else
{
tooltip_msg = LLTrans::getString("TooltipCantCreateOutfit");
is_movable = false;
}
}
else if(getCategory() && getCategory()->getPreferredType() == LLFolderType::FT_NONE)
{
is_movable = ((inv_cat->getPreferredType() == LLFolderType::FT_NONE) || (inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT));
}
@ -2824,7 +2839,6 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
}
U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
if (is_movable
&& move_is_into_current_outfit
&& descendent_items.size() > max_items_to_wear)
@ -2990,8 +3004,14 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat,
}
}
if (mUUID == my_outifts_id)
{
// Category can contains objects,
// create a new folder and populate it with links to original objects
dropToMyOutfits(inv_cat);
}
// if target is current outfit folder we use link
if (move_is_into_current_outfit &&
else if (move_is_into_current_outfit &&
(inv_cat->getPreferredType() == LLFolderType::FT_NONE ||
inv_cat->getPreferredType() == LLFolderType::FT_OUTFIT))
{
@ -4044,12 +4064,40 @@ void LLFolderBridge::perform_pasteFromClipboard()
return;
}
}
if (move_is_into_current_outfit || move_is_into_outfit)
if (move_is_into_outfit)
{
if (!move_is_into_my_outfits && item && can_move_to_outfit(item, move_is_into_current_outfit))
{
dropToOutfit(item, move_is_into_current_outfit);
}
else if (move_is_into_my_outfits && LLAssetType::AT_CATEGORY == obj->getType())
{
LLInventoryCategory* cat = model->getCategory(item_id);
U32 max_items_to_wear = gSavedSettings.getU32("WearFolderLimit");
if (cat && can_move_to_my_outfits(model, cat, max_items_to_wear))
{
dropToMyOutfits(cat);
}
else
{
LLNotificationsUtil::add("MyOutfitsPasteFailed");
}
}
else
{
LLNotificationsUtil::add("MyOutfitsPasteFailed");
}
}
else if (move_is_into_current_outfit)
{
if (item && can_move_to_outfit(item, move_is_into_current_outfit))
{
dropToOutfit(item, move_is_into_current_outfit);
}
else
{
LLNotificationsUtil::add("MyOutfitsPasteFailed");
}
}
else if (move_is_into_favorites)
{
@ -5085,6 +5133,46 @@ static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_curr
return TRUE;
}
// Returns true if folder's content can be moved to Current Outfit or any outfit folder.
static bool can_move_to_my_outfits(LLInventoryModel* model, LLInventoryCategory* inv_cat, U32 wear_limit)
{
LLInventoryModel::cat_array_t *cats;
LLInventoryModel::item_array_t *items;
model->getDirectDescendentsOf(inv_cat->getUUID(), cats, items);
if (items->size() > wear_limit)
{
return false;
}
if (items->size() == 0)
{
// Nothing to move(create)
return false;
}
if (cats->size() > 0)
{
// We do not allow subfolders in outfits of "My Outfits" yet
return false;
}
LLInventoryModel::item_array_t::iterator iter = items->begin();
LLInventoryModel::item_array_t::iterator end = items->end();
while (iter != end)
{
LLViewerInventoryItem *item = *iter;
if (!can_move_to_outfit(item, false))
{
return false;
}
iter++;
}
return true;
}
// Returns TRUE if item is a landmark or a link to a landmark
// and can be moved to Favorites or Landmarks folder.
static BOOL can_move_to_landmarks(LLInventoryItem* inv_item)
@ -5153,6 +5241,56 @@ void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_c
}
}
void LLFolderBridge::dropToMyOutfits(LLInventoryCategory* inv_cat)
{
// make a folder in the My Outfits directory.
const LLUUID dest_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
// Note: creation will take time, so passing folder id to callback is slightly unreliable,
// but so is collecting and passing descendants' ids
inventory_func_type func = boost::bind(&LLFolderBridge::outfitFolderCreatedCallback, this, inv_cat->getUUID(), _1);
gInventory.createNewCategory(dest_id,
LLFolderType::FT_OUTFIT,
inv_cat->getName(),
func);
}
void LLFolderBridge::outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id)
{
LLInventoryModel::cat_array_t* categories;
LLInventoryModel::item_array_t* items;
getInventoryModel()->getDirectDescendentsOf(cat_source_id, categories, items);
LLInventoryObject::const_object_list_t link_array;
LLInventoryModel::item_array_t::iterator iter = items->begin();
LLInventoryModel::item_array_t::iterator end = items->end();
while (iter!=end)
{
const LLViewerInventoryItem* item = (*iter);
// By this point everything is supposed to be filtered,
// but there was a delay to create folder so something could have changed
LLInventoryType::EType inv_type = item->getInventoryType();
if ((inv_type == LLInventoryType::IT_WEARABLE) ||
(inv_type == LLInventoryType::IT_GESTURE) ||
(inv_type == LLInventoryType::IT_ATTACHMENT) ||
(inv_type == LLInventoryType::IT_OBJECT) ||
(inv_type == LLInventoryType::IT_SNAPSHOT) ||
(inv_type == LLInventoryType::IT_TEXTURE))
{
link_array.push_back(LLConstPointer<LLInventoryObject>(item));
}
iter++;
}
if (!link_array.empty())
{
LLPointer<LLInventoryCallback> cb = NULL;
link_inventory_array(cat_dest_id, link_array, cb);
}
}
// Callback for drop item if DAMA required...
void LLFolderBridge::callback_dropItemIntoFolder(const LLSD& notification, const LLSD& response, LLInventoryItem* inv_item)
{

View File

@ -383,6 +383,7 @@ protected:
void dropToFavorites(LLInventoryItem* inv_item);
void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit);
void dropToMyOutfits(LLInventoryCategory* inv_cat);
//--------------------------------------------------------------------
// Messy hacks for handling folder options
@ -392,6 +393,7 @@ public:
static void staticFolderOptionsMenu();
protected:
void outfitFolderCreatedCallback(LLUUID cat_source_id, LLUUID cat_dest_id);
void callback_pasteFromClipboard(const LLSD& notification, const LLSD& response);
void perform_pasteFromClipboard();
void gatherMessage(std::string& message, S32 depth, LLError::ELevel log_level);

View File

@ -2378,6 +2378,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
instance_entry["material"] = LL_MCODE_WOOD;
instance_entry["physics_shape_type"] = data.mModel[LLModel::LOD_PHYSICS].notNull() ? (U8)(LLViewerObject::PHYSICS_SHAPE_PRIM) : (U8)(LLViewerObject::PHYSICS_SHAPE_CONVEX_HULL);
instance_entry["mesh"] = mesh_index[data.mBaseModel];
instance_entry["mesh_name"] = instance.mLabel;
instance_entry["face_list"] = LLSD::emptyArray();

View File

@ -1546,7 +1546,7 @@ void LLPanelObject::activateMeshFields(LLViewerObject * objectp)
childSetVisible("ObjectLODbehaviourLabel", true);
// Setup the LL defaults
factor = 1.125f; // LL default for most people http://wiki.phoenixviewer.com/support:whirly_fizzle#lod_comparison
factor = 1.125f; // LL default for most people http://wiki.firestormviewer.org/support:whirly_fizzle#lod_comparison
args["FACTOR"] = llformat("%.3f", factor);
tb = getChild<LLTextBox>("LOD_swap_ll_default");
tb->setToolTip(getString("ll_lod_tooltip_msg",args));

View File

@ -56,7 +56,7 @@ public:
// llview
void draw() override;
// [SL:KB] - Patch: UI-FloaterSearchReplace | Checked: 2010-11-05 (Catznip-2.3.0a) | Added: Catznip-2.3.0a
virtual bool hasAccelerators() const;
virtual bool hasAccelerators() const override;
// [/SL:KB]
virtual BOOL handleKeyHere(KEY key, MASK mask) override;
virtual void setEnabled( BOOL enabled ) override;

View File

@ -119,7 +119,7 @@ void LLSky::restoreGL()
void LLSky::resetVertexBuffers()
{
if (gSky.mVOSkyp.notNull())
if (gSky.mVOSkyp.notNull() && gSky.mVOGroundp.notNull())
{
gPipeline.resetVertexBuffers(gSky.mVOSkyp->mDrawable);
gPipeline.resetVertexBuffers(gSky.mVOGroundp->mDrawable);

View File

@ -119,7 +119,7 @@
#include "llhudeffecttrail.h"
#include "llhudmanager.h"
#include "llbufferstream.h" // <FS:PP> For SL Grid Status
#include "llimagebmp.h"
#include "llimage.h"
#include "llinventorybridge.h"
#include "llinventorymodel.h"
#include "llinventorymodelbackgroundfetch.h"
@ -170,6 +170,7 @@
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
#include "llviewerstats.h"
#include "llviewerstatsrecorder.h"
#include "llviewerthrottle.h"
#include "llviewerwindow.h"
#include "llvoavatar.h"
@ -255,8 +256,8 @@
bool gAgentMovementCompleted = false;
S32 gMaxAgentGroups;
std::string SCREEN_HOME_FILENAME = "screen_home.bmp";
std::string SCREEN_LAST_FILENAME = "screen_last.bmp";
const std::string SCREEN_HOME_FILENAME = "screen_home%s.png";
const std::string SCREEN_LAST_FILENAME = "screen_last%s.png";
LLPointer<LLViewerTexture> gStartTexture;
@ -605,6 +606,14 @@ bool idle_startup()
// to work.
gIdleCallbacks.callFunctions();
gViewerWindow->updateUI();
// There is a crash on updateClass, this is an attempt to get more information
if (LLMortician::graveyardCount())
{
std::stringstream log_stream;
LLMortician::logClass(log_stream);
LL_INFOS() << log_stream.str() << LL_ENDL;
}
LLMortician::updateClass();
const std::string delims (" ");
@ -1889,6 +1898,7 @@ bool idle_startup()
//
// Initialize classes w/graphics stuff.
//
LLViewerStatsRecorder::instance(); // Since textures work in threads
gTextureList.doPrefetchImages();
display_startup();
@ -3479,6 +3489,37 @@ bool callback_choose_gender(const LLSD& notification, const LLSD& response)
return false;
}
std::string get_screen_filename(const std::string& pattern)
{
// <FS:Ansariel> OpenSim support
//if (LLGridManager::getInstance()->isInProductionGrid())
if (LLGridManager::getInstance()->isInSLMain())
// </FS:Ansariel>
{
return llformat(pattern.c_str(), "");
}
else
{
const std::string& grid_id_str = LLGridManager::getInstance()->getGridId();
const std::string& grid_id_lower = utf8str_tolower(grid_id_str);
std::string grid = "." + grid_id_lower;
return llformat(pattern.c_str(), grid.c_str());
}
}
//static
std::string LLStartUp::getScreenLastFilename()
{
return get_screen_filename(SCREEN_LAST_FILENAME);
}
//static
std::string LLStartUp::getScreenHomeFilename()
{
return get_screen_filename(SCREEN_HOME_FILENAME);
}
//static
void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,
const std::string& gender_name )
{
@ -3577,19 +3618,35 @@ void init_start_screen(S32 location_id)
LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
U8 image_codec = IMG_CODEC_PNG;
std::string temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
if ((S32)START_LOCATION_ID_LAST == location_id)
{
temp_str += SCREEN_LAST_FILENAME;
temp_str += LLStartUp::getScreenLastFilename();
}
else
{
temp_str += SCREEN_HOME_FILENAME;
std::string path = temp_str + LLStartUp::getScreenHomeFilename();
// <FS:Ansariel> OpenSim support
//if (!gDirUtilp->fileExists(path) && LLGridManager::getInstance()->isInProductionGrid())
if (!gDirUtilp->fileExists(path) && LLGridManager::getInstance()->isInSLMain())
// </FS:Ansariel>
{
// Fallback to old file, can be removed later
// Home image only sets when user changes home, so it will take time for users to switch to pngs
temp_str += "screen_home.bmp";
image_codec = IMG_CODEC_BMP;
}
else
{
temp_str = path;
}
}
LLPointer<LLImageBMP> start_image_bmp = new LLImageBMP;
LLPointer<LLImageFormatted> start_image_frmted = LLImageFormatted::createFromType(image_codec);
// Turn off start screen to get around the occasional readback
// driver bug
if(!gSavedSettings.getBOOL("UseStartScreen"))
@ -3597,18 +3654,18 @@ void init_start_screen(S32 location_id)
LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL;
return;
}
else if(!start_image_bmp->load(temp_str) )
else if(!start_image_frmted->load(temp_str) )
{
LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
gStartTexture = NULL;
}
else
{
gStartImageWidth = start_image_bmp->getWidth();
gStartImageHeight = start_image_bmp->getHeight();
gStartImageWidth = start_image_frmted->getWidth();
gStartImageHeight = start_image_frmted->getHeight();
LLPointer<LLImageRaw> raw = new LLImageRaw;
if (!start_image_bmp->decode(raw, 0.0f))
if (!start_image_frmted->decode(raw, 0.0f))
{
LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
gStartTexture = NULL;

View File

@ -41,10 +41,6 @@ bool idle_startup();
void release_start_screen();
bool login_alert_done(const LLSD& notification, const LLSD& response);
// constants, variables, & enumerations
extern std::string SCREEN_HOME_FILENAME;
extern std::string SCREEN_LAST_FILENAME;
// start location constants
enum EStartLocation
{
@ -105,6 +101,8 @@ public:
static void setStartupState( EStartupState state );
static EStartupState getStartupState() { return gStartupState; };
static std::string getStartupStateString() { return startupStateToString(gStartupState); };
static std::string getScreenLastFilename(); // screenshot taken on exit
static std::string getScreenHomeFilename(); // screenshot taken on setting Home
static void multimediaInit();
// Initialize LLViewerMedia multimedia engine.

View File

@ -204,7 +204,7 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
LLVector2 *tex0, LLVector2 *tex1)
{
if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge() || !mVObjp)
{
return; // failsafe
}

View File

@ -2430,7 +2430,11 @@ S32 LLTextureFetchWorker::callbackHttpGet(LLCore::HttpResponse * response,
mLoaded = TRUE;
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
LLViewerStatsRecorder::instance().log(0.2f);
if (LLViewerStatsRecorder::instanceExists())
{
// Do not create this instance inside thread
LLViewerStatsRecorder::instance().log(0.2f);
}
return data_size ;
}

View File

@ -143,6 +143,12 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
// !transparent_object check will be covered by transparent_object == visible_object.
mPick = transparent_pick;
}
// <FS:ND> FIRE-29031; Handle transparent being nullptr (due to RLVa?). visible_object cannot be invalid here or the if above had been entered
else if( !transp_object)
{
mPick = visible_pick;
}
// </FS:ND>
else
{
// Select between two non-null picks

View File

@ -42,7 +42,7 @@
#include "llfeaturemanager.h"
//#include "llfirstuse.h"
#include "llhudmanager.h"
#include "llimagebmp.h"
#include "llimagepng.h"
#include "llmemory.h"
#include "llselectmgr.h"
#include "llsky.h"
@ -1740,17 +1740,17 @@ void render_disconnected_background()
LL_INFOS() << "Loading last bitmap..." << LL_ENDL;
std::string temp_str;
temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + SCREEN_LAST_FILENAME;
temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + LLStartUp::getScreenLastFilename();
LLPointer<LLImageBMP> image_bmp = new LLImageBMP;
if( !image_bmp->load(temp_str) )
LLPointer<LLImagePNG> image_png = new LLImagePNG;
if( !image_png->load(temp_str) )
{
//LL_INFOS() << "Bitmap load failed" << LL_ENDL;
return;
}
LLPointer<LLImageRaw> raw = new LLImageRaw;
if (!image_bmp->decode(raw, 0.0f))
if (!image_png->decode(raw, 0.0f))
{
LL_INFOS() << "Bitmap decode failed" << LL_ENDL;
gDisconnectedImagep = NULL;
@ -1758,7 +1758,7 @@ void render_disconnected_background()
}
U8 *rawp = raw->getData();
S32 npixels = (S32)image_bmp->getWidth()*(S32)image_bmp->getHeight();
S32 npixels = (S32)image_png->getWidth()*(S32)image_png->getHeight();
for (S32 i = 0; i < npixels; i++)
{
S32 sum = 0;

View File

@ -181,9 +181,7 @@
#include "fsfloateravatarrendersettings.h"
#include "fsfloatercontacts.h"
#include "fsfloatercontactsetconfiguration.h"
#ifdef HAS_DISCORD
#include "fsfloaterdiscord.h"
#endif
#include "fsfloaterexport.h"
#include "fsfloaterblocklist.h"
#include "fsfloatergroup.h"
@ -468,9 +466,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("fs_blocklist", "floater_fs_blocklist.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterBlocklist>);
LLFloaterReg::add("fs_add_contact", "floater_fs_contact_add.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterAddToContactSet>);
LLFloaterReg::add("fs_contact_set_config", "floater_fs_contact_set_configuration.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterContactSetConfiguration>);
#ifdef HAS_DISCORD
LLFloaterReg::add("fs_discord", "floater_fs_discord.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterDiscord>);
#endif
LLFloaterReg::add("fs_group", "floater_fs_group.xml",&LLFloaterReg::build<FSFloaterGroup>);
LLFloaterReg::add("fs_group_titles", "floater_fs_group_titles.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterGroupTitles>);
LLFloaterReg::add("fs_export", "floater_fs_export.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<FSFloaterObjectExport>);

View File

@ -6322,8 +6322,8 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
snap_filename += SCREEN_HOME_FILENAME;
gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
snap_filename += LLStartUp::getScreenHomeFilename();
gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
if (notificationID == "RegionRestartMinutes" ||
@ -6384,14 +6384,14 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
snap_filename += SCREEN_HOME_FILENAME;
if (gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE))
snap_filename += LLStartUp::getScreenHomeFilename();
if (gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG))
{
LL_INFOS() << SCREEN_HOME_FILENAME << " saved successfully." << LL_ENDL;
LL_INFOS() << LLStartUp::getScreenHomeFilename() << " saved successfully." << LL_ENDL;
}
else
{
LL_WARNS() << SCREEN_HOME_FILENAME << " could not be saved." << LL_ENDL;
LL_WARNS() << LLStartUp::getScreenHomeFilename() << " could not be saved." << LL_ENDL;
}
}
// </FS:CR>
@ -6441,8 +6441,8 @@ static void process_special_alert_messages(const std::string & message)
// save the home location image to disk
std::string snap_filename = gDirUtilp->getLindenUserDir();
snap_filename += gDirUtilp->getDirDelimiter();
snap_filename += SCREEN_HOME_FILENAME;
gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE);
snap_filename += LLStartUp::getScreenHomeFilename();
gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE, LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::SNAPSHOT_FORMAT_PNG);
}
}

View File

@ -1500,7 +1500,11 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp)
if (objectp)
{
objectp->markDead(); // does the right thing if object already dead
// We are going to cleanup a lot of smart pointers to this object, they might be last,
// and object being NULLed while inside it's own function won't be pretty
// so create a pointer to make sure object will stay alive untill markDead() finishes
LLPointer<LLViewerObject> sp(objectp);
sp->markDead(); // does the right thing if object already dead
return TRUE;
}

View File

@ -3864,9 +3864,9 @@ void LLViewerMediaTexture::removeFace(U32 channel, LLFace* facep)
}
}
if(te && te->getID().notNull()) //should have a texture
if(te && te->getID().notNull()) //should have a texture but none found
{
LL_ERRS() << "mTextureList texture reference number is corrupted." << LL_ENDL;
LL_ERRS() << "mTextureList texture reference number is corrupted. Texture id: " << te->getID() << " List size: " << (U32)mTextureList.size() << LL_ENDL;
}
}

View File

@ -128,7 +128,7 @@
#include "llhudmanager.h"
#include "llhudobject.h"
#include "llhudview.h"
#include "llimagebmp.h"
#include "llimage.h"
#include "llimagej2c.h"
#include "llimageworker.h"
#include "llkeyboard.h"
@ -5640,32 +5640,46 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
}
BOOL LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type)
BOOL LLViewerWindow::saveSnapshot(const std::string& filepath, S32 image_width, S32 image_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type, LLSnapshotModel::ESnapshotFormat format)
{
LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
LL_INFOS() << "Saving snapshot to: " << filepath << LL_ENDL;
LLPointer<LLImageRaw> raw = new LLImageRaw;
BOOL success = rawSnapshot(raw, image_width, image_height, TRUE, FALSE, show_ui, do_rebuild);
LLPointer<LLImageRaw> raw = new LLImageRaw;
BOOL success = rawSnapshot(raw, image_width, image_height, TRUE, FALSE, show_ui, do_rebuild);
if (success)
{
LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
success = bmp_image->encode(raw, 0.0f);
if( success )
{
success = bmp_image->save(filepath);
}
else
{
LL_WARNS() << "Unable to encode bmp snapshot" << LL_ENDL;
}
}
else
{
LL_WARNS() << "Unable to capture raw snapshot" << LL_ENDL;
}
if (success)
{
U8 image_codec = IMG_CODEC_BMP;
switch (format)
{
case LLSnapshotModel::SNAPSHOT_FORMAT_PNG:
image_codec = IMG_CODEC_PNG;
break;
case LLSnapshotModel::SNAPSHOT_FORMAT_JPEG:
image_codec = IMG_CODEC_JPEG;
break;
default:
image_codec = IMG_CODEC_BMP;
break;
}
return success;
LLPointer<LLImageFormatted> formated_image = LLImageFormatted::createFromType(image_codec);
success = formated_image->encode(raw, 0.0f);
if (success)
{
success = formated_image->save(filepath);
}
else
{
LL_WARNS() << "Unable to encode snapshot of format " << format << LL_ENDL;
}
}
else
{
LL_WARNS() << "Unable to capture raw snapshot" << LL_ENDL;
}
return success;
}

View File

@ -348,7 +348,7 @@ public:
// snapshot functionality.
// perhaps some of this should move to llfloatershapshot? -MG
BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR);
BOOL saveSnapshot(const std::string& filename, S32 image_width, S32 image_height, BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, LLSnapshotModel::ESnapshotFormat format = LLSnapshotModel::SNAPSHOT_FORMAT_BMP);
BOOL rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, BOOL keep_window_aspect = TRUE, BOOL is_texture = FALSE,
BOOL show_ui = TRUE, BOOL do_rebuild = FALSE, LLSnapshotModel::ESnapshotLayerType type = LLSnapshotModel::SNAPSHOT_TYPE_COLOR, S32 max_size = MAX_SNAPSHOT_IMAGE_SIZE);
BOOL thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 preview_height, BOOL show_ui, BOOL do_rebuild, LLSnapshotModel::ESnapshotLayerType type);

File diff suppressed because it is too large Load Diff

View File

@ -1370,10 +1370,10 @@ void LLWorld::updateWaterObjects()
}
}
for (std::list<LLVOWater*>::iterator iter = mHoleWaterObjects.begin();
for (std::list<LLPointer<LLVOWater> >::iterator iter = mHoleWaterObjects.begin();
iter != mHoleWaterObjects.end(); ++ iter)
{
LLVOWater* waterp = *iter;
LLVOWater* waterp = (*iter).get();
gObjectList.killObject(waterp);
}
mHoleWaterObjects.clear();

View File

@ -312,7 +312,7 @@ private:
// Data for "Fake" objects
//
std::list<LLVOWater*> mHoleWaterObjects;
std::list<LLPointer<LLVOWater> > mHoleWaterObjects;
LLPointer<LLVOWater> mEdgeWaterObjects[8];
LLPointer<LLViewerTexture> mDefaultWaterTexturep;

View File

@ -344,8 +344,11 @@ void RlvStrings::saveToFile(const std::string& strFilePath)
}
// Checked: 2009-11-11 (RLVa-1.1.0a) | Modified: RLVa-1.1.0a
const std::string& RlvStrings::getAnonym(const std::string& strName)
std::string RlvStrings::getAnonym(const std::string& strName)
{
if (!rlv_handler_t::isEnabled())
return strName;
const char* pszName = strName.c_str(); U32 nHash = 0;
// Test with 11,264 SL names showed a 3.33% - 3.82% occurance for each so we *should* get a very even spread
@ -906,7 +909,7 @@ BOOL rlvEnableSharedWearEnabler(void* pParam)
*/
// Checked: 2010-11-01 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
const std::string& rlvGetAnonym(const LLAvatarName& avName)
std::string rlvGetAnonym(const LLAvatarName& avName)
{
return RlvStrings::getAnonym(avName);
}

View File

@ -145,8 +145,8 @@ public:
static void loadFromFile(const std::string& strFilePath, bool fDefault);
static void saveToFile(const std::string& strFilePath);
static const std::string& getAnonym(const LLAvatarName& avName); // @shownames
static const std::string& getAnonym(const std::string& strName); // @shownames
static std::string getAnonym(const LLAvatarName& avName); // @shownames
static std::string getAnonym(const std::string& strName); // @shownames
static const std::string& getString(const std::string& strStringName);
static const char* getStringFromReturnCode(ERlvCmdRet eRet);
static const std::string& getStringMapPath() { return m_StringMapPath; }
@ -307,7 +307,7 @@ template<typename T> struct RlvPredValuesEqual
//
// Checked: 2010-10-31 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
inline const std::string& RlvStrings::getAnonym(const LLAvatarName& avName)
inline std::string RlvStrings::getAnonym(const LLAvatarName& avName)
{
return getAnonym(avName.getLegacyName());
}

View File

@ -3,7 +3,7 @@
<tab_container name="max_bandwidth_layout">
<panel label="Netværk" name="tab-conn">
<text name="Maximum bandwidth">
Maksimum båndbredde ([http://wiki.phoenixviewer.com/fs_speedtest need a suggestion?]):
Maksimum båndbredde ([http://wiki.firestormviewer.org/fs_speedtest need a suggestion?]):
</text>
<check_box label="Speciel port" name="connection_port_enabled"/>
<spinner label="Port nummer:" name="connection_port"/>
@ -14,7 +14,7 @@
</panel>
<panel label="Placering" name="tab-dir">
<text name="cache_size_label_l">
Cache størrelse ([http://wiki.phoenixviewer.com/cache need a suggestion?]):
Cache størrelse ([http://wiki.firestormviewer.org/cache need a suggestion?]):
</text>
<text name="Cache location">
Cache placering:

View File

@ -28,7 +28,7 @@
Restzeit
</floater.string>
<floater.string name="Always">
Permanent
Immer
</floater.string>
<tab_container name="landtab" width="489">
<panel label="Allgemein" name="land_general_panel">
@ -353,18 +353,18 @@ Nur große Parzellen können in der Suche aufgeführt werden.
<text name="allow_label2">
Bauen:
</text>
<check_box label="Jeder" name="edit objects check" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land Objekte erstellen und rezzen."/>
<check_box label="Gruppe" name="edit group objects check" tool_tip="Falls aktiviert, können Mitglieder der Parzellen-Gruppe auf Ihrem Land Objekte erstellen und rezzen."/>
<check_box label="Jeder" name="edit objects check" tool_tip="Wenn aktiviert, können Einwohner auf Ihrem Land Objekte erstellen und rezzen."/>
<check_box label="Gruppe" name="edit group objects check" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder auf Ihrem Land Objekte erstellen und rezzen."/>
<text name="allow_label3">
Objekteintritt:
</text>
<check_box label="Jeder" name="all object entry check" tool_tip="Falls aktiviert, können Einwohner bestehende Objekte von anderen Parzelen auf diese bewegen."/>
<check_box label="Gruppe" name="group object entry check" tool_tip="Falls aktiviert, können Mitglieder der Parzellen-Gruppe bestehende Objekte von anderen Parzelen auf diese bewegen."/>
<check_box label="Jeder" name="all object entry check" tool_tip="Wenn aktiviert, können Einwohner bestehende Objekte von anderen Parzellen auf diese Parzelle verschieben."/>
<check_box label="Gruppe" name="group object entry check" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder bestehende Objekte von anderen Parzellen auf diese Parzelle verschieben."/>
<text name="allow_label4">
Skripts ausführen:
</text>
<check_box label="Jeder" name="check other scripts" tool_tip="Falls aktiviert, können Einwohner auf Ihrem Land Skripte ausführen, Anhänge eingeschlossen."/>
<check_box label="Gruppe" name="check group scripts" tool_tip="Falls aktiviert, können Mitglieder der Parzellen-Gruppe auf Ihrem Land Skripte ausführen, Anhänge eingeschlossen."/>
<check_box label="Jeder" name="check other scripts" tool_tip="Wenn aktiviert, können Einwohner auf Ihrer Parzelle Skripte inklusive Anhängen ausführen."/>
<check_box label="Gruppe" name="check group scripts" tool_tip="Wenn aktiviert, können Parzellengruppen-Mitglieder auf Ihrer Parzelle Skripte inklusive Anhängen ausführen."/>
<check_box label="Sicher (kein Schaden)" name="check safe" tool_tip="Falls aktiviert, wird Land auf Option „Sicher“ eingestellt, Kampfschäden sind deaktiviert. Ansonsten sind Kampfschäden aktiviert."/>
<check_box label="Kein Stoßen" name="PushRestrictCheck" tool_tip="Verhindert Stoßen durch Skripte. Durch Aktivieren dieser Option verhindern Sie störendes Verhalten auf Ihrem Land."/>
<check_box label="Ort in Suche anzeigen (30 L$/Woche)" name="ShowDirectoryCheck" tool_tip="Diese Parzelle in Suchergebnissen anzeigen."/>

View File

@ -18,13 +18,16 @@ Texturen
<texture_picker label="Haare" name="hair-baked"/>
<texture_picker label="Haare" name="hair_grain"/>
<texture_picker label="Alpha: Haare" name="hair_alpha"/>
<texture_picker label="Haartätowierung" name="hair_tattoo"/>
<texture_picker label="Kopf" name="head-baked"/>
<texture_picker label="Make-Up" name="head_bodypaint"/>
<texture_picker label="Kopf: Alpha" name="head_alpha"/>
<texture_picker label="Kopftätowierung" name="head_tattoo"/>
<texture_picker label="Kopf: Uni. Tattoo" name="head_universal_tattoo"/>
<texture_picker label="Augen" name="eyes-baked"/>
<texture_picker label="Auge" name="eyes_iris"/>
<texture_picker label="Alpha: Augen" name="eyes_alpha"/>
<texture_picker label="Augen: Uni. Tattoo" name="eyes_alpha"/>
<texture_picker label="Oberkörper" name="upper-baked"/>
<texture_picker label="Oberkörperfarbe" name="upper_bodypaint"/>
<texture_picker label="Unterhemd" name="upper_undershirt"/>
@ -33,6 +36,7 @@ Texturen
<texture_picker label="Oberjacke" name="upper_jacket"/>
<texture_picker label="Alpha: Oben" name="upper_alpha"/>
<texture_picker label="Obere Tätowierung" name="upper_tattoo"/>
<texture_picker label="Obere uni. Tät." name="upper_universal_tattoo"/>
<texture_picker label="Unterkörper" name="lower-baked"/>
<texture_picker label="Unterkörperfarbe" name="lower_bodypaint"/>
<texture_picker label="Unterhose" name="lower_underpants"/>
@ -41,9 +45,21 @@ Texturen
<texture_picker label="Hose" name="lower_pants"/>
<texture_picker label="Jacke" name="lower_jacket"/>
<texture_picker label="Alpha: Unten" name="lower_alpha"/>
<texture_picker label="Untere Tätowierung" name="lower_tattoo"/>
<texture_picker label="Untere Tät." name="lower_tattoo"/>
<texture_picker label="Untere uni. Tät." name="lower_universal_tattoo"/>
<texture_picker label="Rock" name="skirt-baked"/>
<texture_picker label="Rock" name="skirt"/>
<texture_picker label="Rocktätowierung" name="skirt_tattoo"/>
<texture_picker label="Linker Arm" name="leftarm-baked"/>
<texture_picker label="L. Arm uni. Tät." name="leftarm_tattoo"/>
<texture_picker label="Linkes Bein" name="leftleg-baked"/>
<texture_picker label="L. Bein uni. Tät." name="leftleg_tattoo"/>
<texture_picker label="AUX 1" name="aux1-baked"/>
<texture_picker label="AUX 1-Tätow." name="aux1_tattoo"/>
<texture_picker label="AUX 2" name="aux2-baked"/>
<texture_picker label="AUX 2-Tätow." name="aux2_tattoo"/>
<texture_picker label="AUX 3" name="aux3-baked"/>
<texture_picker label="AUX 3-Tätow." name="aux3_tattoo"/>
</panel>
</panel>
</scroll_container>

View File

@ -1,15 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="ban_duration" title="Verbannungsdauer">
<text name="duration_textbox">
Verbannungsdauer:
</text>
<radio_group name="ban_duration_radio">
<radio_item label="Permanent" name="always_radio"/>
<radio_item label="Temporär" name="temporary_radio"/>
<radio_item label="Immer" name="always_radio">
Immer
</radio_item>
<radio_item label="Temporär" name="temporary_radio">
Temporär
</radio_item>
</radio_group>
<text name="hours_textbox">
Stunden.
</text>
<button label="Ok" name="ok_btn"/>
<button label="OK" name="ok_btn"/>
<button label="Abbrechen" name="cancel_btn"/>
</floater>

View File

@ -114,6 +114,7 @@
<panel label="Erweitert" name="area_search_advanced_panel">
<check_box name="double_click_touch" label="Doppelklick berührt Objekt"/>
<check_box name="double_click_buy" label="Doppelklick kauft Objekt"/>
<check_box name="double_click_sit" label="Doppelklick sitzt auf Objekt"/>
</panel>
</tab_container>
</floater>

View File

@ -1,7 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<floater name="floater_discord" title="Discord">
<string name="discord_connected" value="Verbunden mit Discord als:" />
<string name="discord_disconnected" value="Nicht mit Discord verbunden." />
<string name="discord_connected">
Verbunden mit Discord als:
</string>
<string name="discord_disconnected">
Nicht mit Discord verbunden.
</string>
<string name="SocialDiscordConnecting">
Verbinde mit Discord...
</string>
@ -15,6 +19,7 @@
Nicht mit Discord verbunden.
</text>
<check_box label="Automatisch beim Login verbinden" name="startup_check"/>
<check_box label="Name mit Discord teilen" name="name_check"/>
<button label="Verbinden..." name="connect_btn"/>
<button label="Trennen" name="disconnect_btn"/>
<text name="rating_label">

View File

@ -22,7 +22,7 @@
<check_box label="Nur aktive" name="FSShowOnlyActiveGestures"/>
<button name="del_btn" tool_tip="Diese Geste löschen"/>
</panel>
<button label="Bearbeiten" name="edit_btn" tool_tip="Öffnet das Fenster zum Bearbeiten der ausgewählten Geste."/>
<button label="Abspielen" name="play_btn" tool_tip="Führt die ausgewählte Geste aus."/>
<button label="Bearbeiten" name="edit_btn" tool_tip="Fenster zum Bearbeiten der ausgewählten Geste öffnen."/>
<button label="Abspielen" name="play_btn" tool_tip="Ausgewählte Geste inworld ausführen."/>
<button label="Stopp" name="stop_btn"/>
</floater>

View File

@ -26,7 +26,7 @@
Das Medien-Browser-Plugin lädt gerade.
Sollte das Plugin nicht laden, sind Informationen zur Problemlösung erhältlich unter
http://wiki.phoenixviewer.com/fs_media
http://wiki.firestormviewer.org/fs_media
</text>
<button label="In meinem Browser öffnen" name="open_browser"/>
<check_box label="Immer in meinem Browser öffnen" name="open_always"/>

View File

@ -43,6 +43,7 @@
<check_box label="Anisotropische Filterung (langsamer, wenn aktiviert)" name="ani"/>
<check_box initial_value="true" label="OpenGL Vertex-Buffer-Objekte aktivieren" name="vbo" tool_tip="Wenn Sie über moderne Grafikhardware verfügen, können Sie durch Aktivieren dieser Option die Geschwindigkeit verbessern. Bei alter Hardware sind die VBO oft schlecht implementiert, was zu Abstürzen führen kann, wenn diese Option aktiviert ist."/>
<check_box initial_value="true" label="Texturkomprimierung aktivieren (Neustart erforderlich)" name="texture compression" tool_tip="Komprimiert Texturen im Videospeicher, damit höher auflösende Texturen geladen werden können (leichte Beeinträchtigung der Farbqualität)."/>
<check_box initial_value="true" label="Unterstützung für HiDPI-Displays aktivieren (Neustart erforderlich)" name="use HiDPI" tool_tip="OpenGL für hochauflösende Darstellung aktivieren."/>
<text name="antialiasing label">
Antialiasing:
</text>

View File

@ -55,7 +55,7 @@ Objekt:
<combo_box.item label="Unsittliches Verhalten &gt; Für Regionseinstufung unpassende Inhalte/Verhaltensweisen" name="Indecency__Mature_content_in_PG_region"/>
<combo_box.item label="Intoleranz" name="Intolerance"/>
<combo_box.item label="Land &gt; Unbefugte Nutzung &gt; Objekte oder Texturen" name="Land__Encroachment__Objects_textures"/>
<combo_box.item label="Verstoß gegen die Glücksspielerichtlinie" name="Wagering_gambling"/>
<combo_box.item label="Verstoß gegen die Geschicklichkeits-Spielerichtlinie" name="Wagering_gambling"/>
</combo_box>
<text name="abuser_name_title">
Name des Beschuldigten:

View File

@ -18,11 +18,11 @@
Das Web-Browser-Plugin lädt gerade.
Sollte das Plugin nicht laden, sind Informationen zur Problemlösung erhältlich unter
http://wiki.phoenixviewer.com/fs_search_issues
http://wiki.firestormviewer.org/fs_search_issues
und
http://wiki.phoenixviewer.com/fs_media
http://wiki.firestormviewer.org/fs_media
</text>
</layout_panel>
</layout_stack>

View File

@ -2,6 +2,7 @@
<context_menu name="Object List popup">
<menu_item_call label="Skript-Info" name="script_info"/>
<menu_item_call label="Berühren" name="touch_object"/>
<menu_item_call label="Sitzen" name="sit_on_object"/>
<menu_item_call label="Zu Objekt teleportieren" name="teleport_to_object"/>
<menu_item_call label="Heranzoomen" name="look_at_object"/>
<menu_item_call label="Untersuchen" name="inspect_object"/>

View File

@ -139,6 +139,10 @@ Marktplatzinitialisierung aufgrund eines System- oder Netzwerkfehlers fehlgeschl
„[ERROR_CODE]“
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MyOutfitsPasteFailed">
Ein oder mehrere Objekte können nicht innerhalb von „Outfits“ verwendet werden.
<usetemplate name="okbutton" yestext="OK"/>
</notification>
<notification name="MerchantPasteFailed">
Kopieren oder Verschieben von Marktplatz-Auflistungen fehlgeschlagen mit Fehler:
@ -1619,7 +1623,7 @@ Ersetzen Sie die Textur [TEXTURE_NUM] mit einer Bilddatei von maximal 1024x1024
[AGENT] wurden zur [LIST_TYPE]-Liste von [ESTATE] hinzugefügt.
</notification>
<notification name="AgentWasRemovedFromList">
[AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
[AGENT] wurde von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
</notification>
<notification name="AgentsWereRemovedFromList">
[AGENT] wurden von der [LIST_TYPE]-Liste von [ESTATE] entfernt.
@ -3608,7 +3612,7 @@ Bitte prüfen Sie Ihre Netzwerk- und Firewall-Konfiguration.
Deaktivieren Sie alle SIP ALG-Funktionen in Ihrem Router.
Voice-Kommunikation ist leider nicht verfügbar.
[https://wiki.phoenixviewer.com/fs_voice]
[https://wiki.firestormviewer.org/fs_voice]
<usetemplate name="okignore" yestext="OK" ignoretext="Warnen, wenn keine Verbindung zum Voice-Server hergestellt werden kann."/>
</notification>
<notification name="NoVoiceConnect-GIAB">
@ -3616,7 +3620,7 @@ Voice-Kommunikation ist leider nicht verfügbar.
Voice-Kommunikation ist leider nicht verfügbar.
Bitte überprüfen Sie Ihr Netzwerk- und Firewall-Setup.
[https://wiki.phoenixviewer.com/fs_voice]
[https://wiki.firestormviewer.org/fs_voice]
<usetemplate name="okignore" yestext="OK"/>
</notification>
<notification name="AvatarRezLeftNotification">

View File

@ -3,7 +3,7 @@
<tab_container name="max_bandwidth_layout">
<panel label="Verbindung" name="tab-conn">
<text name="Maximum bandwidth">
Maximale Bandbreite ([http://wiki.phoenixviewer.com/fs_speedtest Empfehlungen anzeigen?]):
Maximale Bandbreite ([http://wiki.firestormviewer.org/fs_speedtest Empfehlungen anzeigen?]):
</text>
<text name="NetworkPrefText1">
Funk
@ -47,7 +47,7 @@
</panel>
<panel label="Verzeichnisse" name="tab-dir">
<text name="cache_size_label_l">
Cache-Größe ([http://wiki.phoenixviewer.com/cache Empfehlungen anzeigen?]):
Cache-Größe ([http://wiki.firestormviewer.org/cache Empfehlungen anzeigen?]):
</text>
<button label="Inventar-Cache löschen" width="137" name="ClearInventoryCache"/>
<text name="Cache location">

View File

@ -27,7 +27,7 @@
</panel>
<panel label="Zulässige Gruppen" name="allowed_groups_panel">
<panel label="top_panel" name="allowed_group_search_panel">
<filter_editor label="Zulässige Gruppen Suchen" name="allowed_group_search_input"/>
<filter_editor label="Zulässige Gruppen suchen" name="allowed_group_search_input"/>
<button label="Kopieren" name="copy_allowed_group_list_btn"/>
</panel>
<text name="allow_group_label">

View File

@ -17,7 +17,7 @@
</text>
<radio_group name="externally_visible_radio" width="310">
<radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter &quot;Zugang&quot; aufgelistet sind." name="estate_restricted_access"/>
<radio_item label="Nur Einwohner und Gruppen zulassen, die im Reiter &quot;Zugang&quot; aufgelistet sind" name="estate_restricted_access"/>
<radio_item label="Zugang für jeden" name="estate_public_access"/>
</radio_group>
<check_box label="18 Jahre oder älter sind" name="limit_age_verified" tool_tip="Um diesen Grundbesitz besuchen zu können, müssen Einwohner mindestens 18 Jahre oder älter sein. Weitere Informationen finden Sie auf [SUPPORT_SITE]."/>

View File

@ -82,7 +82,7 @@ Texturspeicher: [TEXTUREMEMORY] MB ([TEXTUREMEMORYMULTIPLIER])
VFS (Cache) Erstellungszeit: [VFS_DATE]
</string>
<string name="AboutOSXHiDPI">
HiDPI-Display-Modus: [HIDPI]
HiDPI-Anzeigemodus: [HIDPI]
</string>
<string name="AboutLibs">
RestrainedLove API: [RLV_VERSION]
@ -648,6 +648,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
<string name="TooltipOutboxMixedStock">
Alle Objekte in einem Bestandsordner müssen vom gleichen Typ sein und die gleiche Berechtigung haben
</string>
<string name="TooltipOutfitNotInInventory">
Sie können nur Objekte oder Outfits aus Ihrem persönlichen Inventar zu „Outfits“ hinzufügen.
</string>
<string name="TooltipCantCreateOutfit">
Ein oder mehrere Objekte können nicht innerhalb von „Outfits“ verwendet werden.
</string>
<string name="TooltipDragOntoOwnChild">
Sie können einen Ordner nicht in einen seiner untergeordneten Ordner verschieben
</string>
@ -1683,13 +1689,13 @@ http://www.firestormviewer.org/support für Hilfe zum Lösen des Problems.
https://marketplace.[MARKETPLACE_DOMAIN_NAME]/learn_more
</string>
<string name="InventoryPlayAnimationTooltip">
Öffnet Fenster mit Abspieloptionen.
Fenster mit Spieloptionen öffnen.
</string>
<string name="InventoryPlayGestureTooltip">
Führt die ausgewählte Geste aus.
Ausgewählte Geste inworld ausführen.
</string>
<string name="InventoryPlaySoundTooltip">
Öffnet Fenster mit Abspieloptionen.
Fenster mit Spieloptionen öffnen.
</string>
<string name="InventoryOutboxNotMerchantTitle">
Jeder kann Artikel im Marktplatz verkaufen.
@ -5714,9 +5720,6 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Label">
Ziele
</string>
<string name="Command_Facebook_Label">
Facebook
</string>
<string name="Command_Flickr_Label">
Flickr
</string>
@ -5916,9 +5919,6 @@ Setzen Sie den Editorpfad in Anführungszeichen
<string name="Command_Destinations_Tooltip">
Ziele von Interesse
</string>
<string name="Command_Facebook_Tooltip">
Auf Facebook posten
</string>
<string name="Command_Flickr_Tooltip">
Auf Flickr hochladen
</string>

View File

@ -8,14 +8,14 @@
help_topic="floater_about"
save_rect="true"
title="About [APP_NAME]"
width="500">
width="515">
<tab_container
follows="all"
top="20"
left="7"
height="572"
width="486"
width="501"
name="about_tab"
tab_position="top">
<panel
@ -46,7 +46,7 @@ http://www.firestormviewer.org
max_length="65536"
name="support_editor"
top_pad="5"
width="474"
width="489"
word_wrap="true" />
<button
follows="left|top"
@ -69,7 +69,7 @@ http://www.firestormviewer.org
left="4"
name="linden_intro"
top="16"
width="474"
width="489"
wrap="true">
Firestorm would not be possible without the decision from Linden Lab to make their Second Life viewer source code available.

View File

@ -7,7 +7,7 @@
help_topic="avatar_texture_debug"
save_rect="true"
title="Avatar Textures"
width="940"
width="1024"
can_resize="false">
<floater.string
name="InvalidAvatar">
@ -20,26 +20,28 @@
follows="all"
height="680"
layout="topleft"
left="5"
left="1"
top_pad="15"
name="profile_scroll"
reserve_scroll_corner="false"
width="930">
right="-1">
<panel
name="scroll_content_panel"
follows="left|top"
min_height="300"
min_width="300"
layout="topleft"
top="0"
background_visible="false"
left="0"
height="680">
height="1165"
width="1000">
<text
type="string"
length="1"
height="16"
layout="topleft"
left="15"
left="10"
name="label"
top="20"
width="90">
@ -51,7 +53,7 @@ Textures
length="1"
height="16"
layout="topleft"
left_pad="22"
left_pad="15"
name="composite_label"
top_delta="0"
width="120">
@ -91,7 +93,7 @@ Textures
height="103"
label="Hair"
layout="topleft"
left_pad="21"
left_pad="10"
name="hair_grain"
top_delta="0"
width="92" />
@ -103,6 +105,14 @@ Textures
name="hair_alpha"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Hair Tattoo"
layout="topleft"
left_pad="7"
name="hair_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
@ -116,7 +126,7 @@ Textures
height="103"
label="Makeup"
layout="topleft"
left_pad="21"
left_pad="10"
name="head_bodypaint"
top_delta="0"
width="92" />
@ -136,6 +146,14 @@ Textures
name="head_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Head Unv Tattoo"
layout="topleft"
left_pad="7"
name="head_universal_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
@ -149,7 +167,7 @@ Textures
height="103"
label="Eye"
layout="topleft"
left_pad="21"
left_pad="10"
name="eyes_iris"
top_delta="0"
width="92" />
@ -161,6 +179,14 @@ Textures
name="eyes_alpha"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Eyes Tattoo"
layout="topleft"
left_pad="7"
name="eyes_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
@ -174,7 +200,7 @@ Textures
height="103"
label="Upper BodyPaint"
layout="topleft"
left_pad="21"
left_pad="10"
name="upper_bodypaint"
top_delta="0"
width="92" />
@ -226,6 +252,14 @@ Textures
name="upper_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Upper Unv Tattoo"
layout="topleft"
left_pad="7"
name="upper_universal_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
@ -239,7 +273,7 @@ Textures
height="103"
label="Lower BodyPaint"
layout="topleft"
left_pad="21"
left_pad="10"
name="lower_bodypaint"
top_delta="0"
width="92" />
@ -299,6 +333,14 @@ Textures
name="lower_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Lower Unv Tattoo"
layout="topleft"
left_pad="7"
name="lower_universal_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
@ -312,10 +354,103 @@ Textures
height="103"
label="Skirt"
layout="topleft"
left_pad="21"
left_pad="10"
name="skirt"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Skirt Tattoo"
layout="topleft"
left_pad="7"
name="skirt_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Left Arm"
layout="topleft"
left="10"
name="leftarm-baked"
top_delta="100"
width="92" />
<texture_picker
height="103"
label="Left Arm Tattoo"
layout="topleft"
left_pad="10"
name="leftarm_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="Left Leg"
layout="topleft"
left="10"
name="leftleg-baked"
top_delta="100"
width="92" />
<texture_picker
height="103"
label="Left Leg Tattoo"
layout="topleft"
left_pad="10"
name="leftleg_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="AUX 1"
layout="topleft"
left="10"
name="aux1-baked"
top_delta="100"
width="92" />
<texture_picker
height="103"
label="AUX 1 Tattoo"
layout="topleft"
left_pad="10"
name="aux1_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="AUX 2"
layout="topleft"
left="10"
name="aux2-baked"
top_delta="100"
width="92" />
<texture_picker
height="103"
label="AUX 2 Tattoo"
layout="topleft"
left_pad="10"
name="aux2_tattoo"
top_delta="0"
width="92" />
<texture_picker
height="103"
label="AUX 3"
layout="topleft"
left="10"
name="aux3-baked"
top_delta="100"
width="92" />
<texture_picker
height="103"
label="AUX 3 Tattoo"
layout="topleft"
left_pad="10"
name="aux3_tattoo"
top_delta="0"
width="92" />
</panel>
</panel>
</scroll_container>

View File

@ -1,109 +1,116 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<floater
positioning="cascading"
can_close="true"
can_resize="false"
help_topic="floater_discord"
layout="topleft"
name="floater_discord"
save_rect="true"
single_instance="true"
reuse_instance="true"
title="Discord"
height="462"
width="272">
<string
name="discord_connected"
value="You are connected to Discord as:" />
<string
name="discord_disconnected"
value="Not connected to Discord." />
<string name="SocialDiscordConnecting">Connecting to Discord...</string>
<string name="SocialDiscordErrorConnecting">Problem connecting to Discord</string>
<string name="SocialDiscordDisconnecting">Disconnecting from Discord...</string>
<text
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="16"
left="10"
name="account_caption_label"
top="5"
type="string">
positioning="cascading"
can_close="true"
can_resize="false"
help_topic="floater_discord"
layout="topleft"
name="floater_discord"
save_rect="true"
single_instance="true"
reuse_instance="true"
title="Discord"
height="485"
width="272">
<string name="discord_connected">You are connected to Discord as:</string>
<string name="discord_disconnected">Not connected to Discord.</string>
<string name="SocialDiscordConnecting">Connecting to Discord...</string>
<string name="SocialDiscordErrorConnecting">Problem connecting to Discord</string>
<string name="SocialDiscordDisconnecting">Disconnecting from Discord...</string>
<text
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="16"
left="10"
name="account_caption_label"
top="5"
type="string">
Not connected to Discord.
</text>
<text
layout="topleft"
top_pad="2"
length="1"
follows="top|left"
font="SansSerif"
height="16"
left="10"
name="account_name_label"
parse_urls="true"
type="string"/>
<check_box
layout="topleft"
follows="left|top|right"
top_pad="9"
left="10"
right="-10"
visible="true"
height="23"
label="Automatically connect on login"
name="startup_check"
width="210">
<commit_callback function="FSDiscord.Allow"/>
</check_box>
<button
layout="topleft"
follows="left|top|right"
top_pad="9"
left="10"
right="-10"
visible="true"
height="23"
label="Connect..."
name="connect_btn"
width="210">
<commit_callback function="FSDiscord.Connect"/>
</button>
</text>
<text
layout="topleft"
top_pad="2"
length="1"
follows="top|left"
font="SansSerif"
height="16"
left="10"
name="account_name_label"
parse_urls="true"
type="string"/>
<check_box
control_name="FSEnableDiscordIntegration"
layout="topleft"
follows="left|top|right"
top_pad="9"
left="10"
right="-10"
visible="true"
height="23"
label="Automatically connect on login"
name="startup_check"
width="210"/>
<check_box
control_name="FSShareNameToDiscord"
layout="topleft"
follows="left|top|right"
left="10"
right="-10"
visible="true"
height="23"
label="Share username"
name="name_check"
width="210"/>
<button
layout="topleft"
follows="left|top|right"
top_pad="9"
left="10"
right="-10"
visible="true"
height="23"
label="Connect..."
name="connect_btn"
width="210">
<commit_callback function="FSDiscord.Connect"/>
</button>
<button
layout="topleft"
follows="left|top|right"
top_delta="0"
left="10"
right="-10"
height="23"
label="Disconnect"
name="disconnect_btn"
width="210"
visible="false">
<commit_callback function="FSDiscord.Disconnect"/>
</button>
<text
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="26"
word_wrap="true"
left="10"
right="-10"
name="rating_label"
top_pad="5"
type="string">
<button
layout="topleft"
follows="left|top|right"
top_delta="0"
left="10"
right="-10"
height="23"
label="Disconnect"
name="disconnect_btn"
width="210"
visible="false">
<commit_callback function="FSDiscord.Disconnect"/>
</button>
<text
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="26"
word_wrap="true"
left="10"
right="-10"
name="rating_label"
top_pad="5"
type="string">
Share name of regions with following content rating to Discord:
</text>
<combo_box
follows="left|top"
height="23"
layout="topleft"
name="maturity_desired_combobox"
width="200">
control_name="FSMaxSharedMaturity"
follows="left|top"
height="23"
layout="topleft"
name="maturity_desired_combobox"
width="200">
<combo_box.item
label="General, Moderate, Adult"
name="Desired_Adult"
@ -120,32 +127,31 @@
label="Don't share"
name="Desired_None"
value="0" />
<commit_callback function="FSDiscord.Combo"/>
</combo_box>
</combo_box>
<text
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="26"
word_wrap="true"
left="10"
right="-10"
name="dont_names_label"
top_pad="5"
type="string">
layout="topleft"
length="1"
follows="top|left"
font="SansSerif"
height="26"
word_wrap="true"
left="10"
right="-10"
name="dont_names_label"
top_pad="5"
type="string">
Don't share region names to Discord if they are listed below:
</text>
<scroll_list
follows="top|left|right"
height="215"
layout="topleft"
left="10"
multi_select="true"
name="blacklisted_names"
sort_column="0"
sort_ascending="true"
width="250" />
follows="top|left|right"
height="215"
layout="topleft"
left="10"
multi_select="true"
name="blacklisted_names"
sort_column="0"
sort_ascending="true"
width="250" />
<line_editor
follows="left|top"
bottom_delta="24"
@ -153,8 +159,8 @@
max_length_chars="256"
name="blacklist_entry"
width="202">
<commit_callback function="FSDiscord.Add"/>
</line_editor>
<commit_callback function="FSDiscord.Add"/>
</line_editor>
<button
follows="left|top"
height="20"
@ -177,19 +183,19 @@
width="20">
<commit_callback function="FSDiscord.Rem"/>
</button>
<text
name="connection_status_text"
type="string"
follows="left|bottom|right"
bottom_delta="20"
left="-262"
width="223"
height="20"
wrap="true"
halign="left"
valign="center"
text_color="EmphasisColor"
font="SansSerif">
Loading...
</text>
<text
name="connection_status_text"
type="string"
follows="left|bottom|right"
bottom_delta="20"
left="-262"
width="223"
height="20"
wrap="true"
halign="left"
valign="center"
text_color="EmphasisColor"
font="SansSerif">
Loading...
</text>
</floater>

View File

@ -202,7 +202,7 @@
The web browser plugin seems to be taking a while to open.
If the plugin never loads, please visit:
http://wiki.phoenixviewer.com/fs_media
http://wiki.firestormviewer.org/fs_media
for possible steps to resolve this issue.
</text>

View File

@ -202,11 +202,11 @@
The web browser plugin seems to be taking a while to open.
If the plugin never loads, please visit:
http://wiki.phoenixviewer.com/fs_search_issues
http://wiki.firestormviewer.org/fs_search_issues
and
http://wiki.phoenixviewer.com/fs_media
http://wiki.firestormviewer.org/fs_media
for possible steps to resolve this issue.
</text>

View File

@ -63,7 +63,7 @@
<menu_item_call.on_click
function="PromptShowURL"
name="script_library_url"
parameter="WebLaunchExternalTarget,http://wiki.phoenixviewer.com/doku.php?id=start" />
parameter="WebLaunchExternalTarget,http://wiki.firestormviewer.org/doku.php?id=start" />
</menu_item_call>
<menu_item_call
label="Troubleshooting"
@ -71,7 +71,7 @@
<menu_item_call.on_click
function="PromptShowURL"
name="wiki_troubleshooting_url"
parameter="WebLaunchExternalTarget,http://wiki.phoenixviewer.com/firestorm_troubleshooting" />
parameter="WebLaunchExternalTarget,http://wiki.firestormviewer.org/firestorm_troubleshooting" />
</menu_item_call>
<!--
<menu_item_separator />

View File

@ -2071,7 +2071,7 @@
<menu_item_call.on_click
function="PromptShowURL"
name="script_library_url"
parameter="WebLaunchExternalTarget,http://wiki.phoenixviewer.com" />
parameter="WebLaunchExternalTarget,http://wiki.firestormviewer.org" />
</menu_item_call>
<menu_item_call
@ -2080,7 +2080,7 @@
<menu_item_call.on_click
function="PromptShowURL"
name="wiki_troubleshooting_url"
parameter="WebLaunchExternalTarget,http://wiki.phoenixviewer.com/firestorm_troubleshooting" />
parameter="WebLaunchExternalTarget,http://wiki.firestormviewer.org/firestorm_troubleshooting" />
</menu_item_call>
<menu_item_call
@ -2088,7 +2088,7 @@
name="firestorm_support_group">
<menu_item_call.on_click
function="Advanced.WebBrowserTest"
parameter="http://wiki.phoenixviewer.com/firestorm_support_groups_join" />
parameter="http://wiki.firestormviewer.org/firestorm_support_groups_join" />
<menu_item_call.on_visible
function="GridCheck"
parameter="secondlife" />
@ -2100,7 +2100,7 @@
<menu_item_call.on_click
function="PromptShowURL"
name="wiki_classes_url"
parameter="WebLaunchExternalTarget,http://wiki.phoenixviewer.com/firestorm_classes" />
parameter="WebLaunchExternalTarget,http://wiki.firestormviewer.org/firestorm_classes" />
</menu_item_call>
<menu_item_call

View File

@ -327,6 +327,16 @@ Initialization with the Marketplace failed because of a system or network error.
name="okbutton"
yestext="OK"/>
</notification>
<notification
icon="OutboxStatus_Error"
name="MyOutfitsPasteFailed"
type="alertmodal">
One or more items can't be used inside "Outfits"
<usetemplate
name="okbutton"
yestext="OK"/>
</notification>
<notification
icon="OutboxStatus_Error"
@ -1803,13 +1813,6 @@ Visit [_URL] for more information?
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="RunLauncher"
type="alertmodal">
Please do not directly run the viewer executable. Update any existing shortcuts to run SL_Launcher instead.
</notification>
<notification
icon="alertmodal.tga"
name="OldGPUDriver"
@ -2477,6 +2480,7 @@ Your search terms were too short so no search was performed.
icon="alertmodal.tga"
name="CouldNotTeleportReason"
type="alertmodal">
<unique/>
Teleport failed.
[REASON]
<tag>fail</tag>
@ -9286,7 +9290,7 @@ Please check your network and firewall setup.
Disable any SIP ALG feature in your router.
Voice communications will not be available.
[https://wiki.phoenixviewer.com/fs_voice]
[https://wiki.firestormviewer.org/fs_voice]
<tag>voice</tag>
<tag>fail</tag>
<usetemplate
@ -9303,7 +9307,7 @@ We're having trouble connecting to your voice server.
Voice communications will not be available.
Please check your network and firewall setup.
[https://wiki.phoenixviewer.com/fs_voice]
[https://wiki.firestormviewer.org/fs_voice]
<tag>voice</tag>
<tag>fail</tag>
<usetemplate

View File

@ -43,7 +43,7 @@
mouse_opaque="false"
top_pad="15"
width="500">
Maximum bandwidth ([http://wiki.phoenixviewer.com/fs_speedtest need a suggestion?]):
Maximum bandwidth ([http://wiki.firestormviewer.org/fs_speedtest need a suggestion?]):
</text>
<icon
@ -411,7 +411,7 @@
name="cache_size_label_l"
top_pad="15"
width="500">
Cache size ([http://wiki.phoenixviewer.com/cache need a suggestion?]):
Cache size ([http://wiki.firestormviewer.org/cache need a suggestion?]):
</text>
<slider
can_edit_text="true"

View File

@ -313,6 +313,8 @@ Please try logging in again in a minute.</string>
<string name="TooltipOutboxDragActive">You can't move a listed listing</string>
<string name="TooltipOutboxCannotMoveRoot">You can't move the marketplace listings root folder</string>
<string name="TooltipOutboxMixedStock">All items in a stock folder must have the same type and permission</string>
<string name="TooltipOutfitNotInInventory">You can only put items or outfits from your personal inventory into "Outfits"</string>
<string name="TooltipCantCreateOutfit">One or more items can't be used inside "Outfits"</string>
<string name="TooltipDragOntoOwnChild">You can't move a folder into its child</string>
<string name="TooltipDragOntoSelf">You can't move a folder into itself</string>
@ -374,7 +376,7 @@ Please try logging in again in a minute.</string>
<string name="ReleaseNotes">Release Notes</string>
<!-- Always mark translate="false" for strings that are nothing but URLs, as they don't need translation. -->
<string name="RELEASE_NOTES_BASE_URL" translate="false">http://wiki.phoenixviewer.com/firestorm_change_log_</string>
<string name="RELEASE_NOTES_BASE_URL" translate="false">http://wiki.firestormviewer.org/firestorm_change_log_</string>
<!-- Indicates something is being loaded. Maybe should be merged with RetrievingData -->
<string name="LoadingData">Loading...</string>

Some files were not shown because too many files have changed in this diff Show More