diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 7f3537a82..b18d31b6a 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -29,6 +29,10 @@ #include "../../events/SDL_events_c.h" #include "../../events/SDL_touch_c.h" +/* Dropfile support */ +#include + + /*#define WMMSG_DEBUG*/ @@ -619,7 +623,29 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) return 0; } break; - } + + case WM_DROPFILES: + { + UINT i; + HDROP drop = (HDROP) wParam; + UINT count = DragQueryFile(drop, 0xFFFFFFFF, NULL, 0); + for (i = 0; i < count; ++i) { + UINT size = DragQueryFile(drop, i, NULL, 0) + 1; + LPTSTR buffer = SDL_stack_alloc(TCHAR, size); + if (buffer) { + if (DragQueryFile(drop, i, buffer, size)) { + char *file = WIN_StringToUTF8(buffer); + SDL_SendDropFile(file); + SDL_free(file); + } + SDL_stack_free(buffer); + } + } + DragFinish(drop); + return 0; + } + break; + } /* If there's a window proc, assume it's going to handle messages */ if (data->wndproc) { diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index 9f36c8fb2..f0c29b100 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -29,6 +29,9 @@ #include "SDL_windowsvideo.h" #include "SDL_windowswindow.h" +/* Dropfile support */ +#include + /* This is included after SDL_windowsvideo.h, which includes windows.h */ #include "SDL_syswm.h" @@ -185,6 +188,9 @@ SetupWindowData(_THIS, SDL_Window * window, HWND hwnd, SDL_bool created) videodata->RegisterTouchWindow(hwnd, (TWF_FINETOUCH|TWF_WANTPALM)); } + /* Enable dropping files */ + DragAcceptFiles(hwnd, TRUE); + /* All done! */ return 0; }