diff src/event-msw.c @ 284:558f606b08ae r21-0b40

Import from CVS: tag r21-0b40
author cvs
date Mon, 13 Aug 2007 10:34:13 +0200
parents c42ec1d1cded
children 57709be46d1b
line wrap: on
line diff
--- a/src/event-msw.c	Mon Aug 13 10:33:19 2007 +0200
+++ b/src/event-msw.c	Mon Aug 13 10:34:13 2007 +0200
@@ -43,8 +43,11 @@
 # include "menubar-msw.h"
 #endif
 
+#ifdef HAVE_DRAGNDROP
+# include "dragdrop.h"
+#endif
+
 #include "device.h"
-#include "dragdrop.h"
 #include "events.h"
 #include "frame.h"
 #include "lstream.h"
@@ -58,6 +61,8 @@
 #include "events-mod.h"
 #ifdef HAVE_MSG_SELECT
 #include "sysfile.h"
+#elif defined(__CYGWIN32__)
+typedef unsigned int SOCKET;
 #endif
 #include <io.h>
 #include <errno.h>
@@ -1410,7 +1415,11 @@
 
 /* 
  * Callback procedure for dde messages
+ *
+ * We execute a dde Open("file") by simulating a file drop, so dde support
+ * depends on dnd support.
  */
+#ifdef HAVE_DRAGNDROP
 HDDEDATA CALLBACK
 mswindows_dde_callback (UINT uType, UINT uFmt, HCONV hconv,
 			HSZ hszTopic, HSZ hszItem, HDDEDATA hdata,
@@ -1446,6 +1455,7 @@
 	  struct gcpro gcpro1, gcpro2;
           Lisp_Object l_dndlist = Qnil;
 	  Lisp_Object emacs_event = Fmake_event (Qnil, Qnil);
+	  Lisp_Object frmcons, devcons, concons;
 	  struct Lisp_Event *event = XEVENT (emacs_event);
 
 	  DdeGetData (hdata, cmd, len, 0);
@@ -1491,7 +1501,16 @@
 	  GCPRO2 (emacs_event, l_dndlist);
 	  l_dndlist = make_string (filename, strlen (filename));
 
+	  /* Find a mswindows frame */
 	  event->channel = Qnil;
+	  FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
+	    {
+	      Lisp_Object frame = XCAR (frmcons);
+	      if (FRAME_TYPE_P (XFRAME (frame), mswindows))
+		event->channel = frame;
+	    };
+	  assert (!NILP (event->channel));
+
 	  event->timestamp = GetTickCount();
 	  event->event_type = misc_user_event;
 	  event->event.misc.button = 1;
@@ -1511,8 +1530,8 @@
     default: 
       return (HDDEDATA) NULL; 
     } 
-
 }
+#endif
 
 /*
  * The windows procedure for the window class XEMACS_CLASS
@@ -2059,6 +2078,7 @@
     }
   break;
 
+#ifdef HAVE_DRAGNDROP
   case WM_DROPFILES:	/* implementation ripped-off from event-Xt.c */
     {
       UINT filecount, i, len;
@@ -2118,7 +2138,7 @@
       UNGCPRO;
     }
   break;
-
+#endif
 
   defproc:
   default: