diff src/mac.c @ 74626:04ef1ad19c59

(wakeup_from_rne_enabled_p) [TARGET_API_MAC_CARBON]: New variable. (ENABLE_WAKEUP_FROM_RNE, DISABLE_WAKEUP_FROM_RNE): New macros. [!MAC_OSX] (select): Use them. [MAC_OSX] (select_and_poll_event, sys_select): Likewise. (mac_wakeup_from_rne) [TARGET_API_MAC_CARBON]: New function.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Fri, 15 Dec 2006 08:05:10 +0000
parents fbd883b271ad
children e97a993d4ab6 6588c6259dfb
line wrap: on
line diff
--- a/src/mac.c	Fri Dec 15 08:04:47 2006 +0000
+++ b/src/mac.c	Fri Dec 15 08:05:10 2006 +0000
@@ -79,6 +79,15 @@
 /* The single script context used for all script executions.  */
 static OSAID as_script_context;
 
+#if TARGET_API_MAC_CARBON
+static int wakeup_from_rne_enabled_p = 0;
+#define ENABLE_WAKEUP_FROM_RNE (wakeup_from_rne_enabled_p = 1)
+#define DISABLE_WAKEUP_FROM_RNE (wakeup_from_rne_enabled_p = 0)
+#else
+#define ENABLE_WAKEUP_FROM_RNE 0
+#define DISABLE_WAKEUP_FROM_RNE 0
+#endif
+
 #ifndef MAC_OSX
 static OSErr posix_pathname_to_fsspec P_ ((const char *, FSSpec *));
 static OSErr fsspec_to_posix_pathname P_ ((const FSSpec *, char *, int));
@@ -2431,6 +2440,7 @@
      BLOCK_INPUT block, in case that some input has already been read
      asynchronously.  */
   BLOCK_INPUT;
+  ENABLE_WAKEUP_FROM_RNE;
   if (!detect_input_pending ())
     {
 #if TARGET_API_MAC_CARBON
@@ -2461,6 +2471,7 @@
 	}
 #endif /* not TARGET_API_MAC_CARBON */
     }
+  DISABLE_WAKEUP_FROM_RNE;
   UNBLOCK_INPUT;
 
   if (err == noErr)
@@ -5023,6 +5034,7 @@
      BLOCK_INPUT block, in case that some input has already been read
      asynchronously.  */
   BLOCK_INPUT;
+  ENABLE_WAKEUP_FROM_RNE;
   if (!detect_input_pending ())
     {
       EMACS_TIME select_timeout;
@@ -5045,6 +5057,7 @@
 				  kEventLeaveInQueue, NULL);
 	}
     }
+  DISABLE_WAKEUP_FROM_RNE;
   UNBLOCK_INPUT;
 
   if (r != 0)
@@ -5124,6 +5137,7 @@
 	 BLOCK_INPUT block, in case that some input has already been
 	 read asynchronously.  */
       BLOCK_INPUT;
+      ENABLE_WAKEUP_FROM_RNE;
       if (!detect_input_pending ())
 	{
 	  int minfd, fd;
@@ -5184,6 +5198,7 @@
 		CFRunLoopRemoveSource (runloop, source, kCFRunLoopDefaultMode);
 	      }
 	}
+      DISABLE_WAKEUP_FROM_RNE;
       UNBLOCK_INPUT;
 
       if (err == noErr || err == eventLoopQuitErr)
@@ -5385,6 +5400,16 @@
 }
 #endif /* MAC_OSX */
 
+#if TARGET_API_MAC_CARBON
+void
+mac_wakeup_from_rne ()
+{
+  if (wakeup_from_rne_enabled_p)
+    /* Post a harmless event so as to wake up from
+       ReceiveNextEvent.  */
+    mac_post_mouse_moved_event ();
+}
+#endif
 
 void
 syms_of_mac ()