diff -uprN gtk+-20031202/gtk/gtkcellview.c gtk+/gtk/gtkcellview.c
--- gtk+-20031202/gtk/gtkcellview.c	2003-12-02 20:48:55.000000000 +0900
+++ gtk+/gtk/gtkcellview.c	2003-12-02 20:58:20.000000000 +0900
@@ -401,6 +401,7 @@ gtk_cell_view_expose (GtkWidget      *wi
   GList *i;
   GtkCellView *cellview;
   GdkRectangle area;
+  gboolean rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL);
 
   cellview = GTK_CELL_VIEW (widget);
 
@@ -437,7 +438,7 @@ gtk_cell_view_expose (GtkWidget      *wi
   area = widget->allocation;
 
   /* we draw on our very own window, initialize x and y to zero */
-  area.x = widget->allocation.x;
+  area.x = widget->allocation.x + (rtl ? widget->allocation.width : 0); 
   area.y = widget->allocation.y;
 
   /* PACK_START */
@@ -452,6 +453,8 @@ gtk_cell_view_expose (GtkWidget      *wi
         continue;
 
       area.width = info->real_width;
+      if (rtl)                                             
+         area.x -= area.width;
 
       gtk_cell_renderer_render (info->cell,
                                 event->window,
@@ -459,9 +462,12 @@ gtk_cell_view_expose (GtkWidget      *wi
                                 /* FIXME! */
                                 &area, &area, &event->area, 0);
 
-      area.x += info->real_width;
+      if (!rtl)                                           
+         area.x += info->real_width;
     }
 
+   area.x = rtl ? widget->allocation.x : (widget->allocation.x + widget->allocation.width);  
+
   /* PACK_END */
   for (i = cellview->priv->cell_list; i; i = i->next)
     {
@@ -474,13 +480,16 @@ gtk_cell_view_expose (GtkWidget      *wi
         continue;
 
       area.width = info->real_width;
+      if (!rtl)
+         area.x -= area.width;   
 
       gtk_cell_renderer_render (info->cell,
                                 widget->window,
                                 widget,
                                 /* FIXME ! */
                                 &area, &area, &event->area, 0);
-      area.x += info->real_width;
+      if (rtl)
+         area.x += info->real_width;
     }
 
   return FALSE;
