Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed bug 1593 - SDL_DROPFILE event doesn't work on Windows
Philipp Wiesemann 2012-09-30 05:56:09 PDT

I attached a patch which tries to implement the dropfile support for Microsoft
Windows. If applied SDL_DROPFILE events should be sent for single or multiple
files which are dropped on window.

The handling on Windows side is always activated (cursor will change and so on)
because there is no connection between SDL_EventState() and the window setup. I
assumed this additional overhead would be small and can be ignored.
  • Loading branch information
slouken committed Sep 30, 2012
1 parent 0df86b8 commit 67aa757
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
28 changes: 27 additions & 1 deletion src/video/windows/SDL_windowsevents.c
Expand Up @@ -29,6 +29,10 @@
#include "../../events/SDL_events_c.h"
#include "../../events/SDL_touch_c.h"

/* Dropfile support */
#include <shellapi.h>




/*#define WMMSG_DEBUG*/
Expand Down Expand Up @@ -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) {
Expand Down
6 changes: 6 additions & 0 deletions src/video/windows/SDL_windowswindow.c
Expand Up @@ -29,6 +29,9 @@
#include "SDL_windowsvideo.h"
#include "SDL_windowswindow.h"

/* Dropfile support */
#include <shellapi.h>

/* This is included after SDL_windowsvideo.h, which includes windows.h */
#include "SDL_syswm.h"

Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 67aa757

Please sign in to comment.