discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

sendEvent: disable/enableflushWindow & _handleWindowNeedsDisplay:


From: David Ayers
Subject: sendEvent: disable/enableflushWindow & _handleWindowNeedsDisplay:
Date: Sat, 29 Jun 2002 02:37:55 +0200

Allright,

My tests on NSBackingStoreNonretained windows on OPENSTEP 4.2 Enterprise
were not very fruitfull. Just trying to click into NSTextFields does not
produce expected responses. (It seems like it's hanging.) The logging
reveals similar methods being invoked, but the selection isn't seen on
screen. I believe this is badly brocken. Could someone confirm this
behavior?

Anyway, I'm also feeling rather confident that this is the fix we are
looking for and it seems to behave very well:

NSWindow:

-(void)sendEvent:(NSEvent *)theEvent
{
...
        if (_f.has_closed == NO)
          {
+           [self disableFlushWindow];
+           NS_DURING
              if (_f.is_key == NO)
                {
                  [self makeKeyAndOrderFront: self];
                }
              v = [_contentView hitTest: [theEvent locationInWindow]];
              if (_firstResponder != v)
                {
                  [self makeFirstResponder: v];
                }
              if (wasKey == YES || [v acceptsFirstMouse: theEvent] == YES)
                {
                  if ([NSHelpManager isContextHelpModeActive])
                    {
                      [v helpRequested: theEvent];
                    }
                  else
                    {
                      [v mouseDown: theEvent];
                    }
                }
              else
                {
                  [self mouseDown: theEvent];
                }
+           NS_HANDLER
+             [self enableFlushWindow];
+             [localException raise];
+           NS_ENDHANDLER
+             [self enableFlushWindow];
          }
...
}

- (void) _handleWindowNeedsDisplay: (id)bogus
{
+ if (_disableFlushWindow)
+   {
+     [[NSRunLoop currentRunLoop]
+        performSelector: @selector(_handleWindowNeedsDisplay:)
+                 target: self
+               argument: nil
+                  order: 600000
+                  modes: [NSArray arrayWithObjects:
+                          NSDefaultRunLoopMode,
+                          NSModalPanelRunLoopMode,
+                          NSEventTrackingRunLoopMode, nil]];
+   }
+ else
+   {
      [self displayIfNeeded];
+   }
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]