Prevent stack overflow in GNUstep menu code
* src/nsmenu.m (ns_update_menubar): Always do a deep update for GNUstep. ([EmacsMenu menuNeedsUpdate:]): Don't update the menu as it should always have had a deep update.
This commit is contained in:
parent
3b835f7b81
commit
048b1aaec8
1 changed files with 13 additions and 8 deletions
21
src/nsmenu.m
21
src/nsmenu.m
|
@ -145,6 +145,10 @@
|
|||
t = -(1000*tb.time+tb.millitm);
|
||||
#endif
|
||||
|
||||
#ifdef NS_IMPL_GNUSTEP
|
||||
deep_p = 1; /* See comment in menuNeedsUpdate. */
|
||||
#endif
|
||||
|
||||
if (deep_p)
|
||||
{
|
||||
/* Make a widget-value tree representing the entire menu trees. */
|
||||
|
@ -433,21 +437,22 @@ - (instancetype)initWithTitle: (NSString *)title
|
|||
}
|
||||
|
||||
|
||||
/* Delegate method called when a submenu is being opened: run a 'deep' call
|
||||
to set_frame_menubar. */
|
||||
|
||||
/* TODO: GNUstep calls this method when the menu is still being built
|
||||
which throws it into an infinite loop. One possible solution is to
|
||||
use menuWillOpen instead, but the Apple docs explicitly warn
|
||||
against changing the contents of the menu in it. I don't know what
|
||||
the right thing to do for GNUstep is. */
|
||||
/* Delegate method called when a submenu is being opened: run a 'deep'
|
||||
call to ns_update_menubar. */
|
||||
- (void)menuNeedsUpdate: (NSMenu *)menu
|
||||
{
|
||||
if (!FRAME_LIVE_P (SELECTED_FRAME ()))
|
||||
return;
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
/* TODO: GNUstep calls this method when the menu is still being built
|
||||
which results in a recursive stack overflow. One possible solution
|
||||
is to use menuWillOpen instead, but the Apple docs explicitly warn
|
||||
against changing the contents of the menu in it. I don't know what
|
||||
the right thing to do for GNUstep is. */
|
||||
if (needsUpdate)
|
||||
ns_update_menubar (SELECTED_FRAME (), true);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue