From: Steven Tamm Date: Sun, 10 Oct 2004 16:56:21 +0000 (+0000) Subject: macterm.c (x_raise_frame): Add BLOCK_INPUT around SelectWindow X-Git-Tag: ttn-vms-21-2-B4~4634 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c3f4c690b66558c159f98b9ab5d9164c2fa0bfb7;p=emacs.git 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 --- diff --git a/src/ChangeLog b/src/ChangeLog index f77876b007a..16cf5a216e1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,18 @@ +2004-10-10 YAMAMOTO Mitsuharu + + * 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 * keyboard.c (timer_resume_idle): New function to resume idle diff --git a/src/mac.c b/src/mac.c index f7e96b9c146..91d07372578 100644 --- a/src/mac.c +++ b/src/mac.c @@ -47,6 +47,8 @@ Boston, MA 02111-1307, USA. */ #undef realloc #undef init_process #include +#undef mktime +#define mktime emacs_mktime #undef free #define free unexec_free #undef malloc @@ -73,6 +75,7 @@ Boston, MA 02111-1307, USA. */ #include "process.h" #include "sysselect.h" #include "systime.h" +#include "blockinput.h" Lisp_Object QCLIPBOARD; @@ -2548,7 +2551,9 @@ component. */) CHECK_STRING (script); + BLOCK_INPUT; status = do_applescript (SDATA (script), &result); + UNBLOCK_INPUT; if (status) { if (!result) @@ -2618,26 +2623,23 @@ DEFUN ("mac-paste-function", Fmac_paste_function, Smac_paste_function, 0, 0, 0, () { #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 @@ DEFUN ("mac-cut-function", Fmac_cut_function, Smac_cut_function, 1, 2, 0, #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 @@ and t is the same as `SECONDARY'. */) 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 @@ and t is the same as `SECONDARY'. */) 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 diff --git a/src/macfns.c b/src/macfns.c index f7594e9c6c2..88f975a65c8 100644 --- a/src/macfns.c +++ b/src/macfns.c @@ -4247,6 +4247,7 @@ specified. Ensure that file exists if MUSTMATCH is non-nil. */) 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 @@ specified. Ensure that file exists if MUSTMATCH is non-nil. */) AEDisposeDesc(&defLocAed); } - BLOCK_INPUT; status = NavDialogRun(dialogRef); - UNBLOCK_INPUT; } if (saveName) CFRelease(saveName); @@ -4332,9 +4331,7 @@ specified. Ensure that file exists if MUSTMATCH is non-nil. */) { 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 @@ specified. Ensure that file exists if MUSTMATCH is non-nil. */) dir, mustmatch, dir, Qfile_name_history, default_filename, Qnil); } + UNBLOCK_INPUT; } UNGCPRO; diff --git a/src/macgui.h b/src/macgui.h index 58081df52b4..e5ea665ac15 100644 --- a/src/macgui.h +++ b/src/macgui.h @@ -42,6 +42,8 @@ typedef unsigned long Time; #undef min #undef init_process #include +#undef mktime +#define mktime emacs_mktime #undef Z #define Z (current_buffer->text->z) #undef free diff --git a/src/macterm.c b/src/macterm.c index a5e1de9be08..3616ac95672 100644 --- a/src/macterm.c +++ b/src/macterm.c @@ -5317,7 +5317,11 @@ x_raise_frame (f) 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 @@ x_lower_frame (f) 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 @@ make_mac_frame (FRAME_PTR fp) mwp = fp->output_data.mac; + BLOCK_INPUT; if (making_terminal_window) { if (!(mwp->mWP = GetNewCWindow (TERM_WINDOW_RESOURCE, NULL, @@ -8784,9 +8793,8 @@ make_mac_frame (FRAME_PTR fp) /* 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 @@ mac_initialize () signal (SIGPIPE, x_connection_signal); #endif + BLOCK_INPUT; mac_initialize_display_info (); #if TARGET_API_MAC_CARBON @@ -9227,6 +9236,7 @@ mac_initialize () if (!inhibit_window_system) MakeMeTheFrontProcess (); #endif + UNBLOCK_INPUT; }