topic "MacOS menu support"; [i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class] [l288;2 $$2,2#27521748481378242620020725143825:desc] [0 $$3,0#96390100711032703541132217272105:end] [H6;0 $$4,0#05600065144404261032431302351956:begin] [i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item] [l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement] [l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param] [i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] [b42;2 $$9,9#13035079074754324216151401829390:normal] [2 $$0,0#00000000000000000000000000000000:Default] [{_}%EN-US [ {{10000@(113.42.0) [s0; [*@7;4 MacOS menu support]]}}&] [s0; &] [s0; U`+`+ applications without changes to support MacOS application menu will run with menu inside the window.&] [s0; &] [s0; To properly support MacOS menu, application needs to provide different code for MacOS (conditional compilation depending on PLATFORM`_COCOA macro). Usually, the changes are minimal, e.g. in Uword application the only change is&] [s0; &] [s0; [*C #ifdef PLATFORM`_COCOA]&] [s0; [*C -|SetMainMenu(THISBACK(MainMenu));]&] [s0; [*C #else]&] [s0; [*C -|AddFrame(menubar);]&] [s0; [*C #endif]&] [s0; &] [s0; replacing the call to AddFrame to add the main menu bar with the call to TopWindow`::SetMainMenu.&] [s0; &] [s0; Other possibility is to omit AddFrame when PLATFORM`_COCOA is defined and change menu setting code (which is called on any main menu changes) to something like&] [s0; &] [s0; [*C #ifdef PLATFORM`_COCOA]&] [s0; [*C -|SetMainMenu(THISBACK(MainMenu));]&] [s0; [*C #else]&] [s0; [*C -|menubar.Set(THISBACK(MainMenu));]&] [s0; [*C #endif]&] [s0; &] [s0; Another MacOS feature is the dock menu. This can be set using TopWindow`::WhenDockMenu.&] [s0; &] [s0;%- &] [ {{10000F(128)G(128)@1 [s0; [* TopWindow members for MacOS style menu support]]}}&] [s3;%- &] [s5;:Upp`:`:TopWindow`:`:WhenDockMenu:%- [_^Upp`:`:Event^ Event]_[* Whe nDockMenu]&] [s2; Represents application dock menu. Gets called if TopWindow is on top and user invokes the dock menu for application (e.g. by right`-click on application icon).&] [s3; &] [s4;%- &] [s5;:Upp`:`:TopWindow`:`:SetMainMenu`(Upp`:`:Event``):%- [@(0.0.255) voi d]_[* SetMainMenu]([_^Upp`:`:Event^ Event]_[*@3 menu])&] [s2; Sets the main application menu. This menu will be active if given toplevel TopWindow is on the top.&] [s0; ]]