Cocoa Internals/Menu

From Lazarus wiki
Jump to navigationJump to search

Menu logic in macOS is different from the one in Windows (and other systems). The entire application only has one menu on top. That's it. There are no "per window" menus attached. (instead a window could use a Toolbar instead)

Basic Logic

  • The TMainMenu of the active window is set as the Application menu
  • If active window doesn't have TMainMenu the last active window with TMainMenu is still used
  • The Window running as modal disables the main menu, UNLESS it has its own main menu.

Implementation

used classes are

  • NSMenu
  • NSMenuItem

Application Menu

If there's TMainMenu allocated for LCL form, WSCocoa internally allocates the "Application" menu. The "Application" menu is macOS convention, that any app should do it. Since there's no logical concept of "Application" menu in LCL, CocoaWS simply always creates it for you.

See Also