diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm index 6ee86b21ae..cf6503b61c 100644 --- a/native/Avalonia.Native/src/OSX/main.mm +++ b/native/Avalonia.Native/src/OSX/main.mm @@ -3,7 +3,7 @@ #include "common.h" static NSString* s_appTitle = @"Avalonia"; - +static int disableSetProcessName; // Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -101,7 +101,9 @@ void SetProcessName(NSString* appTitle) { class MacOptions : public ComSingleObject { + public: + FORWARD_IUNKNOWN() virtual HRESULT SetApplicationTitle(char* utf8String) override @@ -111,11 +113,17 @@ public: @autoreleasepool { auto appTitle = [NSString stringWithUTF8String: utf8String]; - - [[NSProcessInfo processInfo] setProcessName:appTitle]; - - - SetProcessName(appTitle); + if (disableSetProcessName == 0) + { + [[NSProcessInfo processInfo] setProcessName:appTitle]; + + SetProcessName(appTitle); + } + if (disableSetProcessName == 1) + { + auto rootMenu = [NSApp mainMenu]; + [rootMenu setTitle:appTitle]; + } return S_OK; } @@ -133,6 +141,17 @@ public: } } + virtual HRESULT SetDisableSetProcessName(int disable) override + { + START_COM_CALL; + + @autoreleasepool + { + disableSetProcessName = disable; + return S_OK; + } + } + }; /// See "Using POSIX Threads in a Cocoa Application" section here: diff --git a/samples/ControlCatalog.NetCore/Program.cs b/samples/ControlCatalog.NetCore/Program.cs index b1bacc6483..d0ea7ac85e 100644 --- a/samples/ControlCatalog.NetCore/Program.cs +++ b/samples/ControlCatalog.NetCore/Program.cs @@ -115,6 +115,14 @@ namespace ControlCatalog.NetCore UseDBusMenu = true, EnableIme = true }) + .With(new MacOSPlatformOptions() + { + DisableSetProcessName = true + }) + .With(new AvaloniaNativePlatformOptions() + { + AvaloniaNativeLibraryPath = "/Users/daniilpavliuchyk/Library/Developer/Xcode/DerivedData/Avalonia.Native.OSX-hchxgrlrewlcvufcdcugzgajjpdt/Build/Products/Debug/libAvalonia.Native.OSX.dylib" + }) .UseSkia() .AfterSetup(builder => { diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs index b45fe5559b..acb538268f 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs @@ -102,6 +102,7 @@ namespace Avalonia.Native var macOpts = AvaloniaLocator.Current.GetService() ?? new MacOSPlatformOptions(); _factory.MacOptions.SetShowInDock(macOpts.ShowInDock ? 1 : 0); + _factory.MacOptions.SetDisableSetProcessName(macOpts.DisableSetProcessName ? 1 : 0); } AvaloniaLocator.CurrentMutable diff --git a/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs b/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs index 61889aa9e4..baa2018183 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs @@ -83,5 +83,7 @@ namespace Avalonia /// Gets or sets a value indicating whether the native macOS menu bar will be enabled for the application. /// public bool DisableNativeMenus { get; set; } + + public bool DisableSetProcessName { get; set; } } } diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl index a98d213887..b94b8ec0f4 100644 --- a/src/Avalonia.Native/avn.idl +++ b/src/Avalonia.Native/avn.idl @@ -599,6 +599,7 @@ interface IAvnMacOptions : IUnknown { HRESULT SetShowInDock(int show); HRESULT SetApplicationTitle(char* utf8string); + HRESULT SetDisableSetProcessName(int disable); } [uuid(04c1b049-1f43-418a-9159-cae627ec1367)]