diff -EbBur gtk+-2.8.17.orig/gtk/gtknotebook.c gtk+-2.8.17/gtk/gtknotebook.c
--- gtk+-2.8.17.orig/gtk/gtknotebook.c	2006-03-21 08:12:08.000000000 +0800
+++ gtk+-2.8.17/gtk/gtknotebook.c	2006-06-03 15:30:26.000000000 +0800
@@ -1,5 +1,6 @@
 /* GTK - The GIMP Toolkit
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright (C) 2006 Hong Jen Yee (PCMan) add prelight support for tabs.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -589,6 +590,21 @@
 								 TRUE,
 								 
                                                                    GTK_PARAM_READABLE));
+/**
+ * GtkNotebook:prelight-tab:
+ *
+ * The "prelight-tab" property determines whether 
+ * the tab hovered by mouse cursor should be hilighted.
+ *
+ * Since: 2.10
+ */
+  gtk_widget_class_install_style_property (widget_class,
+					   g_param_spec_boolean ("prelight-tab",
+								 P_("Prelight tab"),
+								 P_("Highlight the tab hovered by mouse cursor"),
+								 FALSE,
+								 
+								 GTK_PARAM_READABLE));
 
   notebook_signals[SWITCH_PAGE] =
     g_signal_new ("switch_page",
@@ -1151,6 +1167,7 @@
   attributes.event_mask = gtk_widget_get_events (widget);
   attributes.event_mask |= (GDK_BUTTON_PRESS_MASK |
 			    GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK |
+                            GDK_POINTER_MOTION_MASK|GDK_LEAVE_NOTIFY_MASK|
 			    GDK_SCROLL_MASK);
   attributes_mask = GDK_WA_X | GDK_WA_Y;
 
@@ -1538,7 +1555,6 @@
 	    gtk_notebook_draw_focus (widget);
 	}
 
-      
       if (notebook->cur_page)
 	gtk_container_propagate_expose (GTK_CONTAINER (notebook),
 					notebook->cur_page->child,
@@ -1985,6 +2001,18 @@
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
   GtkNotebookArrow arrow;
   gint x, y;
+  gboolean use_prelight;
+
+  gtk_widget_style_get( widget, "prelight-tab", &use_prelight, NULL );
+
+  if( use_prelight )
+  {
+    if( notebook->prelight_page && notebook->prelight_page->tab_label )
+    {
+      notebook->prelight_page = NULL;
+      gtk_notebook_redraw_tabs (GTK_NOTEBOOK (widget));
+    }
+  }
 
   if (!get_widget_coordinates (widget, (GdkEvent *)event, &x, &y))
     return FALSE;
@@ -2007,6 +2035,9 @@
   GtkNotebook *notebook = GTK_NOTEBOOK (widget);
   GtkNotebookArrow arrow;
   gint x, y;
+  GList *children;
+  GtkNotebookPage *page, *prelight_page = NULL;
+  gboolean use_prelight;
   
   if (notebook->button)
     return FALSE;
@@ -2014,6 +2045,38 @@
   if (!get_widget_coordinates (widget, (GdkEvent *)event, &x, &y))
     return FALSE;
 
+  gtk_widget_style_get( widget, "prelight-tab", &use_prelight, NULL );
+
+  if( use_prelight )
+  {
+    /* Support prelight state of tabs */
+    children = notebook->children;
+    while (children)
+    {
+      page = children->data;
+      if (GTK_WIDGET_VISIBLE (page->child) &&
+	      page->tab_label && GTK_WIDGET_MAPPED (page->tab_label) &&
+	      (x >= page->allocation.x) &&
+	      (y >= page->allocation.y) &&
+	      (x <= (page->allocation.x + page->allocation.width)) &&
+	      (y <= (page->allocation.y + page->allocation.height)))
+	    {
+        prelight_page = page;
+	      break;
+	    }
+      children = children->next;
+    }
+
+    if ( prelight_page != notebook->prelight_page )
+    {
+      notebook->prelight_page = prelight_page;
+      gtk_notebook_redraw_tabs (GTK_NOTEBOOK (widget));
+    }
+    if( prelight_page ) {
+      return TRUE;
+    }
+  }
+
   arrow = gtk_notebook_get_arrow (notebook, x, y);
 
   if (arrow != notebook->in_child)
@@ -2021,7 +2084,10 @@
       notebook->in_child = arrow;
       gtk_notebook_redraw_arrows (notebook);
     }
+  else
+  {
   
+  }
   return TRUE;
 }
 
@@ -3037,6 +3103,7 @@
   GtkStateType state_type;
   GtkPositionType gap_side;
   gint tab_pos = get_effective_tab_pos (notebook);
+  gboolean use_prelight;
   
   g_return_if_fail (notebook != NULL);
   g_return_if_fail (page != NULL);
@@ -3073,8 +3140,12 @@
 	  break;
 	}
       
+      gtk_widget_style_get (widget, "prelight-tab", &use_prelight, NULL );
+
       if (notebook->cur_page == page)
 	state_type = GTK_STATE_NORMAL;
+      else if ( use_prelight && notebook->prelight_page == page )
+	state_type = GTK_STATE_PRELIGHT;
       else 
 	state_type = GTK_STATE_ACTIVE;
       gtk_paint_extension(widget->style, widget->window,
@@ -3824,6 +3895,7 @@
 gtk_notebook_update_tab_states (GtkNotebook *notebook)
 {
   GList *list;
+  gboolean use_prelight;
 
   for (list = notebook->children; list != NULL; list = list->next)
     {
@@ -3831,8 +3903,12 @@
       
       if (page->tab_label)
 	{
+      gtk_widget_style_get (GTK_WIDGET(notebook), "prelight-tab", &use_prelight, NULL );
+
 	  if (page == notebook->cur_page)
 	    gtk_widget_set_state (page->tab_label, GTK_STATE_NORMAL);
+      else if ( use_prelight && notebook->prelight_page == page )
+        gtk_widget_set_state (page->tab_label, GTK_STATE_PRELIGHT);
 	  else
 	    gtk_widget_set_state (page->tab_label, GTK_STATE_ACTIVE);
 	}
diff -EbBur gtk+-2.8.17.orig/gtk/gtknotebook.h gtk+-2.8.17/gtk/gtknotebook.h
--- gtk+-2.8.17.orig/gtk/gtknotebook.h	2005-03-20 15:01:22.000000000 +0800
+++ gtk+-2.8.17/gtk/gtknotebook.h	2006-06-03 06:35:02.000000000 +0800
@@ -85,6 +85,8 @@
   guint has_before_next     : 1;
   guint has_after_previous  : 1;
   guint has_after_next      : 1;
+
+  GtkNotebookPage *prelight_page;
 };
 
 struct _GtkNotebookClass
