changeset 57425:0867872551d9

macterm.c (x_raise_frame): Add BLOCK_INPUT around SelectWindow (x_lower_frame): Add BLOCK_INPUT around SendBehind (make_mac_frame): Add BLOCK_INPUT around the making of a terminal frame (mac_initialize): Add BLOCK_INPUT around carbon initialization macgui.h (mktime): Use emacs_mktime macfns.c (Fx_file_dialog): Add BLOCK_INPUT around more code. Make a cancel file-open dialog be like C-g. mac.c (mktime): Use emacs_mktime (Fdo_applescript): Add BLOCK_INPUT around do_applescript (Fmac_paste_function): Add better error handling for carbon cut/paste
author Steven Tamm <steventamm@mac.com>
date Sun, 10 Oct 2004 16:56:21 +0000
parents b1ed4b950258
children 4f0c0062f974
files src/ChangeLog src/mac.c src/macfns.c src/macgui.h src/macterm.c
diffstat 5 files changed, 63 insertions(+), 27 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Oct 10 14:29:43 2004 +0000
+++ b/src/ChangeLog	Sun Oct 10 16:56:21 2004 +0000
@@ -1,3 +1,18 @@
+2004-10-10  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+	* macterm.c (x_raise_frame): Add BLOCK_INPUT around SelectWindow
+	(x_lower_frame): Add BLOCK_INPUT around SendBehind
+	(make_mac_frame): Add BLOCK_INPUT around the making of a
+	terminal frame
+	(mac_initialize): Add BLOCK_INPUT around carbon initialization
+	* macgui.h (mktime): Use emacs_mktime
+	* macfns.c (Fx_file_dialog): Add BLOCK_INPUT around more code.
+	Make a cancel file-open dialog be like C-g.
+	* mac.c (mktime): Use emacs_mktime
+	(Fdo_applescript): Add BLOCK_INPUT around do_applescript
+	(Fmac_paste_function): Add better error handling for carbon
+	cut/paste 
+
 2004-10-10  Kim F. Storm  <storm@cua.dk>
 
 	* keyboard.c (timer_resume_idle): New function to resume idle
--- a/src/mac.c	Sun Oct 10 14:29:43 2004 +0000
+++ b/src/mac.c	Sun Oct 10 16:56:21 2004 +0000
@@ -47,6 +47,8 @@
 #undef realloc
 #undef init_process
 #include <Carbon/Carbon.h>
+#undef mktime
+#define mktime emacs_mktime
 #undef free
 #define free unexec_free
 #undef malloc
@@ -73,6 +75,7 @@
 #include "process.h"
 #include "sysselect.h"
 #include "systime.h"
+#include "blockinput.h"
 
 Lisp_Object QCLIPBOARD;
 
@@ -2548,7 +2551,9 @@
 
   CHECK_STRING (script);
 
+  BLOCK_INPUT;
   status = do_applescript (SDATA (script), &result);
+  UNBLOCK_INPUT;
   if (status)
     {
       if (!result)
@@ -2618,26 +2623,23 @@
      ()
 {
 #if TARGET_API_MAC_CARBON
+  OSStatus err;
   ScrapRef scrap;
   ScrapFlavorFlags sff;
   Size s;
   int i;
   char *data;
 
-  if (GetCurrentScrap (&scrap) != noErr)
-    return Qnil;
-
-  if (GetScrapFlavorFlags (scrap, kScrapFlavorTypeText, &sff) != noErr)
-    return Qnil;
-
-  if (GetScrapFlavorSize (scrap, kScrapFlavorTypeText, &s) != noErr)
-    return Qnil;
-
-  if ((data = (char*) alloca (s)) == NULL)
-    return Qnil;
-
-  if (GetScrapFlavorData (scrap, kScrapFlavorTypeText, &s, data) != noErr
-      || s == 0)
+  BLOCK_INPUT;
+  err = GetCurrentScrap (&scrap);
+  if (err == noErr)
+    err = GetScrapFlavorFlags (scrap, kScrapFlavorTypeText, &sff);
+  if (err == noErr)
+    err = GetScrapFlavorSize (scrap, kScrapFlavorTypeText, &s);
+  if (err == noErr && (data = (char*) alloca (s)))
+    err = GetScrapFlavorData (scrap, kScrapFlavorTypeText, &s, data);
+  UNBLOCK_INPUT;
+  if (err != noErr || s == 0)
     return Qnil;
 
   /* Emacs expects clipboard contents have Unix-style eol's */
@@ -2702,13 +2704,22 @@
 #if TARGET_API_MAC_CARBON
   {
     ScrapRef scrap;
+
+    BLOCK_INPUT;
     ClearCurrentScrap ();
     if (GetCurrentScrap (&scrap) != noErr)
-      error ("cannot get current scrap");
+      {
+	UNBLOCK_INPUT;
+	error ("cannot get current scrap");
+      }
 
     if (PutScrapFlavor (scrap, kScrapFlavorTypeText, kScrapFlavorMaskNone, len,
 			buf) != noErr)
-      error ("cannot put to scrap");
+      {
+	UNBLOCK_INPUT;
+	error ("cannot put to scrap");
+      }
+    UNBLOCK_INPUT;
   }
 #else /* not TARGET_API_MAC_CARBON */
   ZeroScrap ();
@@ -2743,9 +2754,11 @@
       ScrapRef scrap;
       ScrapFlavorFlags sff;
 
+      BLOCK_INPUT;
       if (GetCurrentScrap (&scrap) == noErr)
         if (GetScrapFlavorFlags (scrap, kScrapFlavorTypeText, &sff) == noErr)
           val = Qt;
+      UNBLOCK_INPUT;
 #else /* not TARGET_API_MAC_CARBON */
       Handle my_handle;
       long rc, scrap_offset;
@@ -2770,8 +2783,6 @@
 extern int inhibit_window_system;
 extern int noninteractive;
 
-#include "blockinput.h"
-
 /* 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
--- a/src/macfns.c	Sun Oct 10 14:29:43 2004 +0000
+++ b/src/macfns.c	Sun Oct 10 16:56:21 2004 +0000
@@ -4247,6 +4247,7 @@
     NavUserAction userAction;
     CFStringRef message=NULL, client=NULL, saveName = NULL;
     
+    BLOCK_INPUT;
     /* No need for a callback function because we are modal */
     NavGetDefaultDialogCreationOptions(&options);
     options.modality = kWindowModalityAppModal;
@@ -4317,9 +4318,7 @@
 	AEDisposeDesc(&defLocAed);
       }
 
-      BLOCK_INPUT;
       status = NavDialogRun(dialogRef);
-      UNBLOCK_INPUT;
     }
 
     if (saveName) CFRelease(saveName);
@@ -4332,9 +4331,7 @@
 	{
 	case kNavUserActionNone:
 	case kNavUserActionCancel:
-	  NavDialogDispose(dialogRef);
-	  Fsignal (Qquit, Qnil);  /* Treat cancel like C-g */
-	  return;
+	  break;		/* Treat cancel like C-g */
 	case kNavUserActionOpen:
 	case kNavUserActionChoose:
 	case kNavUserActionSaveAs:
@@ -4369,6 +4366,7 @@
 			       dir, mustmatch, dir, Qfile_name_history,
 			       default_filename, Qnil);
     }
+    UNBLOCK_INPUT;
   }
 
   UNGCPRO;
--- a/src/macgui.h	Sun Oct 10 14:29:43 2004 +0000
+++ b/src/macgui.h	Sun Oct 10 16:56:21 2004 +0000
@@ -42,6 +42,8 @@
 #undef min
 #undef init_process
 #include <Carbon/Carbon.h>
+#undef mktime
+#define mktime emacs_mktime
 #undef Z
 #define Z (current_buffer->text->z)
 #undef free
--- a/src/macterm.c	Sun Oct 10 14:29:43 2004 +0000
+++ b/src/macterm.c	Sun Oct 10 16:56:21 2004 +0000
@@ -5317,7 +5317,11 @@
      struct frame *f;
 {
   if (f->async_visible)
-    SelectWindow (FRAME_MAC_WINDOW (f));
+    {
+      BLOCK_INPUT;
+      SelectWindow (FRAME_MAC_WINDOW (f));
+      UNBLOCK_INPUT;
+    }
 }
 
 /* Lower frame F.  */
@@ -5326,7 +5330,11 @@
      struct frame *f;
 {
   if (f->async_visible)
-    SendBehind (FRAME_MAC_WINDOW (f), nil);
+    {
+      BLOCK_INPUT;
+      SendBehind (FRAME_MAC_WINDOW (f), nil);
+      UNBLOCK_INPUT;
+    }
 }
 
 static void
@@ -8757,6 +8765,7 @@
 
   mwp = fp->output_data.mac;
 
+  BLOCK_INPUT;
   if (making_terminal_window)
     {
       if (!(mwp->mWP = GetNewCWindow (TERM_WINDOW_RESOURCE, NULL,
@@ -8784,9 +8793,8 @@
     /* so that update events can find this mac_output struct */
   mwp->mFP = fp;  /* point back to emacs frame */
 
-  SetPortWindowPort (mwp->mWP);
-
   SizeWindow (mwp->mWP, FRAME_PIXEL_WIDTH (fp), FRAME_PIXEL_HEIGHT (fp), false);
+  UNBLOCK_INPUT;
 }
 
 
@@ -9209,6 +9217,7 @@
   signal (SIGPIPE, x_connection_signal);
 #endif
 
+  BLOCK_INPUT;
   mac_initialize_display_info ();
 
 #if TARGET_API_MAC_CARBON
@@ -9227,6 +9236,7 @@
   if (!inhibit_window_system)
     MakeMeTheFrontProcess ();
 #endif
+  UNBLOCK_INPUT;
 }