emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 004c2ced6e: Better fix for disappearing menu items on NS


From: Po Lu
Subject: master 004c2ced6e: Better fix for disappearing menu items on NS
Date: Sat, 14 May 2022 01:51:10 -0400 (EDT)

branch: master
commit 004c2ced6e1eb71a54ea58e78c714ae69e215f63
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    Better fix for disappearing menu items on NS
    
    * src/frame.c (delete_frame): Revert last change.
    * src/nsmenu.m (free_frame_menubar): Only free if that frame's
    menu bar is actually being displayed.
    (ns_update_menubar): Note the last frame to have updated the
    menu bar.
---
 src/frame.c  |  6 +-----
 src/nsmenu.m | 18 ++++++++++++++----
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/frame.c b/src/frame.c
index 2fb91ca5e7..1391cef628 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -2334,12 +2334,8 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
     }
 
   /* Cause frame titles to update--necessary if we now have just one
-     frame.  On NS the menu bar becomes empty after a tooltip frame is
-     deleted for an unknown reason, so this serves to restore the
-     contents of the menu bar as well.  */
-#ifndef HAVE_NS
+     frame.  */
   if (!is_tooltip_frame)
-#endif
     update_mode_lines = 15;
 
   /* Now run the post-deletion hooks.  */
diff --git a/src/nsmenu.m b/src/nsmenu.m
index 5599d51906..531f0d3bb6 100644
--- a/src/nsmenu.m
+++ b/src/nsmenu.m
@@ -52,6 +52,10 @@ EmacsMenu *svcsMenu;
 /* Nonzero means a menu is currently active.  */
 static int popup_activated_flag;
 
+/* The last frame whose menubar was updated.  (This is the frame whose
+   menu bar is currently being displayed.)  */
+static struct frame *last_menubar_frame;
+
 /* NOTE: toolbar implementation is at end,
    following complete menu implementation.  */
 
@@ -71,6 +75,12 @@ void
 free_frame_menubar (struct frame *f)
 {
   id menu = [NSApp mainMenu];
+
+  if (f != last_menubar_frame)
+    return;
+
+  last_menubar_frame = NULL;
+
   for (int i = [menu numberOfItems] - 1 ; i >= 0; i--)
     {
       NSMenuItem *item = (NSMenuItem *)[menu itemAtIndex:i];
@@ -135,9 +145,9 @@ ns_update_menubar (struct frame *f, bool deep_p)
 #endif
       return;
     }
-  XSETFRAME (Vmenu_updating_frame, f);
-/*fprintf (stderr, "ns_update_menubar: frame: %p\tdeep: %d\tsub: %p\n", f, 
deep_p, submenu); */
 
+  XSETFRAME (Vmenu_updating_frame, f);
+  last_menubar_frame = f;
   block_input ();
 
   /* Menu may have been created automatically; if so, discard it.  */
@@ -155,7 +165,7 @@ ns_update_menubar (struct frame *f, bool deep_p)
 
 #if NSMENUPROFILE
   ftime (&tb);
-  t = -(1000*tb.time+tb.millitm);
+  t = -(1000 * tb.time + tb.millitm);
 #endif
 
   if (deep_p)
@@ -413,7 +423,7 @@ ns_update_menubar (struct frame *f, bool deep_p)
 
 #if NSMENUPROFILE
   ftime (&tb);
-  t += 1000*tb.time+tb.millitm;
+  t += 1000 * tb.time + tb.millitm;
   fprintf (stderr, "Menu update took %ld msec.\n", t);
 #endif
 



reply via email to

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