diff -Naur libwnck-2.28.0.orig/libwnck/pager.c libwnck-2.28.0/libwnck/pager.c
--- libwnck-2.28.0.orig/libwnck/pager.c	2009-04-19 19:40:32.000000000 +0200
+++ libwnck-2.28.0/libwnck/pager.c	2009-12-09 21:55:47.000000000 +0100
@@ -1533,7 +1533,38 @@
       gtk_drag_finish (context, FALSE, FALSE, time);
       return;
     }
-  
+
+  if (pager->priv->drag_window != NULL)
+    {
+      /* move window */
+      GdkRectangle workspace_rect;
+      int window_x,window_y, new_x, new_y;
+      int workspace_height, workspace_width;
+
+      get_workspace_rect (pager, i, &workspace_rect);
+
+      wnck_window_get_geometry(pager->priv->drag_window,&window_x,&window_y,NULL,NULL);
+      
+      workspace_height= wnck_workspace_get_height(space);
+      workspace_width=wnck_workspace_get_width(space);
+      
+      new_x=window_x+(x-pager->priv->drag_start_x)*
+	( (double) workspace_width /
+	  (double) workspace_rect.width);
+      new_y=window_y+(y-pager->priv->drag_start_y)*
+	( (double) workspace_height /
+	  (double) workspace_rect.height);
+
+      if (new_x >= 0 && new_x <= workspace_width &&
+	  new_y >= 0 && new_y <= workspace_height)
+	wnck_window_set_geometry (pager->priv->drag_window, 
+				  WNCK_WINDOW_GRAVITY_CURRENT, 
+				  WNCK_WINDOW_CHANGE_X | WNCK_WINDOW_CHANGE_Y, 
+				  new_x,
+				  new_y,
+				  0,0); 
+    }
+
   xid = *((gulong *)selection_data->data);
 	      
   for (tmp = wnck_screen_get_windows_stacked (pager->priv->screen); tmp != NULL; tmp = tmp->next)
