diff options
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llsdparam.cpp | 2 | ||||
| -rw-r--r-- | indra/llui/llsdparam.h | 7 | ||||
| -rw-r--r-- | indra/llui/llurlaction.cpp | 28 | ||||
| -rw-r--r-- | indra/llui/llurlaction.h | 21 | 
4 files changed, 35 insertions, 23 deletions
diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp index 6fa90933a4..0e29873bb0 100644 --- a/indra/llui/llsdparam.cpp +++ b/indra/llui/llsdparam.cpp @@ -36,6 +36,8 @@ static 	LLInitParam::Parser::parser_write_func_map_t sWriteFuncs;  static 	LLInitParam::Parser::parser_inspect_func_map_t sInspectFuncs;  static const LLSD NO_VALUE_MARKER; +LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR("LLSD to LLInitParam conversion"); +  //  // LLParamSDParser  // diff --git a/indra/llui/llsdparam.h b/indra/llui/llsdparam.h index c1cfa98399..3dfc6d020e 100644 --- a/indra/llui/llsdparam.h +++ b/indra/llui/llsdparam.h @@ -91,6 +91,8 @@ private:  	LLSD*					mCurWriteSD;  }; + +extern LLFastTimer::DeclareTimer FTM_SD_PARAM_ADAPTOR;  template<typename T>  class LLSDParamAdapter : public T  { @@ -98,8 +100,11 @@ public:  	LLSDParamAdapter() {}  	LLSDParamAdapter(const LLSD& sd)  	{ +		LLFastTimer _(FTM_SD_PARAM_ADAPTOR);  		LLParamSDParser parser; -		parser.readSD(sd, *this); +		// don't spam for implicit parsing of LLSD, as we want to allow arbitrary freeform data and ignore most of it +		bool parse_silently = true; +		parser.readSD(sd, *this, parse_silently);  	}  	operator LLSD() const diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 42b779bd28..fd9b3d9a6d 100644 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -33,28 +33,28 @@  #include "llurlregistry.h"  // global state for the callback functions -void (*LLUrlAction::sOpenURLCallback) (const std::string& url) = NULL; -void (*LLUrlAction::sOpenURLInternalCallback) (const std::string& url) = NULL; -void (*LLUrlAction::sOpenURLExternalCallback) (const std::string& url) = NULL; -bool (*LLUrlAction::sExecuteSLURLCallback) (const std::string& url) = NULL; +LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLCallback; +LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLInternalCallback; +LLUrlAction::url_callback_t 		LLUrlAction::sOpenURLExternalCallback; +LLUrlAction::execute_url_callback_t LLUrlAction::sExecuteSLURLCallback; -void LLUrlAction::setOpenURLCallback(void (*cb) (const std::string& url)) +void LLUrlAction::setOpenURLCallback(url_callback_t cb)  {  	sOpenURLCallback = cb;  } -void LLUrlAction::setOpenURLInternalCallback(void (*cb) (const std::string& url)) +void LLUrlAction::setOpenURLInternalCallback(url_callback_t cb)  {  	sOpenURLInternalCallback = cb;  } -void LLUrlAction::setOpenURLExternalCallback(void (*cb) (const std::string& url)) +void LLUrlAction::setOpenURLExternalCallback(url_callback_t cb)  {  	sOpenURLExternalCallback = cb;  } -void LLUrlAction::setExecuteSLURLCallback(bool (*cb) (const std::string& url)) +void LLUrlAction::setExecuteSLURLCallback(execute_url_callback_t cb)  {  	sExecuteSLURLCallback = cb;  } @@ -63,7 +63,7 @@ void LLUrlAction::openURL(std::string url)  {  	if (sOpenURLCallback)  	{ -		(*sOpenURLCallback)(url); +		sOpenURLCallback(url);  	}  } @@ -71,7 +71,7 @@ void LLUrlAction::openURLInternal(std::string url)  {  	if (sOpenURLInternalCallback)  	{ -		(*sOpenURLInternalCallback)(url); +		sOpenURLInternalCallback(url);  	}  } @@ -79,7 +79,7 @@ void LLUrlAction::openURLExternal(std::string url)  {  	if (sOpenURLExternalCallback)  	{ -		(*sOpenURLExternalCallback)(url); +		sOpenURLExternalCallback(url);  	}  } @@ -87,18 +87,18 @@ void LLUrlAction::executeSLURL(std::string url)  {  	if (sExecuteSLURLCallback)  	{ -		(*sExecuteSLURLCallback)(url); +		sExecuteSLURLCallback(url);  	}  }  void LLUrlAction::clickAction(std::string url)  {  	// Try to handle as SLURL first, then http Url -	if ( (sExecuteSLURLCallback) && !(*sExecuteSLURLCallback)(url) ) +	if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) )  	{  		if (sOpenURLCallback)  		{ -			(*sOpenURLCallback)(url); +			sOpenURLCallback(url);  		}  	}  } diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 0132dbaaf0..c34960b826 100644 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -29,6 +29,7 @@  #define LL_LLURLACTION_H  #include <string> +#include <boost/function.hpp>  ///  /// The LLUrlAction class provides a number of static functions that @@ -77,17 +78,21 @@ public:  	static void showProfile(std::string url);  	/// specify the callbacks to enable this class's functionality -	static void	setOpenURLCallback(void (*cb) (const std::string& url)); -	static void	setOpenURLInternalCallback(void (*cb) (const std::string& url)); -	static void	setOpenURLExternalCallback(void (*cb) (const std::string& url)); -	static void	setExecuteSLURLCallback(bool (*cb) (const std::string& url)); +	typedef boost::function<void (const std::string&)> url_callback_t; +	typedef boost::function<bool(const std::string& url)> execute_url_callback_t; + +	static void	setOpenURLCallback(url_callback_t cb); +	static void	setOpenURLInternalCallback(url_callback_t cb); +	static void	setOpenURLExternalCallback(url_callback_t cb); +	static void	setExecuteSLURLCallback(execute_url_callback_t cb);  private:  	// callbacks for operations we can perform on Urls -	static void (*sOpenURLCallback) (const std::string& url); -	static void (*sOpenURLInternalCallback) (const std::string& url); -	static void (*sOpenURLExternalCallback) (const std::string& url); -	static bool (*sExecuteSLURLCallback) (const std::string& url); +	static url_callback_t sOpenURLCallback; +	static url_callback_t sOpenURLInternalCallback; +	static url_callback_t sOpenURLExternalCallback; + +	static execute_url_callback_t sExecuteSLURLCallback;  };  #endif  | 
