diff -EbBur gtk+-2.8.17.orig/gtk/gtktreeview.c gtk+-2.8.17/gtk/gtktreeview.c
--- gtk+-2.8.17.orig/gtk/gtktreeview.c	2006-03-23 02:50:54.000000000 +0800
+++ gtk+-2.8.17/gtk/gtktreeview.c	2006-06-03 15:26:22.000000000 +0800
@@ -768,6 +768,13 @@
 							       GDK_TYPE_COLOR,
 							       GTK_PARAM_READABLE));
 
+  gtk_widget_class_install_style_property (widget_class,
+					   g_param_spec_boolean ("full-row-focus",
+								 P_("Full row focus"),
+								 P_("Draw focus rectangle for full row"),
+								 FALSE,
+								 GTK_PARAM_READABLE));
+
   /* Signals */
   widget_class->set_scroll_adjustments_signal =
     g_signal_new ("set_scroll_adjustments",
@@ -3514,6 +3521,7 @@
   gint n_visible_columns;
   gint pointer_x, pointer_y;
   gboolean got_pointer = FALSE;
+  gboolean full_row_focus;
 
   g_return_val_if_fail (GTK_IS_TREE_VIEW (widget), FALSE);
 
@@ -3910,9 +3918,17 @@
         }
 
       /* draw the big row-spanning focus rectangle, if needed */
-      if (!has_special_cell && node == cursor &&
-	  GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS) &&
+
+      gtk_widget_style_get( widget, "full-row-focus", &full_row_focus, NULL );
+
+      if ( (full_row_focus &&
+            node == cursor &&
 	  GTK_WIDGET_HAS_FOCUS (widget))
+          ||
+          ( ! full_row_focus &&
+          !has_special_cell && node == cursor &&
+	      GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS) &&
+	      GTK_WIDGET_HAS_FOCUS (widget) ) )
         {
 	  gint width;
 	  GtkStateType focus_rect_state;
