From: Jan D Date: Sat, 15 Nov 2014 18:09:58 +0000 (+0100) Subject: Redo the fix, the old takes too much CPU. X-Git-Tag: emacs-25.0.90~2635^2~465 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0d9bf9725af8d819709ab775c380cc6cadddc5b5;p=emacs.git Redo the fix, the old takes too much CPU. Fixes: 18993 * nsterm.m (ns_send_appdefined): Check for application defined event on Cocoa (Bug#18993). (run): Restore code before the previous 18993 fix. --- 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 @@ ns_send_appdefined (int value) /* 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 @@ ns_term_shutdown (int sig) #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 @@ ns_term_shutdown (int sig) [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);