--- gtk+-2.18.3/gtk/gtkpaned.c	2009-06-05 04:48:04.000000000 +0930
+++ gtk+2.0-2.18.3/gtk/gtkpaned.c	2010-03-30 16:41:55.000000000 +1030
@@ -149,7 +149,6 @@ struct _GtkPanedPrivate
   GtkOrientation  orientation;
   GtkWidget      *saved_focus;
   GtkPaned       *first_paned;
-  guint32         grab_time;
 };
 
 
@@ -1109,16 +1108,18 @@ is_rtl (GtkPaned *paned)
 }
 
 static void
-update_drag (GtkPaned *paned)
+update_drag (GtkPaned *paned,
+	     gint x,
+	     gint y)
 {
   gint pos;
   gint handle_size;
   gint size;
 
   if (paned->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
-    gtk_widget_get_pointer (GTK_WIDGET (paned), &pos, NULL);
+    pos = x;
   else
-    gtk_widget_get_pointer (GTK_WIDGET (paned), NULL, &pos);
+    pos = y;
 
   pos -= paned->drag_pos;
 
@@ -1150,7 +1151,7 @@ gtk_paned_enter (GtkWidget        *widge
   GtkPaned *paned = GTK_PANED (widget);
   
   if (paned->in_drag)
-    update_drag (paned);
+    update_drag (paned, event->x, event->y);
   else
     {
       paned->handle_prelit = TRUE;
@@ -1171,7 +1172,7 @@ gtk_paned_leave (GtkWidget        *widge
   GtkPaned *paned = GTK_PANED (widget);
   
   if (paned->in_drag)
-    update_drag (paned);
+    update_drag (paned, event->x, event->y);
   else
     {
       paned->handle_prelit = FALSE;
@@ -1225,7 +1226,6 @@ gtk_paned_button_press (GtkWidget      *
 	return FALSE;
 
       paned->in_drag = TRUE;
-      paned->priv->grab_time = event->time;
 
       if (paned->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
 	paned->drag_pos = event->x;
@@ -1252,13 +1252,14 @@ gtk_paned_grab_broken (GtkWidget        
 }
 
 static void
-stop_drag (GtkPaned *paned)
+stop_drag (GtkPaned *paned,
+           guint32 time)
 {
   paned->in_drag = FALSE;
   paned->drag_pos = -1;
   paned->position_set = TRUE;
   gdk_display_pointer_ungrab (gtk_widget_get_display (GTK_WIDGET (paned)),
-			      paned->priv->grab_time);
+			      time);
 }
 
 static void
@@ -1268,7 +1269,7 @@ gtk_paned_grab_notify (GtkWidget *widget
   GtkPaned *paned = GTK_PANED (widget);
 
   if (!was_grabbed && paned->in_drag)
-    stop_drag (paned);
+    stop_drag (paned, GDK_CURRENT_TIME);
 }
 
 static void
@@ -1301,7 +1302,8 @@ gtk_paned_button_release (GtkWidget     
 
   if (paned->in_drag && (event->button == 1))
     {
-      stop_drag (paned);
+      update_drag (paned, event->x, event->y);
+      stop_drag (paned, event->time);
 
       return TRUE;
     }
@@ -1317,10 +1319,12 @@ gtk_paned_motion (GtkWidget      *widget
   
   if (paned->in_drag)
     {
-      update_drag (paned);
+      update_drag (paned, event->x, event->y);
+      gdk_event_request_motions(event);
       return TRUE;
     }
   
+  gdk_event_request_motions(event);
   return FALSE;
 }
 
