[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 048b1aa: Prevent stack overflow in GNUstep menu code
From: |
Alan Third |
Subject: |
master 048b1aa: Prevent stack overflow in GNUstep menu code |
Date: |
Tue, 5 Jan 2021 16:45:07 -0500 (EST) |
branch: master
commit 048b1aaec8d5cd4ce6e6a5a9b8091608d0af81a6
Author: Alan Third <alan@idiocy.org>
Commit: Alan Third <alan@idiocy.org>
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.
---
src/nsmenu.m | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 9b56958..8086f56 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -145,6 +145,10 @@ ns_update_menubar (struct frame *f, bool deep_p)
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 @@ set_frame_menubar (struct frame *f, bool first_time, bool
deep_p)
}
-/* 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
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 048b1aa: Prevent stack overflow in GNUstep menu code,
Alan Third <=