Index: NSBrowser.m
===================================================================
--- NSBrowser.m	(revision 29530)
+++ NSBrowser.m	(working copy)
@@ -196,6 +196,30 @@
 
 @end
 
+@interface GSBrowserScrollView : NSScrollView
+- (void) scrollWheel: (NSEvent *)theEvent;
+@end
+
+@implementation GSBrowserScrollView
+
+- (void) scrollWheel: (NSEvent *)theEvent;
+{
+  [super scrollWheel: theEvent];
+
+  // Forward horizontal scroll events to the superview (the NSBrowser)
+  if ([theEvent deltaX] != 0)
+    {
+      [[self superview] scrollWheel: theEvent];
+    }
+}
+
+- (Class) classForCoder
+{
+  return [NSScrollView class];
+}
+
+@end
+
 // NB: this is used in the NSFontPanel too
 @interface GSBrowserTitleCell: NSTableHeaderCell
 @end
@@ -761,7 +785,7 @@
   bc = [[NSBrowserColumn alloc] init];
 
   // Create a scrollview
-  sc = [[NSScrollView alloc] initWithFrame: rect];
+  sc = [[GSBrowserScrollView alloc] initWithFrame: rect];
   [sc setHasHorizontalScroller: NO];
   [sc setHasVerticalScroller: YES];
   
@@ -2621,6 +2645,20 @@
   [super keyDown: theEvent];
 }
 
+- (void) scrollWheel: (NSEvent *)theEvent
+{
+  if (_hasHorizontalScroller)
+    {
+      float deltaX = [theEvent deltaX] * 20;
+      float totalWidth = _columnSize.width * _lastColumnLoaded;
+      float newScrollerValue =
+        (([_horizontalScroller doubleValue] * totalWidth) + deltaX) / totalWidth;
+      [_horizontalScroller setDoubleValue: newScrollerValue];
+      [self scrollColumnToVisible: rintf(newScrollerValue * _lastColumnLoaded)];
+    }
+}
+
+
 /*
  * NSCoding protocol
  *
