Commit 12857dfd authored by Richard M. Stallman's avatar Richard M. Stallman

Include shellapi.h.

(construct_drag_n_drop): New function.
(w32_read_socket): Handle WM_DROPFILES messages.
parent cb9e33d4
......@@ -28,6 +28,7 @@ Boston, MA 02111-1307, USA. */
#include "blockinput.h"
#include "w32term.h"
#include <shellapi.h>
#include "systty.h"
#include "systime.h"
......@@ -1408,6 +1409,52 @@ construct_mouse_wheel (result, msg, f)
XSETFRAME (result->frame_or_window, f);
}
static void
construct_drag_n_drop (result, msg, f)
struct input_event *result;
W32Msg *msg;
struct frame *f;
{
Lisp_Object files;
Lisp_Object frame;
HDROP hdrop;
POINT p;
WORD num_files;
char *name;
int i, len;
result->kind = drag_n_drop;
result->code = 0;
result->timestamp = msg->msg.time;
result->modifiers = msg->dwModifiers;
p.x = LOWORD (msg->msg.lParam);
p.y = HIWORD (msg->msg.lParam);
ScreenToClient (msg->msg.hwnd, &p);
XSETINT (result->x, p.x);
XSETINT (result->y, p.y);
hdrop = (HDROP) msg->msg.wParam;
DragQueryPoint (hdrop, &p);
num_files = DragQueryFile (hdrop, 0xFFFFFFFF, NULL, 0);
files = Qnil;
for (i = 0; i < num_files; i++)
{
len = DragQueryFile (hdrop, i, NULL, 0);
if (len <= 0)
continue;
name = alloca (len + 1);
DragQueryFile (hdrop, i, name, len + 1);
files = Fcons (build_string (name), files);
}
DragFinish (hdrop);
XSETFRAME (frame, f);
result->frame_or_window = Fcons (frame, files);
}
/* Function to report a mouse movement to the mainstream Emacs code.
The input handler calls this.
......@@ -2991,6 +3038,18 @@ w32_read_socket (sd, bufp, numchars, expected)
}
break;
case WM_DROPFILES:
f = x_window_to_frame (dpyinfo, msg.msg.hwnd);
if (f)
{
construct_drag_n_drop (bufp, &msg, f);
bufp++;
count++;
numchars--;
}
break;
case WM_VSCROLL:
{
struct scroll_bar *bar =
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment