changeset 46856:eba75fedd593

2002-08-10 Andrew Choi <akochoi@shaw.ca> * mac.c (sys_select) [MAC_OSX]: New function. * macterm.c (MakeMeTheFrontProcess): New function. (mac_initialize): Call MakeMeTheFrontProcess. * s/darwin.h: Define select to sys_select.
author Andrew Choi <akochoi@shaw.ca>
date Sun, 11 Aug 2002 00:26:24 +0000
parents f3a9fdb839d2
children 31feee29e69a
files src/ChangeLog src/mac.c src/macterm.c src/s/darwin.h
diffstat 4 files changed, 56 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Aug 10 03:48:12 2002 +0000
+++ b/src/ChangeLog	Sun Aug 11 00:26:24 2002 +0000
@@ -1,3 +1,12 @@
+2002-08-10  Andrew Choi  <akochoi@shaw.ca>
+
+	* mac.c (sys_select) [MAC_OSX]: New function.
+
+	* macterm.c (MakeMeTheFrontProcess): New function.
+	(mac_initialize): Call MakeMeTheFrontProcess.
+
+	* s/darwin.h: Define select to sys_select.
+
 2002-08-09  Richard M. Stallman  <rms@gnu.org>
 
 	* keyboard.c (make_lispy_event): Test WINDOWSNT, not WINDOWS_NT.
--- a/src/mac.c	Sat Aug 10 03:48:12 2002 +0000
+++ b/src/mac.c	Sun Aug 11 00:26:24 2002 +0000
@@ -2745,6 +2745,30 @@
   return Qnil;
 }
 
+#ifdef MAC_OSX
+#undef select
+
+extern int inhibit_window_system;
+
+/* When Emacs is started from the Finder, SELECT always immediately
+   returns as if input is present when file descriptor 0 is polled for
+   input.  Strangely, when Emacs is run as a GUI application from the
+   command line, it blocks in the same situation.  This `wrapper' of
+   the system call SELECT corrects this discrepancy.  */
+int
+sys_select (n, rfds, wfds, efds, timeout)
+  int n;
+  SELECT_TYPE *rfds;
+  SELECT_TYPE *wfds;
+  SELECT_TYPE *efds;
+  struct timeval *timeout;
+{
+  if (!inhibit_window_system && rfds && FD_ISSET (0, rfds))
+    return 1;
+  else
+    return select (n, rfds, wfds, efds, timeout);
+}
+#endif /* MAC_OSX */
 
 void
 syms_of_mac ()
--- a/src/macterm.c	Sat Aug 10 03:48:12 2002 +0000
+++ b/src/macterm.c	Sun Aug 11 00:26:24 2002 +0000
@@ -366,6 +366,7 @@
 
 extern Lisp_Object x_icon_type P_ ((struct frame *));
 
+extern int inhibit_window_system;
 
 #if __MRC__
 QDGlobals qd;  /* QuickDraw global information structure.  */
@@ -13405,6 +13406,18 @@
   return dpyinfo;
 }
 
+#ifdef MAC_OSX
+void MakeMeTheFrontProcess ()
+{
+  ProcessSerialNumber psn;
+  OSErr err;
+  
+  err = GetCurrentProcess (&psn);
+  if (err == noErr)
+    (void) SetFrontProcess (&psn);
+}
+#endif /* MAC_OSX */
+
 /* Set up use of X before we make the first connection.  */
 
 static struct redisplay_interface x_redisplay_interface =
@@ -13514,6 +13527,9 @@
 #endif
 
   DisableMenuCommand (NULL, kHICommandQuit);
+
+  if (!inhibit_window_system)
+    MakeMeTheFrontProcess ();
 #endif
 }
 
--- a/src/s/darwin.h	Sat Aug 10 03:48:12 2002 +0000
+++ b/src/s/darwin.h	Sun Aug 11 00:26:24 2002 +0000
@@ -308,3 +308,10 @@
 #define realloc unexec_realloc
 #define free unexec_free
 #endif
+
+/* Reroute calls to SELECT to the version defined in mac.c to fix the
+   problem of Emacs requiring an extra return to be typed to start
+   working when started from the command line.  */
+#if defined (emacs) || defined (temacs)
+#define select sys_select
+#endif