diff -upr gtk+-2.6.0/gtk/gtktreeprivate.h gtk+-2.6.0.new/gtk/gtktreeprivate.h
--- gtk+-2.6.0/gtk/gtktreeprivate.h	2004-08-02 23:11:32.000000000 +0400
+++ gtk+-2.6.0.new/gtk/gtktreeprivate.h	2005-03-09 17:29:10.000000000 +0300
@@ -134,7 +134,9 @@ struct _GtkTreeViewPrivate
 
   /* Column Resizing */
   gint drag_pos;
-  gint x_drag;
+  gint drag_start;
+  gint drag_extra;
+  gint drag_ncolumns;
 
   /* Prelight information */
   GtkRBNode *prelight_node;
diff -upr gtk+-2.6.0/gtk/gtktreeview.c gtk+-2.6.0.new/gtk/gtktreeview.c
--- gtk+-2.6.0/gtk/gtktreeview.c	2004-12-16 16:33:43.000000000 +0300
+++ gtk+-2.6.0.new/gtk/gtktreeview.c	2005-03-09 17:38:33.000000000 +0300
@@ -1141,7 +1141,9 @@ gtk_tree_view_init (GtkTreeView *tree_vi
   tree_view->priv->dy = 0;
   tree_view->priv->n_columns = 0;
   tree_view->priv->header_height = 1;
-  tree_view->priv->x_drag = 0;
+  tree_view->priv->drag_start = 0;
+  tree_view->priv->drag_ncolumns = 0;
+  tree_view->priv->drag_extra = 0;
   tree_view->priv->drag_pos = -1;
   tree_view->priv->header_has_focus = FALSE;
   tree_view->priv->pressed_button = -1;
@@ -2505,7 +2507,33 @@ gtk_tree_view_button_press (GtkWidget   
 					     drag_data);
 
 	  tree_view->priv->drag_pos = i;
-	  tree_view->priv->x_drag = column->button->allocation.x + (rtl ? 0 : column->button->allocation.width);
+	  tree_view->priv->drag_start = column->button->allocation.x + (rtl ? 0 : column->button->allocation.width);
+   	  tree_view->priv->drag_ncolumns = 0;
+	    
+	  /* We calculate expand columns params - number of columns 
+	   * and space required by all columns except resized.
+	   */
+	  if (column->expand)
+	    {
+		GList *list;
+		GtkTreeViewColumn *temp_column;
+		
+		tree_view->priv->drag_extra = GTK_WIDGET (tree_view)->allocation.width;
+
+		for (list = tree_view->priv->columns; list != NULL; list = list->next)
+		   {
+		      temp_column = (GtkTreeViewColumn *)list->data;
+
+		      if (!temp_column->visible)
+	    	    	continue;
+		
+		      if (temp_column != column)
+        		tree_view->priv->drag_extra -= gtk_tree_view_get_real_requested_width_from_column (tree_view, temp_column);
+	     
+		      if (temp_column->expand)
+		        tree_view->priv->drag_ncolumns++;    	      
+		   }
+	    }
 
 	  if (!GTK_WIDGET_HAS_FOCUS (widget))
 	    gtk_widget_grab_focus (widget);
@@ -3181,7 +3209,7 @@ gtk_tree_view_motion_resize_column (GtkW
 
   new_width = gtk_tree_view_new_column_width (tree_view,
 					      tree_view->priv->drag_pos, &x);
-  if (x != tree_view->priv->x_drag &&
+  if (x != tree_view->priv->drag_start &&
       (new_width != column->fixed_width));
     {
       column->resized_width = new_width;
@@ -9048,7 +9076,17 @@ gtk_tree_view_new_column_width (GtkTreeV
    */
   rtl = (gtk_widget_get_direction (GTK_WIDGET (tree_view)) == GTK_TEXT_DIR_RTL);
   column = g_list_nth (tree_view->priv->columns, i)->data;
+
   width = rtl ? (column->button->allocation.x + column->button->allocation.width - *x) : (*x - column->button->allocation.x);
+
+  /* Now we should calculate required width of expandable column.
+   * Width is modified in such way so after addition of extra space 
+   * we will get column of required width.
+   */
+  if (column->expand && tree_view->priv->drag_extra > width && tree_view->priv->drag_ncolumns > 1)
+    {
+      width = (width * tree_view->priv->drag_ncolumns - tree_view->priv->drag_extra) / (tree_view->priv->drag_ncolumns - 1);
+    }
  
   /* Clamp down the value */
   if (column->min_width == -1)
