diff -uprN gtk+-1221-patched/gtk/gtkcellrenderertext.c gtk+/gtk/gtkcellrenderertext.c
--- gtk+-1221-patched/gtk/gtkcellrenderertext.c	2003-11-27 21:00:41.000000000 +0900
+++ gtk+/gtk/gtkcellrenderertext.c	2003-11-27 21:03:13.000000000 +0900
@@ -1271,6 +1271,7 @@ gtk_cell_renderer_text_render (GtkCellRe
 
   gtk_cell_renderer_text_get_size (cell, widget, cell_area, &x_offset, &y_offset, NULL, NULL);
 
+
   if ((flags & GTK_CELL_RENDERER_SELECTED) == GTK_CELL_RENDERER_SELECTED)
     {
       if (GTK_WIDGET_HAS_FOCUS (widget))
@@ -1298,7 +1299,9 @@ gtk_cell_renderer_text_render (GtkCellRe
       gc = gdk_gc_new (window);
 
       gdk_gc_set_rgb_fg_color (gc, &color);
-      
+
+      if (expose_area)               //bidi
+        gdk_gc_set_clip_rectangle (gc, expose_area);
       gdk_draw_rectangle (window,
                           gc,
                           TRUE,
@@ -1306,7 +1309,8 @@ gtk_cell_renderer_text_render (GtkCellRe
                           background_area->y,
                           background_area->width,
                           background_area->height);
-
+      if (expose_area)               //bidi
+        gdk_gc_set_clip_rectangle (gc, NULL);
       g_object_unref (gc);
     }
 
@@ -1314,7 +1318,7 @@ gtk_cell_renderer_text_render (GtkCellRe
                     window,
                     state,
 		    TRUE,
-                    cell_area,
+                    expose_area,
                     widget,
                     "cellrenderertext",
                     cell_area->x + x_offset + cell->xpad,
diff -uprN gtk+-1221-patched/gtk/gtkcellrenderertoggle.c gtk+/gtk/gtkcellrenderertoggle.c
--- gtk+-1221-patched/gtk/gtkcellrenderertoggle.c	2003-11-27 21:00:41.000000000 +0900
+++ gtk+/gtk/gtkcellrenderertoggle.c	2003-11-27 21:03:29.000000000 +0900
@@ -358,7 +358,7 @@ gtk_cell_renderer_toggle_render (GtkCell
       gtk_paint_option (widget->style,
                         window,
                         state, shadow,
-                        cell_area, widget, "cellradio",
+                        expose_area, widget, "cellradio",
                         cell_area->x + x_offset + cell->xpad,
                         cell_area->y + y_offset + cell->ypad,
                         width - 1, height - 1);
@@ -368,7 +368,7 @@ gtk_cell_renderer_toggle_render (GtkCell
       gtk_paint_check (widget->style,
                        window,
                        state, shadow,
-                       cell_area, widget, "cellcheck",
+                       expose_area, widget, "cellcheck",
                        cell_area->x + x_offset + cell->xpad,
                        cell_area->y + y_offset + cell->ypad,
                        width - 1, height - 1);
diff -uprN gtk+-1221-patched/gtk/gtkstyle.c gtk+/gtk/gtkstyle.c
--- gtk+-1221-patched/gtk/gtkstyle.c	2003-11-27 21:00:41.000000000 +0900
+++ gtk+/gtk/gtkstyle.c	2003-11-27 21:03:44.000000000 +0900
@@ -3681,16 +3681,24 @@ gtk_default_draw_check (GtkStyle      *s
 {
   if (detail && strcmp (detail, "cellcheck") == 0)
     {
+      if (area)               //bidi
+	gdk_gc_set_clip_rectangle (widget->style->base_gc[state_type], area);
       gdk_draw_rectangle (window,
 			  widget->style->base_gc[state_type],
 			  TRUE,
                           x, y,
 			  width, height);
+      if (area)
+	gdk_gc_set_clip_rectangle (widget->style->base_gc[state_type], NULL);
+      if (area)               //bidi
+	gdk_gc_set_clip_rectangle (widget->style->text_gc[state_type], area);
       gdk_draw_rectangle (window,
 			  widget->style->text_gc[state_type],
 			  FALSE,
                           x, y,
 			  width, height);
+      if (area)               //bidi
+	gdk_gc_set_clip_rectangle (widget->style->text_gc[state_type], NULL);
 
       x -= (1 + INDICATOR_PART_SIZE - width) / 2;
       y -= (((1 + INDICATOR_PART_SIZE - height) / 2) - 1);
@@ -3773,6 +3781,8 @@ gtk_default_draw_option (GtkStyle      *
 {
   if (detail && strcmp (detail, "cellradio") == 0)
     {
+      if (area)               //bidi
+        gdk_gc_set_clip_rectangle (widget->style->fg_gc[state_type], area);
       gdk_draw_arc (window,
 		    widget->style->fg_gc[state_type],
 		    FALSE,
@@ -3797,6 +3807,8 @@ gtk_default_draw_option (GtkStyle      *
           draw_part (window, widget->style->fg_gc[state_type],
 	             area, x, y, CHECK_INCONSISTENT_TEXT);
 	}
+      if (area)               //bidi
+        gdk_gc_set_clip_rectangle (widget->style->fg_gc[state_type], NULL);
     }
   else
     {
diff -uprN gtk+-1221-patched/gtk/gtktreeviewcolumn.c gtk+/gtk/gtktreeviewcolumn.c
--- gtk+-1221-patched/gtk/gtktreeviewcolumn.c	2003-11-27 21:00:41.000000000 +0900
+++ gtk+/gtk/gtktreeviewcolumn.c	2003-11-27 21:02:34.000000000 +0900
@@ -2589,6 +2589,7 @@ gtk_tree_view_column_cell_process_action
   GList *list;
   GdkRectangle real_cell_area;
   GdkRectangle real_background_area;
+  GdkRectangle real_expose_area = *cell_area;        //bidi
   gint expand_cell_count = 0;
   gint full_requested_width = 0;
   gint extra_space;
@@ -2705,7 +2706,7 @@ gtk_tree_view_column_cell_process_action
 				    tree_column->tree_view,
 				    &rtl_background_area,
 				    &rtl_cell_area,
-				    expose_area,
+				    &real_expose_area,         //bidi
 				    flags);
 	}
 
@@ -2860,7 +2861,7 @@ gtk_tree_view_column_cell_process_action
 				    tree_column->tree_view,
 				    &rtl_background_area,
 				    &rtl_cell_area,
-				    expose_area,
+				    &real_expose_area,    //bidi
 				    flags);
 	}
       /* FOCUS */
