emacs-diffs
[Top][All Lists]
Advanced

[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
 }
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]