diff --git a/src/ChangeLog b/src/ChangeLog index 71b2938694b..cf352183414 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-11-15 Jan Djärv + + * nsterm.m (ns_send_appdefined): Check for application defined + event on Cocoa (Bug#18993). + (run): Restore code before the previous 18993 fix. + 2014-11-14 David Reitter * nsterm.m (run): set timeout for event loop to prevent hang. diff --git a/src/nsterm.m b/src/nsterm.m index 539f77e512e..c36b9ed4554 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -3377,6 +3377,21 @@ overwriting cursor (usually when cursor on a tab) */ /* Only post this event if we haven't already posted one. This will end the [NXApp run] main loop after having processed all events queued at this moment. */ + +#ifdef NS_IMPL_COCOA + if (! send_appdefined) + { + /* OSX 10.10.1 swallows the AppDefined event we are sending ourselves + in certain situations (rapid incoming events). + So check if we have one, if not add one. */ + NSEvent *appev = [NSApp nextEventMatchingMask:NSApplicationDefinedMask + untilDate:[NSDate distantPast] + inMode:NSDefaultRunLoopMode + dequeue:NO]; + if (! appev) send_appdefined = YES; + } +#endif + if (send_appdefined) { NSEvent *nxev; @@ -4511,6 +4526,15 @@ - (id)init #ifdef NS_IMPL_COCOA - (void)run { +#ifndef NSAppKitVersionNumber10_9 +#define NSAppKitVersionNumber10_9 1265 +#endif + + if ((int)NSAppKitVersionNumber != NSAppKitVersionNumber10_9) + { + [super run]; + return; + } NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; @@ -4523,22 +4547,13 @@ - (void)run [pool release]; pool = [[NSAutoreleasePool alloc] init]; - /* OSX 10.10.1 swallows the AppDefined event we are sending ourselves - in certain situations (rapid incoming events). - The timeout we set with untilDate is necessary to prevent a hang. - Bug #18993 */ - NSEvent *event = [self nextEventMatchingMask:NSAnyEventMask - untilDate:[NSDate dateWithTimeIntervalSinceNow:0.5] + untilDate:[NSDate distantFuture] inMode:NSDefaultRunLoopMode dequeue:YES]; - if (event == nil) // timeout - shouldKeepRunning = NO; - else - [self sendEvent:event]; - + [self sendEvent:event]; [self updateWindows]; } while (shouldKeepRunning);