Mercurial > emacs
changeset 101857:2ce0c9304190
* nsterm.m (EmacsApp-sendEvent:): Defer NSApplicationDefined event
when modal window is active. (Bug #2152)
(applicationShouldTerminate:): Remove now-unneeded while loop
around NSRunAlertPanel.
* nsmenu.m (popupSession): New file-global variable.
(pop_down_menu): End the popupSession before closing dialog.
(ns_popup_dialog): BLOCK_INPUT around dialog presentation.
(EmacsDialogPanel-runDialogAt:): Don't place window (superfluous),
don't query NSApp for events (just sleep instead).
author | Adrian Robert <Adrian.B.Robert@gmail.com> |
---|---|
date | Sat, 07 Feb 2009 11:03:52 +0000 |
parents | ceb61718bdae |
children | b1643c6cb416 |
files | src/nsmenu.m |
diffstat | 1 files changed, 14 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/nsmenu.m Sat Feb 07 10:52:13 2009 +0000 +++ b/src/nsmenu.m Sat Feb 07 11:03:52 2009 +0000 @@ -73,6 +73,7 @@ /* Nonzero means a menu is currently active. */ static int popup_activated_flag; +static NSModalSession popupSession; /* NOTE: toolbar implementation is at end, following complete menu implementation. */ @@ -1495,6 +1496,7 @@ 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; @@ -1554,6 +1556,8 @@ p.x = (int)f->left_pos + ((int)FRAME_COLUMN_WIDTH (f) * f->text_cols)/2; p.y = (int)f->top_pos + (FRAME_LINE_HEIGHT (f) * f->text_lines)/2; + + BLOCK_INPUT; dialog = [[EmacsDialogPanel alloc] initFromContents: contents isQuestion: isQ]; { @@ -1567,6 +1571,7 @@ [dialog close]; [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow]; + UNBLOCK_INPUT; return tem; } @@ -1872,27 +1877,21 @@ - (Lisp_Object)runDialogAt: (NSPoint)p { - NSEvent *e; - NSModalSession session; int ret; - [self center]; /*XXX p ignored? */ - [self orderFront: NSApp]; - - session = [NSApp beginModalSessionForWindow: self]; + popupSession = [NSApp beginModalSessionForWindow: self]; while (popup_activated_flag - && (ret = [NSApp runModalSession: session]) == NSRunContinuesResponse) + && (ret = [NSApp runModalSession: popupSession]) + == NSRunContinuesResponse) { - timer_check (1); // for timers.el, indep of atimers; might not return - e = [NSApp nextEventMatchingMask: NSAnyEventMask - untilDate: [NSDate dateWithTimeIntervalSinceNow: 1] - inMode: NSModalPanelRunLoopMode - dequeue: NO]; -/*fprintf (stderr, "ret = %d\te = %p\n", ret, e);*/ + /* Run this for timers.el, indep of atimers; might not return. + TODO: use return value to avoid calling every iteration. */ + timer_check (1); + [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; } - [NSApp endModalSession: session]; + [NSApp endModalSession: popupSession]; - { // FIXME: BIG UGLY HACK!!! + { /* FIXME: BIG UGLY HACK!!! */ Lisp_Object tmp; *(EMACS_INT*)(&tmp) = ret; return tmp;