changeset 102004:e1a5d89a91dd

* nsfns.m (ns-read-file-name): BLOCK_INPUT while showing dialog. \n \n* nsmenu.m (pop_down_menu): Check popup_activated_flag. \n(ns_popup_dialog, EmacsDialogPanel-runDialogAt:): Let \npop_down_menu do the cleanup work as it is always called. (Bug#2154) \n \n* nsfont.m (nsfont_make_fontset_for_font): For now, don't try to \nset fontset font for 'mathematical-' sub-scripts. (Bug #2218)\n
author Adrian Robert <Adrian.B.Robert@gmail.com>
date Fri, 13 Feb 2009 13:30:35 +0000
parents 5b34117b1ac4
children a0a98144aa0b
files src/ChangeLog src/nsfns.m src/nsfont.m src/nsmenu.m
diffstat 4 files changed, 38 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Fri Feb 13 12:57:45 2009 +0000
+++ b/src/ChangeLog	Fri Feb 13 13:30:35 2009 +0000
@@ -1,3 +1,14 @@
+2009-02-13  Adrian Robert  <Adrian.B.Robert@gmail.com>
+
+	* nsfns.m (ns-read-file-name): BLOCK_INPUT while showing dialog.
+
+	* nsmenu.m (pop_down_menu): Check popup_activated_flag.
+	(ns_popup_dialog, EmacsDialogPanel-runDialogAt:): Let
+	pop_down_menu do the cleanup work as it is always called. (Bug#2154)
+
+	* nsfont.m (nsfont_make_fontset_for_font): For now, don't try to
+	set fontset font for "mathematical-" sub-scripts. (Bug #2218)
+
 2009-02-12  Stefan Monnier  <monnier@iro.umontreal.ca>
 
 	* keyboard.c (adjust_point_for_property): Allow stopping betwen two
--- a/src/nsfns.m	Fri Feb 13 12:57:45 2009 +0000
+++ b/src/nsfns.m	Fri Feb 13 13:30:35 2009 +0000
@@ -1449,7 +1449,7 @@
   static id fileDelegate = nil;
   int ret;
   id panel;
-  NSString *fname;
+  Lisp_Object fname;
 
   NSString *promptS = NILP (prompt) || !STRINGP (prompt) ? nil :
     [NSString stringWithUTF8String: SDATA (prompt)];
@@ -1482,6 +1482,7 @@
   [panel setDelegate: fileDelegate];
 
   panelOK = 0;
+  BLOCK_INPUT;
   if (NILP (isLoad))
     {
       ret = [panel runModalForDirectory: dirS file: initS];
@@ -1494,11 +1495,13 @@
 
   ret = (ret == NSOKButton) || panelOK;
 
-  fname = [panel filename];
-
+  if (ret)
+    fname = build_string ([[panel filename] UTF8String]);
+  
   [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
-
-  return ret ? build_string ([fname UTF8String]) : Qnil;
+  UNBLOCK_INPUT;
+
+  return ret ? fname : Qnil;
 }
 
 
@@ -2644,6 +2647,7 @@
 
 #endif
 
+
 /* ==========================================================================
 
     Lisp interface declaration
--- a/src/nsfont.m	Fri Feb 13 12:57:45 2009 +0000
+++ b/src/nsfont.m	Fri Feb 13 13:30:35 2009 +0000
@@ -1235,7 +1235,13 @@
                       font_info->name, family,
                        SDATA (SYMBOL_NAME (scripts[i])));
 
-            Fset_fontset_font (name, scripts[i], famAndReg, Qnil, Qnil);
+            /* TODO: Some of the "scripts" in script-representative-chars are
+               actually only "sub-scripts" which are not fully defined.  For
+               these, calling set_fontset_font generates an abort.  Try to
+               guess which ones these are and avoid it. */
+            if (strstr (SDATA (SYMBOL_NAME (scripts[i])), "mathematical-")
+                    != SDATA (SYMBOL_NAME (scripts[i])))
+              Fset_fontset_font (name, scripts[i], famAndReg, Qnil, Qnil);
             free (family);
           }
         else
--- a/src/nsmenu.m	Fri Feb 13 12:57:45 2009 +0000
+++ b/src/nsmenu.m	Fri Feb 13 13:30:35 2009 +0000
@@ -1494,12 +1494,15 @@
 pop_down_menu (Lisp_Object arg)
 {
   struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
-  popup_activated_flag = 0;
-  BLOCK_INPUT;
-  [NSApp endModalSession: popupSession];
-  [((EmacsDialogPanel *) (p->pointer)) close];
-  [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
-  UNBLOCK_INPUT;
+  if (popup_activated_flag)
+    {
+      popup_activated_flag = 0;
+      BLOCK_INPUT;
+      [NSApp endModalSession: popupSession];
+      [((EmacsDialogPanel *) (p->pointer)) close];
+      [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
+      UNBLOCK_INPUT;
+    }
   return Qnil;
 }
 
@@ -1565,12 +1568,8 @@
     record_unwind_protect (pop_down_menu, make_save_value (dialog, 0));
     popup_activated_flag = 1;
     tem = [dialog runDialogAt: p];
-    popup_activated_flag = 0;
-    unbind_to (specpdl_count, Qnil);
+    unbind_to (specpdl_count, Qnil);  /* calls pop_down_menu */
   }
-
-  [dialog close];
-  [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
   UNBLOCK_INPUT;
 
   return tem;
@@ -1879,6 +1878,7 @@
 {
   int ret;
 
+  /* initiate a session that will be ended by pop_down_menu */
   popupSession = [NSApp beginModalSessionForWindow: self];
   while (popup_activated_flag
          && (ret = [NSApp runModalSession: popupSession])
@@ -1889,7 +1889,6 @@
       timer_check (1);
       [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]];
     }
-  [NSApp endModalSession: popupSession];
 
   {				/* FIXME: BIG UGLY HACK!!! */
       Lisp_Object tmp;