diff options
| -rw-r--r-- | indra/llwindow/lldragdropwin32.cpp | 18 | ||||
| -rw-r--r-- | indra/llwindow/llwindowcallbacks.cpp | 2 | ||||
| -rw-r--r-- | indra/llwindow/llwindowcallbacks.h | 2 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 13 | ||||
| -rw-r--r-- | indra/llwindow/llwindowwin32.h | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 39 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.h | 2 | 
7 files changed, 48 insertions, 30 deletions
| diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp index d05dbf19a5..879f2d2b90 100644 --- a/indra/llwindow/lldragdropwin32.cpp +++ b/indra/llwindow/lldragdropwin32.cpp @@ -171,6 +171,22 @@ class LLDragDropWin32Target:  		STDMETHOD (DragOver)(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
  		{
  			HRESULT hr = S_OK;
 +			// XXX MAJOR MAJOR HACK!
 +			LLWindowWin32 *window_imp = (LLWindowWin32 *)GetWindowLong(mWindowHandle, GWL_USERDATA);
 +			if (NULL != window_imp)
 +			{
 +				LLCoordGL gl_coord( 0, 0 );
 +
 +				POINT pt2;
 +				pt2.x = pt.x;
 +				pt2.y = pt.y;
 +				ScreenToClient( mWindowHandle, &pt2 );
 +
 +				LLCoordWindow cursor_coord_window( pt2.x, pt2.y );
 +				window_imp->convertCoords(cursor_coord_window, &gl_coord);
 +				MASK mask = gKeyboard->currentMask(TRUE);
 +				bDropTargetValid = window_imp->completeDragNDropRequest( gl_coord, mask, FALSE, std::string( "" ) );
 +			}
  			if (bDropTargetValid) 
  				*pdwEffect=DROPEFFECT_COPY;
 @@ -225,7 +241,7 @@ class LLDragDropWin32Target:  						llinfos << llendl;
  						MASK mask = gKeyboard->currentMask(TRUE);
 -						window_imp->completeDropRequest( gl_coord, mask, std::string( lpszText ) );
 +						window_imp->completeDragNDropRequest( gl_coord, mask, TRUE, std::string( lpszText ) );
  					};
  					GlobalUnlock(hText);
 diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp index 1098529e1c..b8927a1ac4 100644 --- a/indra/llwindow/llwindowcallbacks.cpp +++ b/indra/llwindow/llwindowcallbacks.cpp @@ -163,7 +163,7 @@ void LLWindowCallbacks::handleDataCopy(LLWindow *window, S32 data_type, void *da  {  } -BOOL LLWindowCallbacks::handleDrop(LLWindow *window, LLCoordGL pos, MASK mask, std::string data ) +BOOL LLWindowCallbacks::handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, BOOL drop, std::string data )  {  	return FALSE;  } diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h index 3a09100168..8e7605a650 100644 --- a/indra/llwindow/llwindowcallbacks.h +++ b/indra/llwindow/llwindowcallbacks.h @@ -68,7 +68,7 @@ public:  	virtual void handleWindowBlock(LLWindow *window);							// window is taking over CPU for a while  	virtual void handleWindowUnblock(LLWindow *window);							// window coming back after taking over CPU for a while  	virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data); -	virtual BOOL handleDrop(LLWindow *window, LLCoordGL pos, MASK mask, std::string data); +	virtual BOOL handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, BOOL drop, std::string data);  	virtual BOOL handleTimerEvent(LLWindow *window);  	virtual BOOL handleDeviceChange(LLWindow *window); diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index da096b9a0a..eda8cf15b0 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2401,7 +2401,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_  				MASK mask = gKeyboard->currentMask(TRUE);
 -				if ( window_imp->completeDropRequest( gl_coord, mask, (char*)url ) )
 +				if ( window_imp->completeDragNDropRequest( gl_coord, mask, true, (char*)url ) )
  				{
  					return 0;
  				};
 @@ -3578,15 +3578,10 @@ static LLWString find_context(const LLWString & wtext, S32 focus, S32 focus_leng  // final stage of handling drop requests - both from WM_DROPFILES message
  // for files and via IDropTarget interface requests.
 -BOOL LLWindowWin32::completeDropRequest( const LLCoordGL gl_coord, const MASK mask, const std::string url )
 +BOOL LLWindowWin32::completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, BOOL drop, const std::string url )
  {
 -	if ( mCallbacks->handleDrop( this, gl_coord, mask, url ) )
 -	{
 -		return TRUE;
 -	};
 -
 -	return FALSE;
 -};
 +	return mCallbacks->handleDragNDrop( this, gl_coord, mask, drop, url );
 +}
  // Handle WM_IME_REQUEST message.
  // If it handled the message, returns TRUE.  Otherwise, FALSE.
 diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h index 1382cf93a2..e99c26b7f1 100644 --- a/indra/llwindow/llwindowwin32.h +++ b/indra/llwindow/llwindowwin32.h @@ -113,7 +113,7 @@ public:  	/*virtual*/ void interruptLanguageTextInput();  	/*virtual*/ void spawnWebBrowser(const std::string& escaped_url); -	BOOL completeDropRequest( const LLCoordGL gl_coord, const MASK mask, const std::string url ); +	BOOL completeDragNDropRequest( const LLCoordGL gl_coord, const MASK mask, BOOL drop, const std::string url );  	static std::vector<std::string> getDynamicFallbackFontList(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 06d6819b5e..d2f81f21ac 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -819,8 +819,9 @@ BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window,  LLCoordGL pos, MAS  	return TRUE;  } -BOOL LLViewerWindow::handleDrop( LLWindow *window,  LLCoordGL pos, MASK mask, std::string data ) +BOOL LLViewerWindow::handleDragNDrop( LLWindow *window,  LLCoordGL pos, MASK mask, BOOL drop, std::string data )  { +	BOOL result = FALSE;  	if (gSavedSettings.getBOOL("PrimMediaDragNDrop"))  	{  		LLPickInfo pick_info = pickImmediate( pos.mX, pos.mY,  TRUE /*BOOL pick_transparent*/ ); @@ -837,28 +838,34 @@ BOOL LLViewerWindow::handleDrop( LLWindow *window,  LLCoordGL pos, MASK mask, st  			LLTextureEntry *te = obj->getTE(object_face);  			if (te)  			{ -				if (! te->hasMedia()) +				if (drop)  				{ -					// 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(); +					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); +					}  				}  				else { -					// just navigate to the URL -					obj->getMediaImpl(object_face)->navigateTo(url); +					// XXX TODO: make object glow?  Hard because how do we "unglow?"  				} +				result = TRUE;  			}  		}  	} -  	// Always handled as far as the OS is concerned. -	return TRUE; +	return result;  }  BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask) diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index cdc9eb4786..d7cfcff925 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -170,7 +170,7 @@ 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*/ BOOL handleDrop(LLWindow *window,  LLCoordGL pos, MASK mask, std::string data); +	/*virtual*/ BOOL handleDragNDrop(LLWindow *window,  LLCoordGL pos, MASK mask, BOOL drop, 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); | 
