diff options
Diffstat (limited to 'indra/llplugin')
| -rw-r--r-- | indra/llplugin/llpluginclassmedia.cpp | 28 | ||||
| -rw-r--r-- | indra/llplugin/llpluginclassmedia.h | 12 | 
2 files changed, 40 insertions, 0 deletions
| diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 69f19afdad..3d2eaed5c5 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -37,6 +37,8 @@  #include "llpluginclassmedia.h"  #include "llpluginmessageclasses.h" +#include "llqtwebkit.h" +  static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;  static int nextPowerOf2( int value ) @@ -134,6 +136,9 @@ void LLPluginClassMedia::reset()  	mHistoryForwardAvailable = false;  	mStatusText.clear();  	mProgressPercent = 0;	 +	mClickURL.clear(); +	mClickTarget.clear(); +	mClickTargetType = TARGET_NONE;  	// media_time class  	mCurrentTime = 0.0f; @@ -669,6 +674,26 @@ void LLPluginClassMedia::paste()  	sendMessage(message);  } +LLPluginClassMedia::ETargetType getTargetTypeFromLLQtWebkit(int target_type) +{ +	// convert a LinkTargetType value from llqtwebkit to an ETargetType +	// so that we don't expose the llqtwebkit header in viewer code +	switch (target_type) +	{ +	case LinkTargetType::LTT_TARGET_NONE: +		return LLPluginClassMedia::TARGET_NONE; + +	case LinkTargetType::LTT_TARGET_BLANK: +		return LLPluginClassMedia::TARGET_BLANK; + +	case LinkTargetType::LTT_TARGET_EXTERNAL: +		return LLPluginClassMedia::TARGET_EXTERNAL; + +	default: +		return LLPluginClassMedia::TARGET_OTHER; +	} +} +  /* virtual */   void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)  { @@ -921,12 +946,15 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)  		{  			mClickURL = message.getValue("uri");  			mClickTarget = message.getValue("target"); +			U32 target_type = message.getValueU32("target_type"); +			mClickTargetType = ::getTargetTypeFromLLQtWebkit(target_type);  			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF);  		}  		else if(message_name == "click_nofollow")  		{  			mClickURL = message.getValue("uri");  			mClickTarget.clear(); +			mClickTargetType = TARGET_NONE;  			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);  		}  		else diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index 5a1928ab1d..ebb9099576 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -214,6 +214,17 @@ public:  	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF  	std::string getClickTarget() const { return mClickTarget; }; +	typedef enum  +	{ +		TARGET_NONE,        // empty href target string +		TARGET_BLANK,       // target to open link in user's preferred browser +		TARGET_EXTERNAL,    // target to open link in external browser +		TARGET_OTHER        // nonempty and unsupported target type +	}ETargetType; + +	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF +	ETargetType getClickTargetType() const { return mClickTargetType; }; +  	std::string getMediaName() const { return mMediaName; };  	std::string getMediaDescription() const { return mMediaDescription; }; @@ -344,6 +355,7 @@ protected:  	std::string		mLocation;  	std::string		mClickURL;  	std::string		mClickTarget; +	ETargetType     mClickTargetType;  	/////////////////////////////////////////  	// media_time class | 
