Index: NSMenuView.m
===================================================================
RCS file: /cvsroot/gnustep/gnustep/core/gui/Source/NSMenuView.m,v
retrieving revision 1.85
diff -u -r1.85 NSMenuView.m
--- NSMenuView.m	30 Mar 2003 12:54:56 -0000	1.85
+++ NSMenuView.m	31 Mar 2003 03:24:04 -0000
@@ -470,6 +470,10 @@
   // Resize it anyway.
   [self sizeToFit];
   
+  // Just quit here if we are a popup.
+  if ([_menu _ownedByPopUp])
+    return;
+
   if ([_menu isTornOff] && ![_menu isTransient])
     {
       [_titleView addCloseButton];
@@ -844,6 +848,11 @@
 /*
  * Drawing.
  */
+- (BOOL) isOpaque
+{
+  return YES;
+}
+
 - (void) drawRect: (NSRect)rect
 {
   int        i;
@@ -1390,7 +1399,7 @@
 {
   NSPoint		lastLocation;
   NSPoint		location;
-  unsigned	eventMask = NSLeftMouseUpMask | NSLeftMouseDraggedMask;
+  unsigned	eventMask = NSLeftMouseUpMask | NSPeriodicMask;
   BOOL		done = NO;
   NSDate		*theDistantFuture = [NSDate distantFuture];
 
@@ -1403,6 +1412,10 @@
         [menu setTornOff: YES];
     }
 
+  [_window _captureMouse: nil];
+
+  [NSEvent startPeriodicEventsAfterDelay: 0.02 withPeriod: 0.02];
+
   while (!done)
     {
       theEvent = [NSApp nextEventMatchingMask: eventMask
@@ -1415,9 +1428,9 @@
         case NSRightMouseUp:
         case NSLeftMouseUp: 
           done = YES; 
+          [_window _releaseMouse: nil];
           break;
-        case NSRightMouseDragged:
-        case NSLeftMouseDragged:   
+        case NSPeriodic:
           location = [_window mouseLocationOutsideOfEventStream];
           if (NSEqualPoints(location, lastLocation) == NO)
             {
@@ -1433,6 +1446,7 @@
           break;
         }
     }
+  [NSEvent stopPeriodicEvents];
 }
 
 - (void) createButton
