diff options
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/app_settings/settings.xml | 11 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 43 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.h | 3 | 
3 files changed, 56 insertions, 1 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 15c9499bbc..7ac27e4ee0 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -5415,6 +5415,17 @@        <key>Value</key>        <integer>0</integer>      </map> +	<key>PrimMediaDragNDrop</key> +	<map> +		<key>Comment</key> +		<string>Enable drag and drop</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> diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1054223dcf..06d6819b5e 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -79,6 +79,7 @@  #include "timing.h"  #include "llviewermenu.h"  #include "lltooltip.h" +#include "llmediaentry.h"  // newview includes  #include "llagent.h" @@ -817,6 +818,48 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MAS    	// Always handled as far as the OS is concerned.  	return TRUE;  } + +BOOL LLViewerWindow::handleDrop( LLWindow *window,  LLCoordGL pos, MASK mask, std::string data ) +{ +	if (gSavedSettings.getBOOL("PrimMediaDragNDrop")) +	{ +		LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY,  TRUE /*BOOL pick_transparent*/ ); + +		LLUUID object_id = pick_info.getObjectID(); +		S32 object_face = pick_info.mObjectFace; +		std::string url = data; + +		llinfos << "### Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl; + +		LLVOVolume *obj = dynamic_cast<LLVOVolume*>(static_cast<LLViewerObject*>(pick_info.getObject())); +		if (obj) +		{ +			LLTextureEntry *te = obj->getTE(object_face); +			if (te) +			{ +				if (! te->hasMedia()) +				{ +					// Create new media entry +					LLSD media_data; +					// XXX Should we really do Home URL too? +					media_data[LLMediaEntry::HOME_URL_KEY] = url; +					media_data[LLMediaEntry::CURRENT_URL_KEY] = url; +					media_data[LLMediaEntry::AUTO_PLAY_KEY] = true; +					obj->syncMediaData(object_face, media_data, true, true); +					// XXX This shouldn't be necessary, should it ?!? +					obj->getMediaImpl(object_face)->navigateReload(); +					obj->sendMediaDataUpdate(); +				} +				else { +					// just navigate to the URL +					obj->getMediaImpl(object_face)->navigateTo(url); +				} +			} +		} +	} +  	// Always handled as far as the OS is concerned. +	return TRUE; +}  BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask)  { diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index ce71ef6173..cdc9eb4786 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -170,7 +170,8 @@ public:  	/*virtual*/ BOOL handleRightMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ BOOL handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask); -	/*virtual*/ void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask); +	/*virtual*/ BOOL handleDrop(LLWindow *window,  LLCoordGL pos, MASK mask, std::string data); +				void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask);  	/*virtual*/ void handleMouseLeave(LLWindow *window);  	/*virtual*/ void handleResize(LLWindow *window,  S32 x,  S32 y);  	/*virtual*/ void handleFocus(LLWindow *window); | 
