[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 004c2ced6e: Better fix for disappearing menu items on NS,
Po Lu <=