diff -rup gtkmenu.save.c gtkmenu.c
--- gtkmenu.save.c	2008-10-16 21:06:20 -0700
+++ gtkmenu.c	2008-11-14 20:59:57 -0800
@@ -4167,15 +4167,25 @@ gtk_menu_position (GtkMenu *menu)
 
       if (y + menu_height > monitor.y + monitor.height)
 	{
+	  /* The bottom of the menu is below the bottom of the monitor so move the
+	   * menu up, and adjust the scroll offset to keep the menu items in the same
+	   * position on the screen */
 	  scroll_offset -= y + menu_height - (monitor.y + monitor.height);
 	  y = (monitor.y + monitor.height) - menu_height;
 	}
   
       if (y < monitor.y)
 	{
+	  /* The top of the menu is above the bottom of the monitor so move its top
+	   * position down, and adjust the scroll offset to keep the menu items in
+	   * the same position on the screen */
 	  scroll_offset += monitor.y - y;
 	  y = monitor.y;
 	}
+      /* If we moved the start of the menu up above position of its first menu item then
+       * scroll_offset will be -ve which would give be a blank area above that first item,
+       * so in that case we do move the menu items up on the screen to avoid that */
+      if (scroll_offset < 0) scroll_offset = 0;
     }
 
   /* FIXME: should this be done in the various position_funcs ? */
