Difference between revisions of "Cocoa Internals/Menu"

From Lazarus wiki
Jump to navigationJump to search
Line 11: Line 11:
 
===Application Menu===
 
===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.
 
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.
 +
==Application Menu Translation==
 +
The titles (caption) of the Application menus are stored as "resourcestring" and could be translated by a translation module.
  
 
==See Also==
 
==See Also==

Revision as of 04:52, 10 October 2021

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.

Application Menu Translation

The titles (caption) of the Application menus are stored as "resourcestring" and could be translated by a translation module.

See Also