diff -ru gtk+.orig\gdk\win32\gdkdnd-win32.c gtk+\gdk\win32\gdkdnd-win32.c
--- gtk+.orig\gdk\win32\gdkdnd-win32.c	Wed Jul 28 10:19:01 2004
+++ gtk+\gdk\win32\gdkdnd-win32.c	Wed Jul 28 10:19:55 2004
@@ -1317,6 +1317,8 @@
 typedef struct {
   gint x;
   gint y;
+  gint x_origin;
+  gint y_origin;
   HWND ignore;
   HWND result;
 } find_window_enum_arg;
@@ -1326,7 +1328,7 @@
 		       LPARAM lparam)
 {
   RECT rect;
-  POINT tl, br;
+  POINT p;
   find_window_enum_arg *a = (find_window_enum_arg *) lparam;
 
   if (hwnd == a->ignore)
@@ -1335,14 +1337,11 @@
   if (!IsWindowVisible (hwnd))
     return TRUE;
 
-  tl.x = tl.y = 0;
-  ClientToScreen (hwnd, &tl);
-  GetClientRect (hwnd, &rect);
-  br.x = rect.right;
-  br.y = rect.bottom;
-  ClientToScreen (hwnd, &br);
-
-  if (a->x >= tl.x && a->y >= tl.y && a->x < br.x && a->y < br.y)
+  p.x = a->x + a->x_origin;
+  p.y = a->y + a->y_origin;
+  ScreenToClient (hwnd, &p);
+  GetClientRect (hwnd, rect);
+  if (p.x >= 0 && p.y >= 0 && p.x < rect.right && p.y < rect.bottom)
     {
       a->result = hwnd;
       return FALSE;
@@ -1361,9 +1360,15 @@
 				 GdkDragProtocol *protocol)
 {
   find_window_enum_arg a;
+  RECT work_area;
+  GdkRectangle primary_monitor;
 
+  gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &primary_monitor);
+  SystemParametersInfo (SPI_GETWORKAREA, 0, &work_area, 0);
   a.x = x_root;
   a.y = y_root;
+  a.x_origin = work_area.left - primary_monitor.x;
+  a.y_origin = work_area.top  - primary_monitor.y;
   a.ignore = drag_window ? GDK_WINDOW_HWND (drag_window) : NULL;
   a.result = NULL;
 
