From: Adrian Robert Date: Fri, 1 Aug 2008 14:01:08 +0000 (+0000) Subject: clear warnings and clean up NS port X-Git-Tag: emacs-pretest-23.0.90~3720 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=150349607cf648e78d34aa16ef1d43d774bc6044;p=emacs.git clear warnings and clean up NS port --- diff --git a/src/ChangeLog b/src/ChangeLog index 1bf57826ca2..f5ecf80af09 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,47 @@ +2008-08-01 Adrian Robert + Warning clearing and clean-up in NS port. + * keyboard.h (xmalloc_widget_value, digest_single_submenu): Add + prototypes. + * nsgui.h (FACE_DEFAULT): Remove, unused. + (XGCValues): Change colors to unsigned long. + * nsterm.h (EmacsApp): Add declaration of all methods implemented in + nsterm.m. + (EmacsMenu -addItemWithWidgetValue:): Change to use NSMenuItem class. + (ns_list_fonts): Remove, unused. + (ns_font_to_xlfd, ns_fontname_to_xlfd): Drop prototypes. + * nsfns.m (interpret_services_menu): Use NSMenuItem class. + * nsfont.m (nsfont_open): Fix cast error in glyphs,metrics alloc. + (nsfont_draw): Compare face colors to 0, not nil. + * nsmenu.m (struct widget_value): Drop unneeded declaration. + (EmacsMenu -addItemWithWidgetValue:, -fillWithWidgetValue:) + (-addSubmenuWithTitle:): Use NSMenuItem class. + (ns_popup_menu): Use NO, not NULL, for enabled setting. + * nsterm.m (ns_draw_glyph_string): Don't compare font to ~0. + (ns_clip_to_row): Make gc arg a BOOL. + (ns_draw_fringe_bitmap, ns_draw_window_cursor): Use YES, NO in + ns_clip_to_row() call. + (ns_draw_glyph_string): Drop face comparison to ~0 (no longer + used). Cast FRAME_FONT assignments. + (ns_read_socket): Cast call to EmacsApp-fulfillService:withArg:. + (ns_string_to_lispmod): Change arg to const char. + (ns_term_init): Use NSMenuItem class. + (EmacsApp -openFile:): Move to different section of file. + (EmacsApp -application:openFiles:): Don't return a value, call + -replyToOpenOrPrint:. + (EmacsView -keyDown:): Fix up cast. + (EmacsView -converstationIdentifier): Use NSInteger instead of long. + (EmacsView -menuDown:): Cast tag in call to + find_and_call_menu_selection(). + (ns_list_fonts): Remove, unused. + (ns_font_to_xlfd): Make static. Cast result of UTF8String. + (ns_fontname_to_xlfd): Make static. + * w32menu.c (xmalloc_widget_value, digest_single_submenu): Remove + prototypes (now in keyboard.h). + (next_menubar_widget_id): Remove, unused. + * xmenu.c (xmalloc_widget_value, digest_single_submenu): Remove + prototypes (now in keyboard.h). + * xfaces.c (ns_list_fonts, w32_list_fonts): Remove, unused. + 2008-08-01 Dan Nicolaescu * systty.h: Fix previous change that removed BSD_TERMIOS. Add diff --git a/src/keyboard.h b/src/keyboard.h index d0c3c860072..970ff46b825 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -367,6 +367,11 @@ typedef struct _widget_value } widget_value; #endif +#if defined (HAVE_NS) || defined (HAVE_NTGUI) || defined (USE_X_TOOLKIT) || defined (USE_GTK) +extern widget_value *xmalloc_widget_value P_ ((void)); +extern widget_value *digest_single_submenu P_ ((int, int, int)); +#endif + /* Macros for dealing with lispy events. */ diff --git a/src/nsfns.m b/src/nsfns.m index 40e8791c318..a0cac0254ef 100644 --- a/src/nsfns.m +++ b/src/nsfns.m @@ -280,7 +280,7 @@ interpret_services_menu (NSMenu *menu, Lisp_Object prefix, Lisp_Object old) -------------------------------------------------------------------------- */ { int i, count; - id item; + NSMenuItem *item; const char *name; Lisp_Object nameStr; unsigned short key; diff --git a/src/nsfont.m b/src/nsfont.m index f206e0d27b2..0fb98d77180 100644 --- a/src/nsfont.m +++ b/src/nsfont.m @@ -597,9 +597,9 @@ fprintf (stderr, "*** CACHE HIT!\n"); } #endif - font_info->glyphs = (unsigned short *) + font_info->glyphs = (unsigned short **) xmalloc (0x100 * sizeof (unsigned short *)); - font_info->metrics = (struct font_metrics *) + font_info->metrics = (struct font_metrics **) xmalloc (0x100 * sizeof (struct font_metrics *)); if (!font_info->glyphs || !font_info->metrics) return Qnil; @@ -984,7 +984,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, /* set up for character rendering */ r.origin.y += font->voffset + (s->height - font->height)/2; - col = (NS_FACE_FOREGROUND (face) != nil + col = (NS_FACE_FOREGROUND (face) != 0 ? ns_lookup_indexed_color (NS_FACE_FOREGROUND (face), s->f) : FRAME_FOREGROUND_COLOR (s->f)); /* FIXME: find another way to pass this */ @@ -1077,7 +1077,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, if (face->underline_p) { - if (face->underline_color != nil) + if (face->underline_color != 0) [ns_lookup_indexed_color (face->underline_color, s->f) set]; else [col set]; @@ -1087,7 +1087,7 @@ nsfont_draw (struct glyph_string *s, int from, int to, int x, int y, CGContextAddLineToPoint (gcontext, r.origin.x + r.size.width, r.origin.y + font->underpos); CGContextStrokePath (gcontext); - if (face->underline_color != nil) + if (face->underline_color != 0) [col set]; } else diff --git a/src/nsgui.h b/src/nsgui.h index 54e336fdf3d..f8d3ae4a3a8 100644 --- a/src/nsgui.h +++ b/src/nsgui.h @@ -75,20 +75,16 @@ typedef unichar XChar2b; #define XCHAR2B_BYTE2(chp) \ ((*chp) & 0x00ff) -#define FACE_DEFAULT (~0) - /* XXX: xfaces requires these structures, but the question is are we forced to use them? */ typedef struct _XGCValues { + unsigned long foreground; + unsigned long background; #ifdef __OBJC__ - NSColor *foreground; - NSColor *background; struct ns_font *font; #else - void *foreground; - void *background; void *font; #endif } XGCValues; diff --git a/src/nsmenu.m b/src/nsmenu.m index 9d17da43596..822aa94efa9 100644 --- a/src/nsmenu.m +++ b/src/nsmenu.m @@ -53,8 +53,6 @@ int menu_trace_num = 0; #include "nsmenu_common.c" #endif -extern struct widget_value; - extern Lisp_Object Qundefined, Qmenu_enable, Qmenu_bar_update_hook; extern Lisp_Object QCtoggle, QCradio; @@ -594,9 +592,9 @@ name_is_separator (name) return [NSString stringWithFormat: @"%c", tpos[2]]; } -- (id )addItemWithWidgetValue: (void *)wvptr +- (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr { - id item; + NSMenuItem *item; widget_value *wv = (widget_value *)wvptr; if (name_is_separator (wv->name)) @@ -663,7 +661,7 @@ name_is_separator (name) /* add new contents */ for (; wv != NULL; wv = wv->next) { - id item = [self addItemWithWidgetValue: wv]; + NSMenuItem *item = [self addItemWithWidgetValue: wv]; if (wv->contents) { @@ -691,10 +689,9 @@ name_is_separator (name) - (EmacsMenu *)addSubmenuWithTitle: (char *)title forFrame: (struct frame *)f { NSString *titleStr = [NSString stringWithUTF8String: title]; - id item - = [self addItemWithTitle: titleStr - action: nil /*@selector (menuDown:) */ - keyEquivalent: @""]; + NSMenuItem *item = [self addItemWithTitle: titleStr + action: nil /*@selector (menuDown:) */ + keyEquivalent: @""]; EmacsMenu *submenu = [[EmacsMenu alloc] initWithTitle: titleStr frame: f]; [self setSubmenu: submenu forItem: item]; [submenu release]; @@ -1107,7 +1104,7 @@ ns_popup_menu (Lisp_Object position, Lisp_Object menu) #endif wv_title->name = (char *) SDATA (title); - wv_title->enabled = NULL; + wv_title->enabled = NO; wv_title->button_type = BUTTON_TYPE_NONE; wv_title->help = Qnil; wv_title->next = wv_sep; diff --git a/src/nsterm.h b/src/nsterm.h index bb8beac378c..a9dc32793f4 100644 --- a/src/nsterm.h +++ b/src/nsterm.h @@ -36,8 +36,14 @@ along with GNU Emacs. If not, see . */ @interface EmacsApp : NSApplication { } +- (void)logNotification: (NSNotification *)notification; - (void)sendEvent: (NSEvent *)theEvent; - (void)showPreferencesWindow: (id)sender; +- (BOOL) openFile: (NSString *)fileName; +- (void)fd_handler: (NSTimer *) fdEntry; +- (void)cursor_blink_handler: (NSTimer *)cursorEntry; +- (void)timeout_handler: (NSTimer *)timedEntry; +- (BOOL)fulfillService: (NSString *)name withArg: (NSString *)arg; @end @@ -104,7 +110,7 @@ along with GNU Emacs. If not, see . */ - (void)setFrame: (struct frame *)f; - (void)menuNeedsUpdate: (NSMenu *)menu; /* (delegate method) */ - (NSString *)parseKeyEquiv: (char *)key; -- (id )addItemWithWidgetValue: (void *)wvptr; +- (NSMenuItem *)addItemWithWidgetValue: (void *)wvptr; - (void)fillWithWidgetValue: (void *)wvptr; - (EmacsMenu *)addSubmenuWithTitle: (char *)title forFrame: (struct frame *)f; - (void) clear; @@ -727,10 +733,6 @@ extern Lisp_Object ns_list_fonts (FRAME_PTR f, Lisp_Object pattern, int size, int maxnames); extern void ns_clear_frame (struct frame *f); -#ifdef __OBJC__ -extern const char *ns_font_to_xlfd (NSFont *font); -#endif -extern const char *ns_fontname_to_xlfd (const char *name); extern const char *ns_xlfd_to_fontname (const char *xlfd); extern void check_ns (void); diff --git a/src/nsterm.m b/src/nsterm.m index 0e6c1f33cfd..a67a8e0c3b6 100644 --- a/src/nsterm.m +++ b/src/nsterm.m @@ -785,7 +785,7 @@ ns_unfocus (struct frame *f) static void -ns_clip_to_row (struct window *w, struct glyph_row *row, int area, GC gc) +ns_clip_to_row (struct window *w, struct glyph_row *row, int area, BOOL gc) /* -------------------------------------------------------------------------- 23: Internal (but parallels other terms): Focus drawing on given row -------------------------------------------------------------------------- */ @@ -2212,7 +2212,7 @@ ns_draw_fringe_bitmap (struct window *w, struct glyph_row *row, int oldVH = row->visible_height; row->visible_height = p->h; row->y -= rowY - p->y; - ns_clip_to_row (w, row, -1, NULL); + ns_clip_to_row (w, row, -1, NO); row->y = oldY; row->visible_height = oldVH; } @@ -2329,7 +2329,7 @@ ns_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, /* TODO: only needed in rare cases with last-resort font in HELLO.. should we do this more efficiently? */ - ns_clip_to_row (w, glyph_row, -1, NULL); + ns_clip_to_row (w, glyph_row, -1, NO); /* ns_focus (f, &r, 1); */ if (FRAME_LAST_INACTIVE (f)) @@ -2943,8 +2943,8 @@ ns_draw_glyph_string (struct glyph_string *s) (s->for_overlaps ? NS_DUMPGLYPH_FOREGROUND : NS_DUMPGLYPH_NORMAL)); ns_tmp_font = (struct nsfont_info *)s->face->font; - if (ns_tmp_font == ~0 || ns_tmp_font == NULL) - ns_tmp_font = FRAME_FONT (s->f); + if (ns_tmp_font == NULL) + ns_tmp_font = (struct nsfont_info *)FRAME_FONT (s->f); ns_tmp_font->font.driver->draw (s, 0, s->nchars, s->x, s->y, @@ -3078,8 +3078,9 @@ ns_read_socket (struct terminal *terminal, int expected, } /* Deal with pending service requests. */ else if (ns_pending_service_names && [ns_pending_service_names count] != 0 - && [NSApp fulfillService: [ns_pending_service_names objectAtIndex: 0] - withArg: [ns_pending_service_args objectAtIndex: 0]]) + && [(EmacsApp *) + NSApp fulfillService: [ns_pending_service_names objectAtIndex: 0] + withArg: [ns_pending_service_args objectAtIndex: 0]]) { [ns_pending_service_names removeObjectAtIndex: 0]; [ns_pending_service_args removeObjectAtIndex: 0]; @@ -3437,7 +3438,7 @@ x_wm_set_icon_position (struct frame *f, int icon_x, int icon_y) ========================================================================== */ -static Lisp_Object ns_string_to_lispmod (char *s) +static Lisp_Object ns_string_to_lispmod (const char *s) /* -------------------------------------------------------------------------- Convert modifier name to lisp symbol -------------------------------------------------------------------------- */ @@ -3876,7 +3877,7 @@ ns_term_init (Lisp_Object display_name) #ifdef NS_IMPL_COCOA { NSMenu *appMenu; - id item; + NSMenuItem *item; /* set up the application menu */ svcsMenu = [[EmacsMenu alloc] initWithTitle: @"Services"]; [svcsMenu setAutoenablesItems: NO]; @@ -4029,6 +4030,26 @@ ns_term_shutdown (int sig) } +/* Open a file (used by below, after going into queue read by ns_read_socket) */ +- (BOOL) openFile: (NSString *)fileName +{ + struct frame *emacsframe = SELECTED_FRAME (); + NSEvent *theEvent = [NSApp currentEvent]; + + if (!emacs_event) + return NO; + + emacs_event->kind = NON_ASCII_KEYSTROKE_EVENT; + emacs_event->code = KEY_NS_OPEN_FILE_LINE; + ns_input_file = append2 (ns_input_file, build_string ([fileName UTF8String])); + ns_input_line = Qnil; /* can be start or cons start,end */ + emacs_event->modifiers =0; + EV_TRAILER (theEvent); + + return YES; +} + + /* ************************************************************************** EmacsApp delegate implementation @@ -4080,26 +4101,6 @@ fprintf (stderr, "res = %d\n", EQ (res, Qt)); /* FIXME */ } -/* Open a file (used by below, after going into queue read by ns_read_socket) */ --(BOOL) openFile: (NSString *)fileName -{ - struct frame *emacsframe = SELECTED_FRAME (); - NSEvent *theEvent = [NSApp currentEvent]; - - if (!emacs_event) - return NO; - - emacs_event->kind = NON_ASCII_KEYSTROKE_EVENT; - emacs_event->code = KEY_NS_OPEN_FILE_LINE; - ns_input_file = append2 (ns_input_file, build_string ([fileName UTF8String])); - ns_input_line = Qnil; /* can be start or cons start,end */ - emacs_event->modifiers =0; - EV_TRAILER (theEvent); - - return YES; -} - - /* Notification from the Workspace to open a file */ - (BOOL)application: sender openFile: (NSString *)file { @@ -4131,7 +4132,7 @@ fprintf (stderr, "res = %d\n", EQ (res, Qt)); /* FIXME */ NSString *file; while ((file = [files nextObject]) != nil) [ns_pending_files addObject: file]; - return YES; + [self replyToOpenOrPrint: NSApplicationDelegateReplySuccess]; } /* TODO: these may help w/IO switching btwn terminal and NSApp */ @@ -4359,7 +4360,7 @@ extern void update_window_cursor (struct window *w, int on); NSView most recently updated (I guess), which is not the correct one. UPDATE: After multi-TTY merge this happens even w/o NO_SOCK_SIGIO */ if ([[theEvent window] isKindOfClass: [EmacsWindow class]]) - [[(EmacsView *)[theEvent window] delegate] keyDown: theEvent]; + [(EmacsView *)[[theEvent window] delegate] keyDown: theEvent]; return; } @@ -4638,9 +4639,9 @@ if (NS_KEYLOG) NSLog (@"firstRectForCharRange request"); return rect; } -- (long)conversationIdentifier +- (NSInteger)conversationIdentifier { - return (long)self; + return (NSInteger)self; } /* TODO: below here not yet implemented correctly, but may not be needed */ @@ -5239,7 +5240,8 @@ if (NS_KEYLOG) NSLog (@"attributedSubstringFromRange request"); context_menu_value = [sender tag]; else find_and_call_menu_selection (emacsframe, emacsframe->menu_bar_items_used, - emacsframe->menu_bar_vector, [sender tag]); + emacsframe->menu_bar_vector, + (void *)[sender tag]); ns_send_appdefined (-1); return self; } @@ -6156,6 +6158,7 @@ static void selectItemWithTag (NSPopUpButton *popup, int tag) /* ========================================================================== Font-related functions; these used to be in nsfaces.m + The XLFD functions (115 lines) are an abomination that should be removed. ========================================================================== */ @@ -6204,141 +6207,9 @@ x_new_font (struct frame *f, Lisp_Object font_object, int fontset) } -Lisp_Object -ns_list_fonts (FRAME_PTR f, Lisp_Object pattern, int size, int maxnames) -/* -------------------------------------------------------------------------- - This is used by the xfaces system. It is expected to speak XLFD. - -------------------------------------------------------------------------- */ -{ - Lisp_Object list = Qnil, - rpattern, - key, - tem, - args[2]; - struct re_pattern_buffer *bufp; - id fm = [NSFontManager sharedFontManager]; - NSEnumerator *fenum, *senum; - NSArray *membInfo; - NSString *fontname; - const char *xlfdName; - char *pattFam; - char *patt; - NSString *famName; - - NSTRACE (ns_list_fonts); - - CHECK_STRING (pattern); - patt = SDATA (pattern); - -#if 0 -/* temporary: for font_backend, we use fontsets, and when these are defined, - the old XLFD-based system is used; eventually this will be replaced by - backend code, but for now we allow specs that are just family names */ - /* if pattern is not XLFD, panic now */ - if (patt[0] != '-') - error ("ns_list_fonts: X font name (XLFD) expected."); - - /* if unicode encoding not requested, also die */ - if (!strstr (patt, "iso10646") && patt[strlen (patt)-3] != '*') - return Qnil; -#endif /* 0 */ - - key = f ? Fcons (pattern, make_number (maxnames)) : Qnil; - tem = f ? XCDR (FRAME_NS_DISPLAY_INFO (f)->name_list_element) : Qnil; - - /* See if we cached the result for this particular query. - The cache is an alist of the form: - ((((PATTERN . MAXNAMES) FONTNAME) ...) ...) - */ - if (f && !NILP (list = Fassoc (key, tem))) - { - list = Fcdr_safe (list); - /* We have a cached list. Don't have to get the list again. */ - if (!NILP (list)) - return list; - } - - if (patt[0] != '-') - pattFam = patt; - else - pattFam = ns_xlfd_to_fontname (patt); - /* XXX: '*' at beginning matches literally.. */ - if (pattFam[0] == '*') - pattFam[0] = '.'; - - /* must start w/family name, but can have other stuff afterwards - (usually bold and italic specifiers) */ - args[0] = build_string ("^"); - args[1] = build_string (pattFam); - rpattern = Fconcat (2, args); - bufp = compile_pattern (rpattern, 0, Vascii_canon_table, 0, 0); - - list = Qnil; - fenum = [[fm availableFontFamilies] objectEnumerator]; - while ( (famName = [fenum nextObject]) ) - { - NSMutableString *tmp = [famName mutableCopy]; - const char *fname; - NSRange r; - - /* remove spaces, to look like postscript name */ - while ((r = [tmp rangeOfString: @" "]).location != NSNotFound) - [tmp deleteCharactersInRange: r]; - - fname = [tmp UTF8String]; - int len = strlen (fname); - BOOL foundItal; - const char *synthItalFont; - - if (re_search (bufp, fname, len, 0, len, 0) >= 0) - { - /* Found a family. Add all variants. If we have no italic variant, - add a synthItal. */ - senum =[[fm availableMembersOfFontFamily: famName] objectEnumerator]; - foundItal = NO; - synthItalFont = NULL; - while (membInfo = [senum nextObject]) - { - xlfdName - = ns_fontname_to_xlfd ([[membInfo objectAtIndex: 0] - UTF8String]); - list = Fcons (build_string (xlfdName), list); - if (!synthItalFont) - { - NSString *synthName - = [[membInfo objectAtIndex: 0] - stringByAppendingString: @"-synthItal"]; - synthItalFont = [synthName UTF8String]; - } - else if ([[membInfo objectAtIndex: 3] intValue] - & NSItalicFontMask) - foundItal = YES; - } - if (foundItal == NO) - { - xlfdName = ns_fontname_to_xlfd (synthItalFont); - list = Fcons (build_string (xlfdName), list); - } - } - [tmp release]; - } - - /* fallback */ - if (XFASTINT (Flength (list)) == 0) - list = Fcons (build_string (ns_fontname_to_xlfd ("Monaco")), list); - - /* store result in cache */ - if (f != NULL) - XCDR_AS_LVALUE (FRAME_NS_DISPLAY_INFO (f)->name_list_element) - = Fcons (Fcons (key, list), - XCDR (FRAME_NS_DISPLAY_INFO (f)->name_list_element)); - return list; -} - - /* XLFD: -foundry-family-weight-slant-swidth-adstyle-pxlsz-ptSz-resx-resy-spc-avgWidth-rgstry-encoding */ -const char * +static const char * ns_font_to_xlfd (NSFont *nsfont) /* -------------------------------------------------------------------------- Convert an NS font name to an X font name (XLFD). @@ -6347,7 +6218,7 @@ ns_font_to_xlfd (NSFont *nsfont) { NSFontManager *mgr = [NSFontManager sharedFontManager]; NSString *sname = [nsfont /*familyName*/fontName]; - char *famName = [sname UTF8String]; + char *famName = (char *)[sname UTF8String]; char *weightStr = [mgr fontNamed: sname hasTraits: NSBoldFontMask] ? "bold" : "medium"; char *slantStr = [mgr fontNamed: sname hasTraits: NSItalicFontMask] ? @@ -6358,7 +6229,7 @@ ns_font_to_xlfd (NSFont *nsfont) int i, len; /* change '-' to '$' to avoid messing w/XLFD separator */ - for (len =strlen (famName), i =0; i. */ #define x_display_info w32_display_info #define FRAME_X_FONT_TABLE FRAME_W32_FONT_TABLE #define check_x check_w32 -#define x_list_fonts w32_list_fonts #define GCGraphicsExposures 0 #endif /* WINDOWSNT */ @@ -245,7 +244,6 @@ along with GNU Emacs. If not, see . */ #define x_display_info ns_display_info #define FRAME_X_FONT_TABLE FRAME_NS_FONT_TABLE #define check_x check_ns -#define x_list_fonts ns_list_fonts #define GCGraphicsExposures 0 #endif /* HAVE_NS */ @@ -557,14 +555,6 @@ static void uncache_face P_ ((struct face_cache *, struct face *)); static GC x_create_gc P_ ((struct frame *, unsigned long, XGCValues *)); static void x_free_gc P_ ((struct frame *, GC)); -#ifdef WINDOWSNT -extern Lisp_Object w32_list_fonts P_ ((struct frame *, Lisp_Object, int, int)); -#endif /* WINDOWSNT */ - -#ifdef HAVE_NS -extern Lisp_Object ns_list_fonts P_ ((struct frame *, Lisp_Object, int, int)); -#endif /* HAVE_NS */ - #ifdef USE_X_TOOLKIT static void x_update_menu_appearance P_ ((struct frame *)); diff --git a/src/xmenu.c b/src/xmenu.c index c89fe86e3da..199b19baec9 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -146,11 +146,6 @@ static int popup_activated_flag; static int next_menubar_widget_id; -#if defined (USE_X_TOOLKIT) || defined (USE_GTK) -extern widget_value *xmalloc_widget_value P_ ((void)); -extern widget_value *digest_single_submenu P_ ((int, int, int)); -#endif - /* This is set nonzero after the user activates the menu bar, and set to zero again after the menu bars are redisplayed by prepare_menu_bar. While it is nonzero, all calls to set_frame_menubar go deep.