]> git.eshelyaron.com Git - emacs.git/commitdiff
Redo the fix, the old takes too much CPU.
authorJan D <jan.h.d@swipnet.se>
Sat, 15 Nov 2014 18:09:58 +0000 (19:09 +0100)
committerJan D <jan.h.d@swipnet.se>
Sat, 15 Nov 2014 18:09:58 +0000 (19:09 +0100)
Fixes: 18993
* nsterm.m (ns_send_appdefined): Check for application defined
event on Cocoa (Bug#18993).
(run): Restore code before the previous 18993 fix.

src/ChangeLog
src/nsterm.m

index 71b2938694b4a05bd6cd29fc6216c54a0e326da6..cf352183414194a8f442999bb87791dbe30c1b0a 100644 (file)
@@ -1,3 +1,9 @@
+2014-11-15  Jan Djärv  <jan.h.d@swipnet.se>
+
+       * 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  <david.reitter@gmail.com>
 
        * nsterm.m (run): set timeout for event loop to prevent hang.
index 539f77e512edefec23d8eb975c18f1a3ff3f2c8c..c36b9ed4554d0884d16c78aeabc507e748871839 100644 (file)
@@ -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);