Backed out changeset: 57dc52edbbc9
parent
7135537435
commit
eba6d0236f
|
|
@ -163,6 +163,11 @@ void LLWindowCallbacks::handleDataCopy(LLWindow *window, S32 data_type, void *da
|
|||
{
|
||||
}
|
||||
|
||||
BOOL LLWindowCallbacks::handleDrop(LLWindow *window, LLCoordGL pos, MASK mask, void *data)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLWindowCallbacks::handleTimerEvent(LLWindow *window)
|
||||
{
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -68,6 +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, void *data);
|
||||
virtual BOOL handleTimerEvent(LLWindow *window);
|
||||
virtual BOOL handleDeviceChange(LLWindow *window);
|
||||
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@
|
|||
#include <mapi.h>
|
||||
#include <process.h> // for _spawn
|
||||
#include <shellapi.h>
|
||||
#include <fstream>
|
||||
#include <Imm.h>
|
||||
|
||||
// Require DirectInput version 8
|
||||
|
|
@ -1348,6 +1349,9 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
|
|||
}
|
||||
|
||||
SetWindowLong(mWindowHandle, GWL_USERDATA, (U32)this);
|
||||
|
||||
// register this window as handling drag/drop events from the OS
|
||||
DragAcceptFiles( mWindowHandle, TRUE );
|
||||
|
||||
//register joystick timer callback
|
||||
SetTimer( mWindowHandle, 0, 1000 / 30, NULL ); // 30 fps timer
|
||||
|
|
@ -2333,11 +2337,65 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
return 0;
|
||||
|
||||
case WM_COPYDATA:
|
||||
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA");
|
||||
// received a URL
|
||||
PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param;
|
||||
window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData);
|
||||
{
|
||||
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_COPYDATA");
|
||||
// received a URL
|
||||
PCOPYDATASTRUCT myCDS = (PCOPYDATASTRUCT) l_param;
|
||||
window_imp->mCallbacks->handleDataCopy(window_imp, myCDS->dwData, myCDS->lpData);
|
||||
};
|
||||
return 0;
|
||||
|
||||
case WM_DROPFILES:
|
||||
{
|
||||
// HDROP contains what we need
|
||||
HDROP hdrop = (HDROP)w_param;
|
||||
|
||||
// get location in window space where drop occured and convert to OpenGL coordinate space
|
||||
POINT pt;
|
||||
DragQueryPoint( hdrop, &pt );
|
||||
LLCoordGL gl_coord;
|
||||
LLCoordWindow cursor_coord_window( pt.x, pt.y );
|
||||
window_imp->convertCoords(cursor_coord_window, &gl_coord);
|
||||
|
||||
// get payload (eventually, this needs to more advanced and grab size of payload dynamically
|
||||
static char file_name[ 1024 ];
|
||||
DragQueryFileA( hdrop, 0, file_name, 1024 );
|
||||
void* url = (void*)( file_name );
|
||||
|
||||
// if it's a .URL or .lnk ("shortcut") file
|
||||
if ( std::string( file_name ).find( ".lnk" ) != std::string::npos ||
|
||||
std::string( file_name ).find( ".URL" ) != std::string::npos )
|
||||
{
|
||||
// read through file - looks like a 2 line file with second line URL= but who knows..
|
||||
std::ifstream file_handle( file_name );
|
||||
if ( file_handle.is_open() )
|
||||
{
|
||||
std::string line;
|
||||
while ( ! file_handle.eof() )
|
||||
{
|
||||
std::getline( file_handle, line );
|
||||
if ( ! file_handle.eof() )
|
||||
{
|
||||
std::string prefix( "URL=" );
|
||||
if ( line.find( prefix, 0 ) != std::string::npos )
|
||||
{
|
||||
line = line.substr( 4 ); // skip off the URL= bit
|
||||
strcpy( (char*)url, line.c_str() );
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
file_handle.close();
|
||||
};
|
||||
};
|
||||
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
if (window_imp->mCallbacks->handleDrop(window_imp, gl_coord, mask, url ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
window_imp->mCallbacks->handlePauseWatchdog(window_imp);
|
||||
|
|
|
|||
|
|
@ -815,6 +815,20 @@ 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, void* data)
|
||||
{
|
||||
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 = std::string( (char*)data );
|
||||
|
||||
llinfos << "### Object: picked at " << pos.mX << ", " << pos.mY << " - face = " << object_face << " - URL = " << url << llendl;
|
||||
|
||||
// Always handled as far as the OS is concerned.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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, void* 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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue