+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
static id fileDelegate = nil;
int ret;
id panel;
- NSString *fname;
+ Lisp_Object fname;
NSString *promptS = NILP (prompt) || !STRINGP (prompt) ? nil :
[NSString stringWithUTF8String: SDATA (prompt)];
[panel setDelegate: fileDelegate];
panelOK = 0;
+ BLOCK_INPUT;
if (NILP (isLoad))
{
ret = [panel runModalForDirectory: dirS file: initS];
ret = (ret == NSOKButton) || panelOK;
- fname = [panel filename];
-
+ if (ret)
+ fname = build_string ([[panel filename] UTF8String]);
+
[[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow];
+ UNBLOCK_INPUT;
- return ret ? build_string ([fname UTF8String]) : Qnil;
+ return ret ? fname : Qnil;
}
#endif
+
/* ==========================================================================
Lisp interface declaration
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
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;
}
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;
{
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])
timer_check (1);
[NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]];
}
- [NSApp endModalSession: popupSession];
{ /* FIXME: BIG UGLY HACK!!! */
Lisp_Object tmp;