diff --git a/darwin/menu.m b/darwin/menu.m index 52234751..b73055b8 100644 --- a/darwin/menu.m +++ b/darwin/menu.m @@ -3,7 +3,7 @@ // general TODO: release Objective-C objects in dealloc since we can't use ARC -// TODO menu finalization +static BOOL menusFinalized = NO; struct menu { uiMenu m; @@ -241,6 +241,9 @@ static uiMenuItem *newItem(struct menu *m, int type, const char *name) { struct menuItem *item; + if (menusFinalized) + complain("attempt to create a new menu item after menus have been finalized"); + item = uiNew(struct menuItem); item->type = type; @@ -317,6 +320,9 @@ uiMenu *uiNewMenu(const char *name) { struct menu *m; + if (menusFinalized) + complain("attempt to create a new menu after menus have been finalized"); + m = uiNew(struct menu); m->menu = [[NSMenu alloc] initWithTitle:toNSString(name)]; @@ -336,3 +342,8 @@ uiMenu *uiNewMenu(const char *name) return uiMenu(m); } + +void finalizeMenus(void) +{ + menusFinalized = YES; +} diff --git a/darwin/uipriv_darwin.h b/darwin/uipriv_darwin.h index 69f47c9c..2d8fb897 100644 --- a/darwin/uipriv_darwin.h +++ b/darwin/uipriv_darwin.h @@ -29,6 +29,7 @@ - (BOOL)validateMenuItem:(NSMenuItem *)item; - (NSMenu *)makeMenubar; @end +extern void finalizeMenus(void); // init.m @interface appDelegate : NSObject diff --git a/darwin/window.m b/darwin/window.m index c7d69327..0ae71bbb 100644 --- a/darwin/window.m +++ b/darwin/window.m @@ -182,6 +182,8 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar) struct window *w; NSView *binView; + finalizeMenus(); + w = uiNew(struct window); w->window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, (CGFloat) width, (CGFloat) height)