--- gtk/gtknotebook.c
+++ gtk/gtknotebook.c
@@ -2532,15 +2532,11 @@
 	  priv->during_reorder = FALSE;
 	  priv->pressed_button = event->button;
 
-	  gdk_window_get_pointer (widget->window,
-				  &priv->mouse_x,
-				  &priv->mouse_y,
-				  NULL);
-
-	  priv->drag_begin_x = priv->mouse_x;
-	  priv->drag_begin_y = priv->mouse_y;
+	  priv->drag_begin_x = event->x;
+	  priv->drag_begin_y = event->y;
 	  priv->drag_offset_x = priv->drag_begin_x - page->allocation.x;
 	  priv->drag_offset_y = priv->drag_begin_y - page->allocation.y;
+
 	}
     }
 
@@ -2969,6 +2965,7 @@
   GtkNotebookPointerPosition pointer_position;
   GtkSettings *settings;
   guint timeout;
+  gint x_win, y_win;
 
   page = notebook->cur_page;
 
@@ -2985,11 +2982,12 @@
   if (event->time < priv->timestamp + MSECS_BETWEEN_UPDATES)
     return FALSE;
 
+  /* While animating the move, event->x is relative to the flying tab,
+     but we need coordinates relative to the notebook widget */
+  gdk_window_get_origin (widget->window, &x_win, &y_win);
+  priv->mouse_x = event->x_root - x_win;
+  priv->mouse_y = event->y_root - y_win;
   priv->timestamp = event->time;
-  gdk_window_get_pointer (widget->window,
-			  &priv->mouse_x,
-			  &priv->mouse_y,
-			  NULL);
 
   arrow = gtk_notebook_get_arrow (notebook, priv->mouse_x, priv->mouse_y);
   if (arrow != notebook->in_child)
