diff -uprN --exclude CVS gtk+.1189.patched/gtk/gtktreeview.c gtk+/gtk/gtktreeview.c
--- gtk+.1189.patched/gtk/gtktreeview.c	2003-11-26 11:20:34.000000000 +0900
+++ gtk+/gtk/gtktreeview.c	2003-11-26 11:21:39.000000000 +0900
@@ -1829,7 +1829,7 @@ gtk_tree_view_size_allocate_columns (Gtk
 
       if (column->window)
 	gdk_window_move_resize (column->window,
-                                allocation.x + allocation.width - TREE_VIEW_DRAG_WIDTH/2,
+                                allocation.x + (rtl? 0:allocation.width) - TREE_VIEW_DRAG_WIDTH/2,                                            //bidi
 				allocation.y,
                                 TREE_VIEW_DRAG_WIDTH, allocation.height);
     }
@@ -2321,7 +2321,10 @@ gtk_tree_view_button_press (GtkWidget   
 	    gtk_widget_grab_focus (widget);
 
 	  tree_view->priv->drag_pos = i;
-	  tree_view->priv->x_drag = (column->button->allocation.x + column->button->allocation.width);
+          if (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL)  //bidi - R
+	     tree_view->priv->x_drag = column->button->allocation.x; //bidi - R
+          else                                                       //bidi - R
+	     tree_view->priv->x_drag = (column->button->allocation.x + column->button->allocation.width);
 	  break;
 	}
     }
@@ -8280,13 +8283,14 @@ gtk_tree_view_new_column_width (GtkTreeV
 {
   GtkTreeViewColumn *column;
   gint width;
+  gboolean isRTL = gtk_widget_get_direction(GTK_WIDGET(tree_view)) == GTK_TEXT_DIR_RTL;   //bidi
 
   /* first translate the x position from widget->window
    * to clist->clist_window
    */
 
   column = g_list_nth (tree_view->priv->columns, i)->data;
-  width = *x - column->button->allocation.x;
+  width = isRTL? column->button->allocation.x + column->button->allocation.width - *x : *x - column->button->allocation.x;
 
   /* Clamp down the value */
   if (column->min_width == -1)
@@ -8297,7 +8301,7 @@ gtk_tree_view_new_column_width (GtkTreeV
 		 width);
   if (column->max_width != -1)
     width = MIN (width, column->max_width != -1);
-  *x = column->button->allocation.x + width;
+  *x = isRTL? column->button->allocation.x + column->button->allocation.width - width : column->button->allocation.x + width;
 
   return width;
 }
diff -uprN --exclude CVS gtk+.1189.patched/gtk/gtktreeviewcolumn.c gtk+/gtk/gtktreeviewcolumn.c
--- gtk+.1189.patched/gtk/gtktreeviewcolumn.c	2003-11-26 11:20:34.000000000 +0900
+++ gtk+/gtk/gtktreeviewcolumn.c	2003-11-26 11:22:00.000000000 +0900
@@ -1187,7 +1187,8 @@ _gtk_tree_view_column_realize_button (Gt
   GtkTreeView *tree_view;
   GdkWindowAttr attr;
   guint attributes_mask;
-
+  gboolean isRTL;                                   //bidi
+ 
   tree_view = (GtkTreeView *)column->tree_view;
 
   g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
@@ -1195,6 +1196,7 @@ _gtk_tree_view_column_realize_button (Gt
   g_return_if_fail (tree_view->priv->header_window != NULL);
   g_return_if_fail (column->button != NULL);
 
+  isRTL = gtk_widget_get_direction(GTK_WIDGET(tree_view)) == GTK_TEXT_DIR_RTL; //bidi
   gtk_widget_set_parent_window (column->button, tree_view->priv->header_window);
 
   if (column->visible)
@@ -1217,8 +1219,7 @@ _gtk_tree_view_column_realize_button (Gt
   attr.width = TREE_VIEW_DRAG_WIDTH;
   attr.height = tree_view->priv->header_height;
 
-  attr.x = (column->button->allocation.x + column->button->allocation.width) - 3;
-          
+  attr.x = (column->button->allocation.x + (isRTL? 0:column->button->allocation.width)) - 3;            //bidi
   column->window = gdk_window_new (tree_view->priv->header_window,
 				   &attr, attributes_mask);
   gdk_window_set_user_data (column->window, tree_view);
