Mercurial > emacs
diff src/nsmenu.m @ 97267:248808aeee3e
fix popup menu selection return (menu.c); add use of popup_activated under NS (nsmenu.m, xdisp.c); improve comments (lisp.h, s/darwin.h); use FORWARD_SIGNAL_TO_MAIN_THREAD (syssignal.h)
| author | Adrian Robert <Adrian.B.Robert@gmail.com> |
|---|---|
| date | Mon, 04 Aug 2008 16:57:44 +0000 |
| parents | cf43f4e3ecc8 |
| children | 76ed169d532c |
line wrap: on
line diff
--- a/src/nsmenu.m Mon Aug 04 14:39:27 2008 +0000 +++ b/src/nsmenu.m Mon Aug 04 16:57:44 2008 +0000 @@ -65,6 +65,9 @@ extern long context_menu_value; EmacsMenu *mainMenu, *svcsMenu; +/* Nonzero means a menu is currently active. */ +static int popup_activated_flag; + /* NOTE: toolbar implementation is at end, following complete menu implementation. */ @@ -94,6 +97,13 @@ } +int +popup_activated () +{ + return popup_activated_flag; +} + + /* -------------------------------------------------------------------------- Update menubar. Three cases: 1) deep_p = 0, submenu = nil: Fresh switch onto a frame -- either set up @@ -592,6 +602,7 @@ return [NSString stringWithFormat: @"%c", tpos[2]]; } + - (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr { NSMenuItem *item; @@ -1117,10 +1128,13 @@ free_menubar_widget_value_tree (first_wv); unbind_to (specpdl_count2, Qnil); + popup_activated_flag = 1; tem = [pmenu runMenuAt: p forFrame: f keymaps: keymaps]; + popup_activated_flag = 0; [[FRAME_NS_VIEW (SELECTED_FRAME ()) window] makeKeyWindow]; UNBLOCK_INPUT; + discard_menu_items (); unbind_to (specpdl_count, Qnil); UNGCPRO; @@ -1511,8 +1525,9 @@ p.y = (int)f->top_pos + (FRAME_LINE_HEIGHT (f) * f->text_lines)/2; dialog = [[EmacsDialogPanel alloc] initFromContents: contents isQuestion: isQ]; - + popup_activated_flag = 1; tem = [dialog runDialogAt: p]; + popup_activated_flag = 0; [dialog close]; @@ -1934,6 +1949,12 @@ return ns_popup_dialog (position, contents, header); } +DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, Smenu_or_popup_active_p, 0, 0, 0, + doc: /* Return t if a menu or popup dialog is active. */) + () +{ + return popup_activated () ? Qt : Qnil; +} /* ========================================================================== @@ -1947,6 +1968,7 @@ defsubr (&Sx_popup_menu); defsubr (&Sx_popup_dialog); defsubr (&Sns_reset_menu); + defsubr (&Smenu_or_popup_active_p); staticpro (&menu_items); menu_items = Qnil;
