More WIP moap changes. Browser elements now function, added many required settings and notifications, and fixed some crashes and other bugs.
This commit is contained in:
@@ -307,6 +307,8 @@ public:
|
|||||||
virtual ~StaticRegistrar() {}
|
virtual ~StaticRegistrar() {}
|
||||||
StaticRegistrar(ref_const_key_t key, ref_const_value_t value)
|
StaticRegistrar(ref_const_key_t key, ref_const_value_t value)
|
||||||
{
|
{
|
||||||
|
if(!singleton_t::instance().mStaticScope)
|
||||||
|
mStaticScope = new ScopedRegistrar();
|
||||||
singleton_t::instance().mStaticScope->add(key, value);
|
singleton_t::instance().mStaticScope->add(key, value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -336,7 +338,7 @@ protected:
|
|||||||
|
|
||||||
virtual void initSingleton()
|
virtual void initSingleton()
|
||||||
{
|
{
|
||||||
mStaticScope = new ScopedRegistrar();
|
//mStaticScope = new ScopedRegistrar();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~LLRegistrySingleton()
|
virtual ~LLRegistrySingleton()
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ bool LLPluginClassMedia::init_impl(void)
|
|||||||
{
|
{
|
||||||
// Queue up the media init message -- it will be sent after all the currently queued messages.
|
// Queue up the media init message -- it will be sent after all the currently queued messages.
|
||||||
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
|
LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init");
|
||||||
|
message.setValue("target", mTarget);
|
||||||
sendMessage(message);
|
sendMessage(message);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -246,16 +247,18 @@ unsigned char* LLPluginClassMedia::getBitsData()
|
|||||||
|
|
||||||
void LLPluginClassMedia::setSize(int width, int height)
|
void LLPluginClassMedia::setSize(int width, int height)
|
||||||
{
|
{
|
||||||
if (width <= 0 || height <= 0)
|
if((width > 0) && (height > 0))
|
||||||
{
|
|
||||||
width = height = -1;
|
|
||||||
}
|
|
||||||
if (mSetMediaWidth != width || mSetMediaHeight != height)
|
|
||||||
{
|
{
|
||||||
mSetMediaWidth = width;
|
mSetMediaWidth = width;
|
||||||
mSetMediaHeight = height;
|
mSetMediaHeight = height;
|
||||||
setSizeInternal();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mSetMediaWidth = -1;
|
||||||
|
mSetMediaHeight = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSizeInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLPluginClassMedia::setSizeInternal(void)
|
void LLPluginClassMedia::setSizeInternal(void)
|
||||||
|
|||||||
@@ -78,13 +78,12 @@ void LLPanel::init()
|
|||||||
|
|
||||||
setTabStop(FALSE);
|
setTabStop(FALSE);
|
||||||
mVisibleSignal = NULL;
|
mVisibleSignal = NULL;
|
||||||
|
|
||||||
mCommitCallbackRegistrar = false;
|
|
||||||
mEnableCallbackRegistrar = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LLPanel::LLPanel()
|
LLPanel::LLPanel()
|
||||||
: mRectControl()
|
: mRectControl(),
|
||||||
|
mCommitCallbackRegistrar(false),
|
||||||
|
mEnableCallbackRegistrar(false)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
setName(std::string("panel"));
|
setName(std::string("panel"));
|
||||||
@@ -92,7 +91,9 @@ LLPanel::LLPanel()
|
|||||||
|
|
||||||
LLPanel::LLPanel(const std::string& name)
|
LLPanel::LLPanel(const std::string& name)
|
||||||
: LLUICtrl(name),
|
: LLUICtrl(name),
|
||||||
mRectControl()
|
mRectControl(),
|
||||||
|
mCommitCallbackRegistrar(false),
|
||||||
|
mEnableCallbackRegistrar(false)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
@@ -100,7 +101,9 @@ LLPanel::LLPanel(const std::string& name)
|
|||||||
|
|
||||||
LLPanel::LLPanel(const std::string& name, const LLRect& rect, BOOL bordered)
|
LLPanel::LLPanel(const std::string& name, const LLRect& rect, BOOL bordered)
|
||||||
: LLUICtrl(name,rect),
|
: LLUICtrl(name,rect),
|
||||||
mRectControl()
|
mRectControl(),
|
||||||
|
mCommitCallbackRegistrar(false),
|
||||||
|
mEnableCallbackRegistrar(false)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
if (bordered)
|
if (bordered)
|
||||||
@@ -112,7 +115,9 @@ LLPanel::LLPanel(const std::string& name, const LLRect& rect, BOOL bordered)
|
|||||||
|
|
||||||
LLPanel::LLPanel(const std::string& name, const std::string& rect_control, BOOL bordered)
|
LLPanel::LLPanel(const std::string& name, const std::string& rect_control, BOOL bordered)
|
||||||
: LLUICtrl(name, LLUI::sConfigGroup->getRect(rect_control)),
|
: LLUICtrl(name, LLUI::sConfigGroup->getRect(rect_control)),
|
||||||
mRectControl( rect_control )
|
mRectControl( rect_control ),
|
||||||
|
mCommitCallbackRegistrar(false),
|
||||||
|
mEnableCallbackRegistrar(false)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
if (bordered)
|
if (bordered)
|
||||||
|
|||||||
@@ -492,9 +492,9 @@ void LLUICtrl::initFromXML(LLXMLNodePtr node, LLView* parent)
|
|||||||
if (func)
|
if (func)
|
||||||
{
|
{
|
||||||
if(child_node->getAttributeString("parameter",attrib_str))
|
if(child_node->getAttributeString("parameter",attrib_str))
|
||||||
setCommitCallback(boost::bind((*func), this, LLSD(attrib_str)));
|
setValidateCallback(boost::bind((*func), this, LLSD(attrib_str)));
|
||||||
else
|
else
|
||||||
setCommitCallback(commit_signal_t::slot_type(*func));
|
setValidateCallback(enable_signal_t::slot_type(*func));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,17 @@
|
|||||||
#include "lluuid.h"
|
#include "lluuid.h"
|
||||||
|
|
||||||
#include "lldiriterator.h"
|
#include "lldiriterator.h"
|
||||||
|
#include "stringize.h"
|
||||||
|
#include <boost/foreach.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/assign/list_of.hpp>
|
||||||
|
#include <boost/bind.hpp>
|
||||||
|
#include <boost/ref.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
using boost::assign::list_of;
|
||||||
|
using boost::assign::map_list_of;
|
||||||
|
|
||||||
#if LL_WINDOWS
|
#if LL_WINDOWS
|
||||||
#include "lldir_win32.h"
|
#include "lldir_win32.h"
|
||||||
@@ -86,12 +97,17 @@ S32 LLDir::deleteFilesInDir(const std::string &dirname, const std::string &mask)
|
|||||||
std::string fullpath;
|
std::string fullpath;
|
||||||
S32 result;
|
S32 result;
|
||||||
|
|
||||||
|
// File masks starting with "/" will match nothing, so we consider them invalid.
|
||||||
|
if (LLStringUtil::startsWith(mask, getDirDelimiter()))
|
||||||
|
{
|
||||||
|
llwarns << "Invalid file mask: " << mask << llendl;
|
||||||
|
llassert(!"Invalid file mask");
|
||||||
|
}
|
||||||
|
|
||||||
LLDirIterator iter(dirname, mask);
|
LLDirIterator iter(dirname, mask);
|
||||||
while (iter.next(filename))
|
while (iter.next(filename))
|
||||||
{
|
{
|
||||||
fullpath = dirname;
|
fullpath = add(dirname, filename);
|
||||||
fullpath += getDirDelimiter();
|
|
||||||
fullpath += filename;
|
|
||||||
|
|
||||||
if(LLFile::isdir(fullpath))
|
if(LLFile::isdir(fullpath))
|
||||||
{
|
{
|
||||||
@@ -259,12 +275,12 @@ std::string LLDir::buildSLOSCacheDir() const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = getOSUserAppDir() + mDirDelimiter + "cache_sg1";
|
res = add(getOSUserAppDir(), "cache_sg1");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
res = getOSCacheDir() + mDirDelimiter + "SingularityViewer";
|
res = add(getOSCacheDir(), "SingularityViewer");
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -312,6 +328,39 @@ const std::string &LLDir::getLLPluginDir() const
|
|||||||
return mLLPluginDir;
|
return mLLPluginDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string ELLPathToString(ELLPath location)
|
||||||
|
{
|
||||||
|
typedef std::map<ELLPath, const char*> ELLPathMap;
|
||||||
|
#define ENT(symbol) (symbol, #symbol)
|
||||||
|
static const ELLPathMap sMap = map_list_of
|
||||||
|
ENT(LL_PATH_NONE)
|
||||||
|
ENT(LL_PATH_USER_SETTINGS)
|
||||||
|
ENT(LL_PATH_APP_SETTINGS)
|
||||||
|
ENT(LL_PATH_PER_SL_ACCOUNT) // returns/expands to blank string if we don't know the account name yet
|
||||||
|
ENT(LL_PATH_CACHE)
|
||||||
|
ENT(LL_PATH_CHARACTER)
|
||||||
|
ENT(LL_PATH_HELP)
|
||||||
|
ENT(LL_PATH_LOGS)
|
||||||
|
ENT(LL_PATH_TEMP)
|
||||||
|
ENT(LL_PATH_SKINS)
|
||||||
|
ENT(LL_PATH_TOP_SKIN)
|
||||||
|
ENT(LL_PATH_CHAT_LOGS)
|
||||||
|
ENT(LL_PATH_PER_ACCOUNT_CHAT_LOGS)
|
||||||
|
ENT(LL_PATH_USER_SKIN)
|
||||||
|
ENT(LL_PATH_LOCAL_ASSETS)
|
||||||
|
ENT(LL_PATH_EXECUTABLE)
|
||||||
|
ENT(LL_PATH_DEFAULT_SKIN)
|
||||||
|
ENT(LL_PATH_FONTS)
|
||||||
|
ENT(LL_PATH_LAST)
|
||||||
|
;
|
||||||
|
#undef ENT
|
||||||
|
|
||||||
|
ELLPathMap::const_iterator found = sMap.find(location);
|
||||||
|
if (found != sMap.end())
|
||||||
|
return found->second;
|
||||||
|
return STRINGIZE("Invalid ELLPath value " << location);
|
||||||
|
}
|
||||||
|
|
||||||
std::string LLDir::getExpandedFilename(ELLPath location, const std::string& filename) const
|
std::string LLDir::getExpandedFilename(ELLPath location, const std::string& filename) const
|
||||||
{
|
{
|
||||||
return getExpandedFilename(location, "", filename);
|
return getExpandedFilename(location, "", filename);
|
||||||
@@ -403,45 +452,29 @@ std::string LLDir::getExpandedFilename(ELLPath location, const std::string& subd
|
|||||||
llassert(0);
|
llassert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string filename = in_filename;
|
|
||||||
if (!subdir2.empty())
|
|
||||||
{
|
|
||||||
filename = add(subdir2, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!subdir1.empty())
|
|
||||||
{
|
|
||||||
filename = add(subdir1, filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prefix.empty())
|
if (prefix.empty())
|
||||||
{
|
{
|
||||||
llwarns << "prefix is empty, possible bad filename" << llendl;
|
llwarns << ELLPathToString(location)
|
||||||
|
<< ", '" << subdir1 << "', '" << subdir2 << "', '" << in_filename
|
||||||
|
<< "': prefix is empty, possible bad filename" << llendl;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string expanded_filename;
|
std::string expanded_filename = add(add(prefix, subdir1), subdir2);
|
||||||
if (!filename.empty())
|
if (expanded_filename.empty() && in_filename.empty())
|
||||||
{
|
{
|
||||||
if (!prefix.empty())
|
return "";
|
||||||
{
|
|
||||||
expanded_filename = add(prefix, filename);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
expanded_filename = filename;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!prefix.empty())
|
|
||||||
{
|
|
||||||
// Directory only, no file name.
|
|
||||||
expanded_filename = prefix;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
expanded_filename.assign("");
|
|
||||||
}
|
}
|
||||||
|
// Use explicit concatenation here instead of another add() call. Callers
|
||||||
|
// passing in_filename as "" expect to obtain a pathname ending with
|
||||||
|
// mDirSeparator so they can later directly concatenate with a specific
|
||||||
|
// filename. A caller using add() doesn't care, but there's still code
|
||||||
|
// loose in the system that uses std::string::operator+().
|
||||||
|
expanded_filename += mDirDelimiter;
|
||||||
|
expanded_filename += in_filename;
|
||||||
|
|
||||||
//llinfos << "*** EXPANDED FILENAME: <" << expanded_filename << ">" << llendl;
|
LL_DEBUGS("LLDir") << ELLPathToString(location)
|
||||||
|
<< ", '" << subdir1 << "', '" << subdir2 << "', '" << in_filename
|
||||||
|
<< "' => '" << expanded_filename << "'" << LL_ENDL;
|
||||||
return expanded_filename;
|
return expanded_filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1133,9 +1133,7 @@ void *updatethreadproc(void*)
|
|||||||
|
|
||||||
llinfos << "Clearing cache..." << llendl;
|
llinfos << "Clearing cache..." << llendl;
|
||||||
|
|
||||||
char mask[LL_MAX_PATH]; /* Flawfinder: ignore */
|
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),"*.*");
|
||||||
snprintf(mask, LL_MAX_PATH, "%s*.*", gDirUtilp->getDirDelimiter().c_str());
|
|
||||||
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);
|
|
||||||
|
|
||||||
llinfos << "Clear complete." << llendl;
|
llinfos << "Clear complete." << llendl;
|
||||||
|
|
||||||
|
|||||||
@@ -455,7 +455,6 @@ set(viewer_SOURCE_FILES
|
|||||||
llurl.cpp
|
llurl.cpp
|
||||||
llurldispatcher.cpp
|
llurldispatcher.cpp
|
||||||
llurlhistory.cpp
|
llurlhistory.cpp
|
||||||
llurlsimstring.cpp
|
|
||||||
llurlwhitelist.cpp
|
llurlwhitelist.cpp
|
||||||
lluserauth.cpp
|
lluserauth.cpp
|
||||||
llvectorperfoptions.cpp
|
llvectorperfoptions.cpp
|
||||||
@@ -957,7 +956,6 @@ set(viewer_HEADER_FILES
|
|||||||
llurl.h
|
llurl.h
|
||||||
llurldispatcher.h
|
llurldispatcher.h
|
||||||
llurlhistory.h
|
llurlhistory.h
|
||||||
llurlsimstring.h
|
|
||||||
llurlwhitelist.h
|
llurlwhitelist.h
|
||||||
lluserauth.h
|
lluserauth.h
|
||||||
llvectorperfoptions.h
|
llvectorperfoptions.h
|
||||||
|
|||||||
@@ -2224,6 +2224,17 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<string>F32</string>
|
<string>F32</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<real>0.075</real>
|
<real>0.075</real>
|
||||||
|
</map>
|
||||||
|
<key>AudioStreamingMedia</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Enable streaming</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>AudioStreamingMusic</key>
|
<key>AudioStreamingMusic</key>
|
||||||
<map>
|
<map>
|
||||||
@@ -2691,23 +2702,23 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>PluginAttachDebuggerToPlugins</key>
|
<key>BrowserEnableJSObject</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Opens a terminal window with a debugger and attach it, every time a new SLPlugin process is started.</string>
|
<string>(WARNING: Advanced feature. Use if you are aware of the implications). Enable or disable the viewer to Javascript bridge object.</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>0</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>Boolean</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>BlockAvatarAppearanceMessages</key>
|
<key>BlockAvatarAppearanceMessages</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Ignores appearance messages (for simulating Ruth)</string>
|
<string>Ignores appearance messages (for simulating Ruth)</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>Boolean</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
@@ -3769,17 +3780,6 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<string/>
|
<string/>
|
||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
<key>CmdLineRegionURI</key>
|
|
||||||
<map>
|
|
||||||
<key>Comment</key>
|
|
||||||
<string>URL of region to connect to through Agent Domain.</string>
|
|
||||||
<key>Persist</key>
|
|
||||||
<integer>0</integer>
|
|
||||||
<key>Type</key>
|
|
||||||
<string>String</string>
|
|
||||||
<key>Value</key>
|
|
||||||
<string/>
|
|
||||||
</map>
|
|
||||||
<key>ColorPaletteEntry01</key>
|
<key>ColorPaletteEntry01</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -5419,6 +5419,17 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>DisableExternalBrowser</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Disable opening an external browser.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
<key>DisableRendering</key>
|
<key>DisableRendering</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -6014,17 +6025,6 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>FirstLoginThisInstall</key>
|
|
||||||
<map>
|
|
||||||
<key>Comment</key>
|
|
||||||
<string>Specifies that you have not successfully logged in since you installed the latest update</string>
|
|
||||||
<key>Persist</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
<key>Type</key>
|
|
||||||
<string>Boolean</string>
|
|
||||||
<key>Value</key>
|
|
||||||
<integer>1</integer>
|
|
||||||
</map>
|
|
||||||
<key>FirstName</key>
|
<key>FirstName</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -6069,6 +6069,17 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>FirstLoginThisInstall</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Specifies that you have not successfully logged in since you installed the latest update</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
<key>FixedWeather</key>
|
<key>FixedWeather</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -9109,16 +9120,16 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>0</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>LoginLastLocation</key>
|
<key>LoginLocation</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
<string>Login at same location you last logged out</string>
|
<string>Default Login location ('last', 'home') preference</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>String</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<string>last</string>
|
||||||
</map>
|
</map>
|
||||||
<key>LoginPage</key>
|
<key>LoginPage</key>
|
||||||
<map>
|
<map>
|
||||||
@@ -9435,13 +9446,68 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
<key>Type</key>
|
<key>Type</key>
|
||||||
<string>Boolean</string>
|
<string>Boolean</string>
|
||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>0</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
<key>MemoryFailurePreventionEnabled</key>
|
<key>MediaPerformanceManagerDebug</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
<string>Whether to show debug data for the media performance manager in the nearby media list.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
|
<key>MediaShowOnOthers</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Whether or not to show media on other avatars</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
|
<key>MediaShowOutsideParcel</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Whether or not to show media from outside the current parcel</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
|
<key>MediaShowWithinParcel</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Whether or not to show media within the current parcel</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
|
<key>MediaTentativeAutoPlay</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>This is a tentative flag that may be temporarily set off by the user, until she teleports</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
|
<key>MemoryFailurePreventionEnabled</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
<string>If set, the viewer will quit to avoid crash when memory failure happens</string>
|
<string>If set, the viewer will quit to avoid crash when memory failure happens</string>
|
||||||
<key>Persist</key>
|
<key>Persist</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
@@ -10426,6 +10492,86 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<integer>1</integer>
|
<integer>1</integer>
|
||||||
</map>
|
</map>
|
||||||
|
<key>PluginAttachDebuggerToPlugins</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>If true, attach a debugger session to each plugin process as it's launched.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
|
<key>PluginInstancesCPULimit</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Amount of total plugin CPU usage before inworld plugins start getting turned down to "slideshow" priority. Set to 0 to disable this check.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>0.9</real>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>PlainTextChatHistory</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Enable/Disable plain text chat history style</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>PluginInstancesLow</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Limit on the number of inworld media plugins that will run at "low" priority</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>4</integer>
|
||||||
|
</map>
|
||||||
|
<key>PluginInstancesNormal</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Limit on the number of inworld media plugins that will run at "normal" or higher priority</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>2</integer>
|
||||||
|
</map>
|
||||||
|
<key>PluginInstancesTotal</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Hard limit on the number of plugins that will be instantiated at once for inworld media</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>8</integer>
|
||||||
|
</map>
|
||||||
|
|
||||||
|
<key>PluginUseReadThread</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Use a separate thread to read incoming messages from plugins</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
<key>PlayTypingSound</key>
|
<key>PlayTypingSound</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -10629,6 +10775,94 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
</array>
|
</array>
|
||||||
</map>
|
</map>
|
||||||
|
|
||||||
|
<key>PrimMediaMasterEnabled</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Whether or not Media on a Prim is enabled.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaControlsUseHoverControlSet</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Whether or not hovering over prim media uses minimal "hover" controls or the authored control set.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaDragNDrop</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Enable drag and drop of URLs onto prim faces</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>Boolean</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaMaxRetries</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Maximum number of retries for media queries.</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>4</integer>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaRequestQueueDelay</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Timer delay for fetching media from the queue (in seconds).</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>1.0</real>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaRetryTimerDelay</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Timer delay for retrying on media queries (in seconds).</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>5.0</real>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaMaxSortedQueueSize</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Maximum number of objects the viewer will load media for initially</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>100000</integer>
|
||||||
|
</map>
|
||||||
|
<key>PrimMediaMaxRoundRobinQueueSize</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Maximum number of objects the viewer will continuously update media for</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>U32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>100000</integer>
|
||||||
|
</map>
|
||||||
<key>PreviewAnimRect</key>
|
<key>PreviewAnimRect</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
@@ -10937,6 +11171,50 @@ This should be as low as possible, but too low may break functionality</string>
|
|||||||
<key>Value</key>
|
<key>Value</key>
|
||||||
<real>1.0</real>
|
<real>1.0</real>
|
||||||
</map>
|
</map>
|
||||||
|
<key>WebContentWindowLimit</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Maximum number of web browser windows that can be open at once in the Web content floater (0 for no limit)</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>S32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<integer>5</integer>
|
||||||
|
</map>
|
||||||
|
<key>MediaRollOffRate</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Multiplier to change rate of media attenuation</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>0.125</real>
|
||||||
|
</map>
|
||||||
|
<key>MediaRollOffMin</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Adjusts the distance at which media attentuation starts</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>5.0</real>
|
||||||
|
</map>
|
||||||
|
<key>MediaRollOffMax</key>
|
||||||
|
<map>
|
||||||
|
<key>Comment</key>
|
||||||
|
<string>Distance at which media volume is set to 0</string>
|
||||||
|
<key>Persist</key>
|
||||||
|
<integer>1</integer>
|
||||||
|
<key>Type</key>
|
||||||
|
<string>F32</string>
|
||||||
|
<key>Value</key>
|
||||||
|
<real>30.0</real>
|
||||||
|
</map>
|
||||||
<key>RecentItemsSortOrder</key>
|
<key>RecentItemsSortOrder</key>
|
||||||
<map>
|
<map>
|
||||||
<key>Comment</key>
|
<key>Comment</key>
|
||||||
|
|||||||
@@ -980,6 +980,8 @@ bool LLAppViewer::init()
|
|||||||
LLEnvManagerNew::instance().usePrefs();
|
LLEnvManagerNew::instance().usePrefs();
|
||||||
|
|
||||||
gGLActive = FALSE;
|
gGLActive = FALSE;
|
||||||
|
LLViewerMedia::initClass();
|
||||||
|
LL_INFOS("InitInfo") << "Viewer media initialized." << LL_ENDL ;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1706,8 +1708,7 @@ bool LLAppViewer::cleanup()
|
|||||||
if (mPurgeOnExit)
|
if (mPurgeOnExit)
|
||||||
{
|
{
|
||||||
llinfos << "Purging all cache files on exit" << llendflush;
|
llinfos << "Purging all cache files on exit" << llendflush;
|
||||||
std::string mask = gDirUtilp->getDirDelimiter() + "*.*";
|
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),"*.*");
|
||||||
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""),mask);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
removeMarkerFile(); // Any crashes from here on we'll just have to ignore
|
removeMarkerFile(); // Any crashes from here on we'll just have to ignore
|
||||||
@@ -2669,8 +2670,7 @@ void LLAppViewer::cleanupSavedSettings()
|
|||||||
|
|
||||||
void LLAppViewer::removeCacheFiles(const std::string& file_mask)
|
void LLAppViewer::removeCacheFiles(const std::string& file_mask)
|
||||||
{
|
{
|
||||||
std::string mask = gDirUtilp->getDirDelimiter() + file_mask;
|
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""), file_mask);
|
||||||
gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE, ""), mask);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLAppViewer::writeSystemInfo()
|
void LLAppViewer::writeSystemInfo()
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ gboolean viewer_app_api_GoSLURL(ViewerAppAPI *obj, gchar *slurl, gboolean **succ
|
|||||||
std::string url = slurl;
|
std::string url = slurl;
|
||||||
LLMediaCtrl* web = NULL;
|
LLMediaCtrl* web = NULL;
|
||||||
const bool trusted_browser = false;
|
const bool trusted_browser = false;
|
||||||
if (LLURLDispatcher::dispatch(url, web, trusted_browser))
|
if (LLURLDispatcher::dispatch(url, "", web, trusted_browser))
|
||||||
{
|
{
|
||||||
// bring window to foreground, as it has just been "launched" from a URL
|
// bring window to foreground, as it has just been "launched" from a URL
|
||||||
// todo: hmm, how to get there from here?
|
// todo: hmm, how to get there from here?
|
||||||
|
|||||||
@@ -475,7 +475,7 @@ OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)
|
|||||||
|
|
||||||
LLMediaCtrl* web = NULL;
|
LLMediaCtrl* web = NULL;
|
||||||
const bool trusted_browser = false;
|
const bool trusted_browser = false;
|
||||||
LLURLDispatcher::dispatch(url, web, trusted_browser);
|
LLURLDispatcher::dispatch(url, "", web, trusted_browser);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
|
|||||||
@@ -488,7 +488,7 @@ bool LLAppViewerWin32::initHardwareTest()
|
|||||||
if (OSBTN_NO== button)
|
if (OSBTN_NO== button)
|
||||||
{
|
{
|
||||||
LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL;
|
LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL;
|
||||||
LLWeb::loadURLExternal(DIRECTX_9_URL);
|
LLWeb::loadURLExternal(DIRECTX_9_URL, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
gSavedSettings.setWarning("AboutDirectX9", FALSE);
|
gSavedSettings.setWarning("AboutDirectX9", FALSE);
|
||||||
|
|||||||
@@ -134,9 +134,7 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
|
|
||||||
LLRect border_rect( 0, getRect().getHeight() + 2, getRect().getWidth() + 2, 0 );
|
//LLRect border_rect( 0, getRect().getHeight() + 2, getRect().getWidth() + 2, 0 );
|
||||||
mBorder = new LLViewBorder( std::string("web control border"), border_rect, LLViewBorder::BEVEL_IN );
|
|
||||||
addChild( mBorder );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LLMediaCtrl::~LLMediaCtrl()
|
LLMediaCtrl::~LLMediaCtrl()
|
||||||
@@ -152,10 +150,13 @@ LLMediaCtrl::~LLMediaCtrl()
|
|||||||
//
|
//
|
||||||
void LLMediaCtrl::setBorderVisible( BOOL border_visible )
|
void LLMediaCtrl::setBorderVisible( BOOL border_visible )
|
||||||
{
|
{
|
||||||
if ( mBorder )
|
if(border_visible && !mBorder)
|
||||||
{
|
{
|
||||||
mBorder->setVisible( border_visible );
|
mBorder = new LLViewBorder( std::string("web control border"), getLocalRect(), LLViewBorder::BEVEL_IN );
|
||||||
};
|
addChild( mBorder );
|
||||||
|
}
|
||||||
|
if(mBorder)
|
||||||
|
mBorder->setVisible(border_visible);
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@@ -705,7 +706,6 @@ LLPluginClassMedia* LLMediaCtrl::getMediaPlugin()
|
|||||||
//
|
//
|
||||||
void LLMediaCtrl::draw()
|
void LLMediaCtrl::draw()
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( gRestoreGL == 1 )
|
if ( gRestoreGL == 1 )
|
||||||
{
|
{
|
||||||
LLRect r = getRect();
|
LLRect r = getRect();
|
||||||
|
|||||||
@@ -61,7 +61,11 @@ BOOL LLPanelGeneral::postBuild()
|
|||||||
LLComboBox* namesystem_combobox = getChild<LLComboBox>("namesystem_combobox");
|
LLComboBox* namesystem_combobox = getChild<LLComboBox>("namesystem_combobox");
|
||||||
namesystem_combobox->setCurrentByIndex(gSavedSettings.getS32("PhoenixNameSystem"));
|
namesystem_combobox->setCurrentByIndex(gSavedSettings.getS32("PhoenixNameSystem"));
|
||||||
|
|
||||||
childSetValue("default_start_location", gSavedSettings.getBOOL("LoginLastLocation") ? "MyLastLocation" : "MyHome");
|
std::string login_location = gSavedSettings.getString("LoginLocation");
|
||||||
|
if(login_location != "last" && login_location != "home")
|
||||||
|
login_location = "last";
|
||||||
|
|
||||||
|
childSetValue("default_start_location", login_location);
|
||||||
childSetValue("show_location_checkbox", gSavedSettings.getBOOL("ShowStartLocation"));
|
childSetValue("show_location_checkbox", gSavedSettings.getBOOL("ShowStartLocation"));
|
||||||
childSetValue("show_all_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitleAll"));
|
childSetValue("show_all_title_checkbox", gSavedSettings.getBOOL("RenderHideGroupTitleAll"));
|
||||||
childSetValue("language_is_public", gSavedSettings.getBOOL("LanguageIsPublic"));
|
childSetValue("language_is_public", gSavedSettings.getBOOL("LanguageIsPublic"));
|
||||||
@@ -147,7 +151,7 @@ void LLPanelGeneral::apply()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gSavedSettings.setBOOL("LoginLastLocation", childGetValue("default_start_location").asString() == "MyLastLocation");
|
gSavedSettings.setString("LoginLocation", childGetValue("default_start_location").asString());
|
||||||
gSavedSettings.setBOOL("ShowStartLocation", childGetValue("show_location_checkbox"));
|
gSavedSettings.setBOOL("ShowStartLocation", childGetValue("show_location_checkbox"));
|
||||||
gSavedSettings.setBOOL("RenderHideGroupTitleAll", childGetValue("show_all_title_checkbox"));
|
gSavedSettings.setBOOL("RenderHideGroupTitleAll", childGetValue("show_all_title_checkbox"));
|
||||||
gSavedSettings.setBOOL("LanguageIsPublic", childGetValue("language_is_public"));
|
gSavedSettings.setBOOL("LanguageIsPublic", childGetValue("language_is_public"));
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
struct LLOfferInfo;
|
struct LLOfferInfo;
|
||||||
|
|
||||||
const F32 UPDATE_MEMBERS_SECONDS_PER_FRAME = 0.005; // 5ms
|
const F32 UPDATE_MEMBERS_SECONDS_PER_FRAME = 0.005f; // 5ms
|
||||||
|
|
||||||
// Forward declares
|
// Forward declares
|
||||||
class LLPanelGroupTab;
|
class LLPanelGroupTab;
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ static bool nameSplit(const std::string& full, std::string& first, std::string&
|
|||||||
first = fragments[0];
|
first = fragments[0];
|
||||||
if (fragments.size() == 1)
|
if (fragments.size() == 1)
|
||||||
{
|
{
|
||||||
if (gHippoGridManager->getConnectedGrid()->isAurora())
|
if (gHippoGridManager->getCurrentGrid()->isAurora())
|
||||||
last = "";
|
last = "";
|
||||||
else
|
else
|
||||||
last = "Resident";
|
last = "Resident";
|
||||||
@@ -183,6 +183,8 @@ class LLIamHereLogin : public LLHTTPClient::ResponderHeadersOnly
|
|||||||
{
|
{
|
||||||
if (mParent)
|
if (mParent)
|
||||||
{
|
{
|
||||||
|
if(200 <= status && status < 300)
|
||||||
|
llinfos << "Found site" << llendl;
|
||||||
mParent->setSiteIsAlive(200 <= status && status < 300);
|
mParent->setSiteIsAlive(200 <= status && status < 300);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -276,7 +278,7 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
|||||||
LLSLURL defaultStart(defaultStartLocation);
|
LLSLURL defaultStart(defaultStartLocation);
|
||||||
if ( defaultStart.isSpatial() )
|
if ( defaultStart.isSpatial() )
|
||||||
{
|
{
|
||||||
LLStartUp::setStartSLURL(defaultStart);
|
LLStartUp::setStartSLURL(defaultStart); // calls onUpdateStartSLURL
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -284,36 +286,13 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
|||||||
LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
|
LLSLURL homeStart(LLSLURL::SIM_LOCATION_HOME);
|
||||||
LLStartUp::setStartSLURL(homeStart);
|
LLStartUp::setStartSLURL(homeStart);
|
||||||
}
|
}
|
||||||
|
start_slurl = LLStartUp::getStartSLURL(); // calls onUpdateStartSLURL
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
|
LLPanelLogin::onUpdateStartSLURL(start_slurl); // updates grid if needed
|
||||||
}
|
}
|
||||||
|
|
||||||
// The XML file loads the combo with the following labels:
|
|
||||||
// 0 - "My Home"
|
|
||||||
// 1 - "My Last Location"
|
|
||||||
// 2 - "<Type region name>"
|
|
||||||
|
|
||||||
BOOL login_last = gSavedSettings.getBOOL("LoginLastLocation");
|
|
||||||
std::string sim_string = start_slurl.getRegion();
|
|
||||||
if (!sim_string.empty())
|
|
||||||
{
|
|
||||||
// Replace "<Type region name>" with this region name
|
|
||||||
location_combo->remove(2);
|
|
||||||
location_combo->add( sim_string );
|
|
||||||
location_combo->setTextEntry(sim_string);
|
|
||||||
location_combo->setCurrentByIndex( 2 );
|
|
||||||
}
|
|
||||||
else if (login_last)
|
|
||||||
{
|
|
||||||
location_combo->setCurrentByIndex( 1 );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
location_combo->setCurrentByIndex( 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
childSetAction("connect_btn", onClickConnect, this);
|
childSetAction("connect_btn", onClickConnect, this);
|
||||||
|
|
||||||
setDefaultBtn("connect_btn");
|
setDefaultBtn("connect_btn");
|
||||||
@@ -342,16 +321,13 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
|
|||||||
// get the web browser control
|
// get the web browser control
|
||||||
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
|
LLMediaCtrl* web_browser = getChild<LLMediaCtrl>("login_html");
|
||||||
web_browser->addObserver(this);
|
web_browser->addObserver(this);
|
||||||
|
web_browser->setBackgroundColor(LLColor4::black);
|
||||||
|
|
||||||
reshapeBrowser();
|
reshapeBrowser();
|
||||||
|
|
||||||
childSetVisible("create_new_account_text",
|
|
||||||
!gHippoGridManager->getConnectedGrid()->getRegisterUrl().empty());
|
|
||||||
childSetVisible("forgot_password_text",
|
|
||||||
!gHippoGridManager->getConnectedGrid()->getPasswordUrl().empty());
|
|
||||||
|
|
||||||
loadLoginPage();
|
loadLoginPage();
|
||||||
|
|
||||||
|
refreshLoginPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLPanelLogin::setSiteIsAlive( bool alive )
|
void LLPanelLogin::setSiteIsAlive( bool alive )
|
||||||
@@ -374,6 +350,8 @@ void LLPanelLogin::setSiteIsAlive( bool alive )
|
|||||||
{
|
{
|
||||||
// hide browser control (revealing default one)
|
// hide browser control (revealing default one)
|
||||||
web_browser->setVisible( FALSE );
|
web_browser->setVisible( FALSE );
|
||||||
|
std::string str = LLWeb::escapeURL("data:text/html,<html><body bgcolor=\"rgb(0,0,0)\"></body></html>");
|
||||||
|
web_browser->navigateTo( str, "text/html" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -402,8 +380,8 @@ void LLPanelLogin::reshapeBrowser()
|
|||||||
LLRect rect = gViewerWindow->getWindowRectScaled();
|
LLRect rect = gViewerWindow->getWindowRectScaled();
|
||||||
LLRect html_rect;
|
LLRect html_rect;
|
||||||
html_rect.setCenterAndSize(
|
html_rect.setCenterAndSize(
|
||||||
rect.getCenterX() - 2, rect.getCenterY() + 40,
|
rect.getCenterX() /*- 2*/, rect.getCenterY() + 40,
|
||||||
rect.getWidth() + 6, rect.getHeight() - 78 );
|
rect.getWidth() /*+ 6*/, rect.getHeight() - 78 );
|
||||||
web_browser->setRect( html_rect );
|
web_browser->setRect( html_rect );
|
||||||
web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
|
web_browser->reshape( html_rect.getWidth(), html_rect.getHeight(), TRUE );
|
||||||
reshape( rect.getWidth(), rect.getHeight(), 1 );
|
reshape( rect.getWidth(), rect.getHeight(), 1 );
|
||||||
@@ -761,7 +739,7 @@ void LLPanelLogin::onUpdateStartSLURL(const LLSLURL& new_start_slurl)
|
|||||||
switch ( new_slurl_type )
|
switch ( new_slurl_type )
|
||||||
{
|
{
|
||||||
case LLSLURL::LOCATION:
|
case LLSLURL::LOCATION:
|
||||||
{
|
{
|
||||||
location_combo->setCurrentByIndex( 2 );
|
location_combo->setCurrentByIndex( 2 );
|
||||||
location_combo->setTextEntry(new_start_slurl.getLocationString());
|
location_combo->setTextEntry(new_start_slurl.getLocationString());
|
||||||
}
|
}
|
||||||
@@ -845,7 +823,7 @@ void LLPanelLogin::loadLoginPage()
|
|||||||
|
|
||||||
sInstance->updateGridCombo();
|
sInstance->updateGridCombo();
|
||||||
|
|
||||||
std::string login_page_str = gHippoGridManager->getConnectedGrid()->getLoginPage();
|
std::string login_page_str = gHippoGridManager->getCurrentGrid()->getLoginPage();
|
||||||
if (login_page_str.empty())
|
if (login_page_str.empty())
|
||||||
{
|
{
|
||||||
sInstance->setSiteIsAlive(false);
|
sInstance->setSiteIsAlive(false);
|
||||||
@@ -876,10 +854,10 @@ void LLPanelLogin::loadLoginPage()
|
|||||||
|
|
||||||
// Grid
|
// Grid
|
||||||
|
|
||||||
if (gHippoGridManager->getConnectedGrid()->isSecondLife()) {
|
if (gHippoGridManager->getCurrentGrid()->isSecondLife()) {
|
||||||
// find second life grid from login URI
|
// find second life grid from login URI
|
||||||
// yes, this is heuristic, but hey, it is just to get the right login page...
|
// yes, this is heuristic, but hey, it is just to get the right login page...
|
||||||
std::string tmp = gHippoGridManager->getConnectedGrid()->getLoginUri();
|
std::string tmp = gHippoGridManager->getCurrentGrid()->getLoginUri();
|
||||||
int i = tmp.find(".lindenlab.com");
|
int i = tmp.find(".lindenlab.com");
|
||||||
if (i != std::string::npos) {
|
if (i != std::string::npos) {
|
||||||
tmp = tmp.substr(0, i);
|
tmp = tmp.substr(0, i);
|
||||||
@@ -892,11 +870,11 @@ void LLPanelLogin::loadLoginPage()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (gHippoGridManager->getConnectedGrid()->isOpenSimulator())
|
else if (gHippoGridManager->getCurrentGrid()->isOpenSimulator())
|
||||||
{
|
{
|
||||||
params["grid"] = gHippoGridManager->getConnectedGrid()->getGridNick();
|
params["grid"] = gHippoGridManager->getCurrentGrid()->getGridNick();
|
||||||
}
|
}
|
||||||
else if (gHippoGridManager->getConnectedGrid()->getPlatform() == HippoGridInfo::PLATFORM_AURORA)
|
else if (gHippoGridManager->getCurrentGrid()->getPlatform() == HippoGridInfo::PLATFORM_AURORA)
|
||||||
{
|
{
|
||||||
params["grid"] = LLViewerLogin::getInstance()->getGridLabel();
|
params["grid"] = LLViewerLogin::getInstance()->getGridLabel();
|
||||||
}
|
}
|
||||||
@@ -970,7 +948,7 @@ void LLPanelLogin::onClickConnect(void *)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gHippoGridManager->getConnectedGrid()->getRegisterUrl().empty()) {
|
if (gHippoGridManager->getCurrentGrid()->getRegisterUrl().empty()) {
|
||||||
LLNotificationsUtil::add("MustHaveAccountToLogInNoLinks");
|
LLNotificationsUtil::add("MustHaveAccountToLogInNoLinks");
|
||||||
} else {
|
} else {
|
||||||
LLNotificationsUtil::add("MustHaveAccountToLogIn", LLSD(), LLSD(),
|
LLNotificationsUtil::add("MustHaveAccountToLogIn", LLSD(), LLSD(),
|
||||||
@@ -1001,7 +979,7 @@ bool LLPanelLogin::newAccountAlertCallback(const LLSD& notification, const LLSD&
|
|||||||
// static
|
// static
|
||||||
void LLPanelLogin::onClickNewAccount()
|
void LLPanelLogin::onClickNewAccount()
|
||||||
{
|
{
|
||||||
const std::string &url = gHippoGridManager->getConnectedGrid()->getRegisterUrl();
|
const std::string &url = gHippoGridManager->getCurrentGrid()->getRegisterUrl();
|
||||||
if (!url.empty()) {
|
if (!url.empty()) {
|
||||||
llinfos << "Going to account creation URL." << llendl;
|
llinfos << "Going to account creation URL." << llendl;
|
||||||
LLWeb::loadURLExternal(url);
|
LLWeb::loadURLExternal(url);
|
||||||
@@ -1030,7 +1008,7 @@ void LLPanelLogin::onClickForgotPassword()
|
|||||||
{
|
{
|
||||||
if (sInstance )
|
if (sInstance )
|
||||||
{
|
{
|
||||||
const std::string &url = gHippoGridManager->getConnectedGrid()->getPasswordUrl();
|
const std::string &url = gHippoGridManager->getCurrentGrid()->getPasswordUrl();
|
||||||
if (!url.empty()) {
|
if (!url.empty()) {
|
||||||
LLWeb::loadURLExternal(url);
|
LLWeb::loadURLExternal(url);
|
||||||
} else {
|
} else {
|
||||||
@@ -1059,17 +1037,31 @@ void LLPanelLogin::refreshLoginPage()
|
|||||||
sInstance->updateGridCombo();
|
sInstance->updateGridCombo();
|
||||||
|
|
||||||
sInstance->childSetVisible("create_new_account_text",
|
sInstance->childSetVisible("create_new_account_text",
|
||||||
!gHippoGridManager->getConnectedGrid()->getRegisterUrl().empty());
|
!gHippoGridManager->getCurrentGrid()->getRegisterUrl().empty());
|
||||||
sInstance->childSetVisible("forgot_password_text",
|
sInstance->childSetVisible("forgot_password_text",
|
||||||
!gHippoGridManager->getConnectedGrid()->getPasswordUrl().empty());
|
!gHippoGridManager->getCurrentGrid()->getPasswordUrl().empty());
|
||||||
|
|
||||||
// kick off a request to grab the url manually
|
std::string login_page = gHippoGridManager->getCurrentGrid()->getLoginPage();
|
||||||
gResponsePtr = LLIamHereLogin::build(sInstance);
|
if (!login_page.empty())
|
||||||
|
{
|
||||||
|
LLMediaCtrl* web_browser = sInstance->getChild<LLMediaCtrl>("login_html");
|
||||||
|
if (web_browser->getCurrentNavUrl() != login_page)
|
||||||
|
{
|
||||||
|
if(gResponsePtr)
|
||||||
|
gResponsePtr->setParent(0); //Tell our previous responder that we no longer require its result.
|
||||||
|
gResponsePtr.reset(); //Deref previous responder
|
||||||
|
|
||||||
std::string login_page = gHippoGridManager->getConnectedGrid()->getLoginPage();
|
llinfos << "Firing off lookup for " << login_page << llendl;
|
||||||
if (!login_page.empty()) {
|
// kick off a request to grab the url manually
|
||||||
LLHTTPClient::head(login_page, gResponsePtr.get());
|
gResponsePtr = LLIamHereLogin::build(sInstance);
|
||||||
} else {
|
LLHTTPClient::head(login_page, gResponsePtr.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(gResponsePtr)
|
||||||
|
gResponsePtr->setParent(0); //Tell our previous responder that we no longer require its result.
|
||||||
|
gResponsePtr.reset(); //Deref previous responder
|
||||||
sInstance->setSiteIsAlive(false);
|
sInstance->setSiteIsAlive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -403,8 +403,6 @@ bool idle_startup()
|
|||||||
|
|
||||||
static bool show_connect_box = true;
|
static bool show_connect_box = true;
|
||||||
|
|
||||||
static bool samename = false;
|
|
||||||
|
|
||||||
// HACK: These are things from the main loop that usually aren't done
|
// HACK: These are things from the main loop that usually aren't done
|
||||||
// until initialization is complete, but need to be done here for things
|
// until initialization is complete, but need to be done here for things
|
||||||
// to work.
|
// to work.
|
||||||
@@ -1096,9 +1094,9 @@ bool idle_startup()
|
|||||||
/*std::string location;
|
/*std::string location;
|
||||||
LLPanelLogin::getLocation( location );
|
LLPanelLogin::getLocation( location );
|
||||||
LLURLSimString::setString( location );
|
LLURLSimString::setString( location );
|
||||||
|
*/
|
||||||
// END TODO
|
// END TODO
|
||||||
LLPanelLogin::close();*/
|
LLPanelLogin::close();
|
||||||
}
|
}
|
||||||
|
|
||||||
//For HTML parsing in text boxes.
|
//For HTML parsing in text boxes.
|
||||||
@@ -1305,26 +1303,31 @@ bool idle_startup()
|
|||||||
progress += 0.02f;
|
progress += 0.02f;
|
||||||
display_startup();
|
display_startup();
|
||||||
|
|
||||||
|
LLSLURL start_slurl = LLStartUp::getStartSLURL();
|
||||||
std::stringstream start;
|
std::stringstream start;
|
||||||
if (LLURLSimString::parse())
|
LLSLURL::SLURL_TYPE start_slurl_type = start_slurl.getType();
|
||||||
|
switch ( start_slurl_type )
|
||||||
{
|
{
|
||||||
|
case LLSLURL::LOCATION:
|
||||||
|
{
|
||||||
// a startup URL was specified
|
// a startup URL was specified
|
||||||
std::stringstream unescaped_start;
|
std::stringstream unescaped_start;
|
||||||
unescaped_start << "uri:"
|
unescaped_start << "uri:"
|
||||||
<< LLURLSimString::sInstance.mSimName << "&"
|
<< start_slurl.getRegion() << "&"
|
||||||
<< LLURLSimString::sInstance.mX << "&"
|
<< start_slurl.getPosition().mV[VX] << "&"
|
||||||
<< LLURLSimString::sInstance.mY << "&"
|
<< start_slurl.getPosition().mV[VY] << "&"
|
||||||
<< LLURLSimString::sInstance.mZ;
|
<< start_slurl.getPosition().mV[VZ];
|
||||||
start << xml_escape_string(unescaped_start.str());
|
start << xml_escape_string(unescaped_start.str());
|
||||||
|
}
|
||||||
}
|
break;
|
||||||
else if (gSavedSettings.getBOOL("LoginLastLocation"))
|
case LLSLURL::HOME_LOCATION:
|
||||||
{
|
|
||||||
start << "last";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
start << "home";
|
start << "home";
|
||||||
|
break;
|
||||||
|
case LLSLURL::LAST_LOCATION:
|
||||||
|
start << "last";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
|
char hashed_mac_string[MD5HEX_STR_SIZE]; /* Flawfinder: ignore */
|
||||||
|
|||||||
@@ -1,184 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file llurlsimstring.cpp (was llsimurlstring.cpp)
|
|
||||||
* @brief Handles "SLURL fragments" like Ahern/123/45 for
|
|
||||||
* startup processing, login screen, prefs, etc.
|
|
||||||
*
|
|
||||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
|
||||||
*
|
|
||||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
|
||||||
* online at
|
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
|
||||||
* that you have read and understood your obligations described above,
|
|
||||||
* and agree to abide by those obligations.
|
|
||||||
*
|
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
|
||||||
* $/LicenseInfo$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "llviewerprecompiledheaders.h"
|
|
||||||
|
|
||||||
#include "llurlsimstring.h"
|
|
||||||
|
|
||||||
#include "llpanellogin.h"
|
|
||||||
#include "llviewercontrol.h"
|
|
||||||
|
|
||||||
#include <curl/curl.h> // curl_unescape, curl_free
|
|
||||||
#ifdef DEBUG_CURLIO
|
|
||||||
#include "debug_libcurl.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//static
|
|
||||||
LLURLSimString LLURLSimString::sInstance;
|
|
||||||
std::string LLURLSimString::sLocationStringHome("My Home");
|
|
||||||
std::string LLURLSimString::sLocationStringLast("My Last Location");
|
|
||||||
|
|
||||||
// "secondlife://simname/x/y/z" -> "simname/x/y/z"
|
|
||||||
// (actually .*//foo -> foo)
|
|
||||||
// static
|
|
||||||
void LLURLSimString::setString(const std::string& sim_string)
|
|
||||||
{
|
|
||||||
sInstance.mSimString.clear();
|
|
||||||
sInstance.mSimName.clear();
|
|
||||||
sInstance.mParseState = NOT_PARSED;
|
|
||||||
if (sim_string == sLocationStringHome)
|
|
||||||
{
|
|
||||||
gSavedSettings.setBOOL("LoginLastLocation", FALSE);
|
|
||||||
}
|
|
||||||
else if (sim_string == sLocationStringLast)
|
|
||||||
{
|
|
||||||
gSavedSettings.setBOOL("LoginLastLocation", TRUE);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char* curlstr = curl_unescape(sim_string.c_str(), sim_string.size());
|
|
||||||
std::string tstring = std::string(curlstr);
|
|
||||||
curl_free(curlstr);
|
|
||||||
std::string::size_type idx = tstring.find("//");
|
|
||||||
idx = (idx == std::string::npos) ? 0 : idx+2;
|
|
||||||
sInstance.mSimString = tstring.substr(idx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// "/100" -> 100
|
|
||||||
// static
|
|
||||||
std::string::size_type LLURLSimString::parseGridIdx(const std::string& in_string,
|
|
||||||
std::string::size_type idx0,
|
|
||||||
std::string::size_type* res)
|
|
||||||
{
|
|
||||||
if (idx0 == std::string::npos || in_string[idx0] != '/')
|
|
||||||
{
|
|
||||||
return std::string::npos; // parse error
|
|
||||||
}
|
|
||||||
idx0++;
|
|
||||||
std::string::size_type idx1 = in_string.find_first_of('/', idx0);
|
|
||||||
std::string::size_type len = (idx1 == std::string::npos) ? std::string::npos : idx1-idx0;
|
|
||||||
std::string tstring = in_string.substr(idx0,len);
|
|
||||||
if (!tstring.empty())
|
|
||||||
{
|
|
||||||
std::string::size_type val = atoi(tstring.c_str());
|
|
||||||
*res = val;
|
|
||||||
}
|
|
||||||
return idx1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// "simname/x/y/z" -> mSimName = simname, mX = x, mY = y, mZ = z
|
|
||||||
// static
|
|
||||||
bool LLURLSimString::parse()
|
|
||||||
{
|
|
||||||
if (sInstance.mParseState == NOT_SET)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (sInstance.mParseState == NOT_PARSED)
|
|
||||||
{
|
|
||||||
if (parse(sInstance.mSimString,
|
|
||||||
&sInstance.mSimName,
|
|
||||||
&sInstance.mX,
|
|
||||||
&sInstance.mY,
|
|
||||||
&sInstance.mZ))
|
|
||||||
{
|
|
||||||
sInstance.mParseState = PARSE_OK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sInstance.mParseState = PARSE_FAIL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (sInstance.mParseState == PARSE_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
bool LLURLSimString::parse(const std::string& sim_string,
|
|
||||||
std::string *region_name,
|
|
||||||
S32 *x, S32 *y, S32 *z)
|
|
||||||
{
|
|
||||||
// strip any bogus initial '/'
|
|
||||||
std::string::size_type idx0 = sim_string.find_first_not_of('/');
|
|
||||||
if (idx0 == std::string::npos) idx0 = 0;
|
|
||||||
|
|
||||||
std::string::size_type idx1 = sim_string.find_first_of('/', idx0);
|
|
||||||
std::string::size_type len = (idx1 == std::string::npos) ? std::string::npos : idx1-idx0;
|
|
||||||
std::string tstring = sim_string.substr(idx0,len);
|
|
||||||
*region_name = unescapeRegionName(tstring);
|
|
||||||
if (!region_name->empty())
|
|
||||||
{
|
|
||||||
// return position data if found. otherwise leave passed-in values alone. (DEV-18380) -MG
|
|
||||||
if (idx1 != std::string::npos)
|
|
||||||
{
|
|
||||||
std::string::size_type xs = *x, ys = *y, zs = *z;
|
|
||||||
idx1 = parseGridIdx(sim_string, idx1, &xs);
|
|
||||||
idx1 = parseGridIdx(sim_string, idx1, &ys);
|
|
||||||
idx1 = parseGridIdx(sim_string, idx1, &zs);
|
|
||||||
*x = xs;
|
|
||||||
*y = ys;
|
|
||||||
*z = zs;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
std::string LLURLSimString::getURL()
|
|
||||||
{
|
|
||||||
std::string url;
|
|
||||||
if (sInstance.mParseState == PARSE_OK)
|
|
||||||
{
|
|
||||||
url = llformat("secondlife://%s/%d/%d/%d/",
|
|
||||||
sInstance.mSimName.c_str(),
|
|
||||||
sInstance.mX,
|
|
||||||
sInstance.mY,
|
|
||||||
sInstance.mZ);
|
|
||||||
}
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
std::string LLURLSimString::unescapeRegionName(std::string region_name)
|
|
||||||
{
|
|
||||||
std::string result;
|
|
||||||
char* curlstr = curl_unescape(region_name.c_str(), region_name.size());
|
|
||||||
result = std::string(curlstr);
|
|
||||||
curl_free(curlstr);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
/**
|
|
||||||
* @file llsimurlstring.h
|
|
||||||
* @brief Handles "SLURL fragments" like Ahern/123/45 for
|
|
||||||
* startup processing, login screen, prefs, etc.
|
|
||||||
*
|
|
||||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
|
||||||
*
|
|
||||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
|
||||||
*
|
|
||||||
* Second Life Viewer Source Code
|
|
||||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
|
||||||
* to you under the terms of the GNU General Public License, version 2.0
|
|
||||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
|
||||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
|
||||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
|
||||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
|
||||||
*
|
|
||||||
* There are special exceptions to the terms and conditions of the GPL as
|
|
||||||
* it is applied to this Source Code. View the full text of the exception
|
|
||||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
|
||||||
* online at
|
|
||||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
|
||||||
*
|
|
||||||
* By copying, modifying or distributing this software, you acknowledge
|
|
||||||
* that you have read and understood your obligations described above,
|
|
||||||
* and agree to abide by those obligations.
|
|
||||||
*
|
|
||||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
|
||||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
|
||||||
* COMPLETENESS OR PERFORMANCE.
|
|
||||||
* $/LicenseInfo$
|
|
||||||
*/
|
|
||||||
#ifndef LLSIMURLSTRING_H
|
|
||||||
#define LLSIMURLSTRING_H
|
|
||||||
|
|
||||||
#include "llstring.h"
|
|
||||||
|
|
||||||
class LLURLSimString
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
enum { NOT_SET=0, NOT_PARSED=1, PARSE_OK=2, PARSE_FAIL=-1 };
|
|
||||||
|
|
||||||
static void setString(const std::string& url);
|
|
||||||
// Accepts all sorts of fragments:
|
|
||||||
// secondlife://RegionName/1/2/
|
|
||||||
// sl://RegionName/1/2/3/
|
|
||||||
// //Ahern/123/45/
|
|
||||||
// Ahern
|
|
||||||
|
|
||||||
static bool parse();
|
|
||||||
// Returns true if we have an URL fragment in the static instance
|
|
||||||
// (and it parsed correctly, which is basically always because
|
|
||||||
// any bare region string is a valid fragment).
|
|
||||||
|
|
||||||
static bool parse(const std::string& sim_string, std::string *region_name, S32 *x, S32 *y, S32 *z);
|
|
||||||
// Parse a sim string "Ahern/1/2" and return location data,
|
|
||||||
// doesn't affect static instance.
|
|
||||||
|
|
||||||
static std::string getURL();
|
|
||||||
// Get the canonical URL secondlife://RegionName/123/45/6/
|
|
||||||
|
|
||||||
static std::string unescapeRegionName(std::string region_name);
|
|
||||||
// Does URL unescaping, in particular %20 -> space
|
|
||||||
|
|
||||||
LLURLSimString() : mX(128), mY(128), mZ(0), mParseState(NOT_PARSED) {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
static std::string::size_type parseGridIdx(const std::string& in_string,
|
|
||||||
std::string::size_type idx0,
|
|
||||||
std::string::size_type* res);
|
|
||||||
|
|
||||||
public:
|
|
||||||
static LLURLSimString sInstance;
|
|
||||||
static std::string sLocationStringHome;
|
|
||||||
static std::string sLocationStringLast;
|
|
||||||
|
|
||||||
public:
|
|
||||||
std::string mSimString; // "name/x/y/z"
|
|
||||||
std::string mSimName;
|
|
||||||
S32 mX,mY,mZ;
|
|
||||||
S32 mParseState;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -3046,8 +3046,8 @@ void LLViewerMediaImpl::setVisible(bool visible)
|
|||||||
if(plugin && plugin->isPluginExited())
|
if(plugin && plugin->isPluginExited())
|
||||||
{
|
{
|
||||||
destroyMediaSource();
|
destroyMediaSource();
|
||||||
|
plugin = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!plugin)
|
if(!plugin)
|
||||||
{
|
{
|
||||||
createMediaSource();
|
createMediaSource();
|
||||||
@@ -3716,11 +3716,10 @@ void LLViewerMediaImpl::setPriority(EPriority priority)
|
|||||||
mPreviousMediaTime = plugin->getCurrentTime();
|
mPreviousMediaTime = plugin->getCurrentTime();
|
||||||
|
|
||||||
destroyMediaSource();
|
destroyMediaSource();
|
||||||
|
plugin = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(plugin)
|
if(plugin)
|
||||||
{
|
{
|
||||||
if(mPriority >= PRIORITY_LOW)
|
if(mPriority >= PRIORITY_LOW)
|
||||||
|
|||||||
@@ -185,9 +185,7 @@ void LLViewerTextureList::doPreloadImages()
|
|||||||
|
|
||||||
static std::string get_texture_list_name()
|
static std::string get_texture_list_name()
|
||||||
{
|
{
|
||||||
//return std::string("texture_list_") + gSavedSettings.getString("LoginLocation") + ".xml";
|
return std::string("texture_list_") + gSavedSettings.getString("LoginLocation") + ".xml";
|
||||||
bool login_last = gSavedSettings.getBOOL("LoginLastLocation");
|
|
||||||
return std::string("texture_list_") + (login_last?"last":"home") + ".xml";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLViewerTextureList::doPrefetchImages()
|
void LLViewerTextureList::doPrefetchImages()
|
||||||
|
|||||||
@@ -521,7 +521,7 @@ bool LLWaterParamManager::removeParamSet(const std::string& name, bool delete_fr
|
|||||||
bool LLWaterParamManager::isSystemPreset(const std::string& preset_name) const
|
bool LLWaterParamManager::isSystemPreset(const std::string& preset_name) const
|
||||||
{
|
{
|
||||||
// *TODO: file system access is excessive here.
|
// *TODO: file system access is excessive here.
|
||||||
return gDirUtilp->fileExists(getSysDir() + LLWeb::curlEscape(preset_name) + ".xml");
|
return gDirUtilp->fileExists(getSysDir() + LLURI::escape(preset_name) + ".xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLWaterParamManager::getPresetNames(preset_name_list_t& presets) const
|
void LLWaterParamManager::getPresetNames(preset_name_list_t& presets) const
|
||||||
|
|||||||
@@ -2771,6 +2771,15 @@ Please choose the male or female avatar. You can change your mind later.
|
|||||||
notext="Female"
|
notext="Female"
|
||||||
yestext="Male"/>
|
yestext="Male"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
<notification icon="alertmodal.tga"
|
||||||
|
name="CantTeleportToGrid"
|
||||||
|
type="alertmodal">
|
||||||
|
Could not teleport to [SLURL] as it's on a different grid ([GRID]) than the current grid ([CURRENT_GRID]). Please close your viewer and try again.
|
||||||
|
<tag>fail</tag>
|
||||||
|
<usetemplate
|
||||||
|
name="okbutton"
|
||||||
|
yestext="OK"/>
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
icon="alertmodal.tga"
|
icon="alertmodal.tga"
|
||||||
@@ -3512,9 +3521,12 @@ which exceeds the limit of [LIMIT].
|
|||||||
name="okbutton"
|
name="okbutton"
|
||||||
yestext="OK"/>
|
yestext="OK"/>
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="alertmodal.tga"
|
||||||
name="OfferTeleportFromGod"
|
name="OfferTeleportFromGod"
|
||||||
type="alertmodal">
|
type="alertmodal">
|
||||||
God summon user to your location?
|
God summon Resident to your location?
|
||||||
<form name="form">
|
<form name="form">
|
||||||
<input name="message" type="text">
|
<input name="message" type="text">
|
||||||
Join me in [REGION]
|
Join me in [REGION]
|
||||||
@@ -7353,6 +7365,16 @@ The SLurl you clicked on is not supported.
|
|||||||
A SLurl was received from an untrusted browser and has been blocked for your security.
|
A SLurl was received from an untrusted browser and has been blocked for your security.
|
||||||
</notification>
|
</notification>
|
||||||
|
|
||||||
|
<notification
|
||||||
|
icon="notifytip.tga"
|
||||||
|
name="ThrottledSLURL"
|
||||||
|
priority="high"
|
||||||
|
type="notifytip">
|
||||||
|
<tag>security</tag>
|
||||||
|
Multiple SLurls were received from an untrusted browser within a short period.
|
||||||
|
They will be blocked for a few seconds for your security.
|
||||||
|
</notification>
|
||||||
|
|
||||||
<notification
|
<notification
|
||||||
duration="10"
|
duration="10"
|
||||||
icon="notifytip.tga"
|
icon="notifytip.tga"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<panel border="true" bottom="-409" height="408" label="General" left="102" name="general_panel" width="517">
|
<panel border="true" bottom="-409" height="408" label="General" left="102" name="general_panel" width="517">
|
||||||
<radio_group bottom="-44" height="40" left="109" name="default_start_location" width="199">
|
<radio_group bottom="-44" height="40" left="109" name="default_start_location" width="199">
|
||||||
<radio_item bottom="-20" height="20" name="MyHome" tool_tip="Log into my home location by default.">My Home</radio_item>
|
<radio_item bottom="-20" height="20" name="home" tool_tip="Log into my home location by default.">My Home</radio_item>
|
||||||
<radio_item bottom="-20" height="20" left="93" name="MyLastLocation" tool_tip="Log into my last location by default.">My Last Location</radio_item>
|
<radio_item bottom="-20" height="20" left="93" name="last" tool_tip="Log into my last location by default.">My Last Location</radio_item>
|
||||||
</radio_group>
|
</radio_group>
|
||||||
<check_box bottom="-42" height="16" initial_value="true" label="Show Start Location on Login Screen" name="show_location_checkbox"/>
|
<check_box bottom="-42" height="16" initial_value="true" label="Show Start Location on Login Screen" name="show_location_checkbox"/>
|
||||||
<combo_box bottom_delta="-27" follows="top" height="18" left="103" name="fade_out_combobox" width="111">
|
<combo_box bottom_delta="-27" follows="top" height="18" left="103" name="fade_out_combobox" width="111">
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<panel label="General" name="general_panel">
|
<panel label="General" name="general_panel">
|
||||||
<radio_group name="default_start_location" width="250">
|
<radio_group name="default_start_location" width="250">
|
||||||
<radio_item name="MyHome" tool_tip="Iniciar sesión de forma predeterminada en Mi Base.">
|
<radio_item name="home" tool_tip="Iniciar sesión de forma predeterminada en Mi Base.">
|
||||||
Mi Base
|
Mi Base
|
||||||
</radio_item>
|
</radio_item>
|
||||||
<radio_item name="MyLastLocation" tool_tip="Iniciar sesión de forma predeterminada en mi última ubicación.">
|
<radio_item name="last" tool_tip="Iniciar sesión de forma predeterminada en mi última ubicación.">
|
||||||
Mi Última Ubicación
|
Mi Última Ubicación
|
||||||
</radio_item>
|
</radio_item>
|
||||||
</radio_group>
|
</radio_group>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||||
<panel label="Général" name="general_panel">
|
<panel label="Général" name="general_panel">
|
||||||
<radio_group name="default_start_location" width="280">
|
<radio_group name="default_start_location" width="280">
|
||||||
<radio_item name="MyHome" tool_tip="Par défaut, choisit le domicile comme lieu de départ.">Domicile</radio_item>
|
<radio_item name="home" tool_tip="Par défaut, choisit le domicile comme lieu de départ.">Domicile</radio_item>
|
||||||
<radio_item name="MyLastLocation" tool_tip="Par défaut, choisit le dernier emplacement comme lieu de départ.">Dernier emplacement</radio_item>
|
<radio_item name="last" tool_tip="Par défaut, choisit le dernier emplacement comme lieu de départ.">Dernier emplacement</radio_item>
|
||||||
</radio_group>
|
</radio_group>
|
||||||
<check_box label="Afficher le lieu de départ sur l'écran de connexion" name="show_location_checkbox"/>
|
<check_box label="Afficher le lieu de départ sur l'écran de connexion" name="show_location_checkbox"/>
|
||||||
<combo_box name="fade_out_combobox">
|
<combo_box name="fade_out_combobox">
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||||
<panel label="Geral" name="general_panel">
|
<panel label="Geral" name="general_panel">
|
||||||
<radio_group name="default_start_location">
|
<radio_group name="default_start_location">
|
||||||
<radio_item name="MyHome" tool_tip="Como padrão, registrar na minha casa.">
|
<radio_item name="home" tool_tip="Como padrão, registrar na minha casa.">
|
||||||
Minha Casa
|
Minha Casa
|
||||||
</radio_item>
|
</radio_item>
|
||||||
<radio_item name="MyLastLocation" tool_tip="Por padrão, registrar na minha última localidade.">
|
<radio_item name="last" tool_tip="Por padrão, registrar na minha última localidade.">
|
||||||
Minha Última Localidade
|
Minha Última Localidade
|
||||||
</radio_item>
|
</radio_item>
|
||||||
</radio_group>
|
</radio_group>
|
||||||
|
|||||||
Reference in New Issue
Block a user