Browse Source

Merge pull request #9085 from AvaloniaUI/disableSetProcessName-feature

Disable set process name feature for MacOS
pull/9343/head
Dan Walmsley 3 years ago
committed by GitHub
parent
commit
041ac60fda
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      native/Avalonia.Native/src/OSX/app.mm
  2. 2
      native/Avalonia.Native/src/OSX/common.h
  3. 41
      native/Avalonia.Native/src/OSX/main.mm
  4. 2
      src/Avalonia.Native/AvaloniaNativePlatform.cs
  5. 8
      src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs
  6. 2
      src/Avalonia.Native/avn.idl

11
native/Avalonia.Native/src/OSX/app.mm

@ -95,11 +95,14 @@ ComPtr<IAvnApplicationEvents> _events;
} }
@end @end
extern void InitializeAvnApp(IAvnApplicationEvents* events) extern void InitializeAvnApp(IAvnApplicationEvents* events, bool disableAppDelegate)
{ {
NSApplication* app = [AvnApplication sharedApplication]; if(!disableAppDelegate)
id delegate = [[AvnAppDelegate alloc] initWithEvents:events]; {
[app setDelegate:delegate]; NSApplication* app = [AvnApplication sharedApplication];
id delegate = [[AvnAppDelegate alloc] initWithEvents:events];
[app setDelegate:delegate];
}
} }
HRESULT AvnApplicationCommands::HideApp() HRESULT AvnApplicationCommands::HideApp()

2
native/Avalonia.Native/src/OSX/common.h

@ -32,7 +32,7 @@ extern void SetServicesMenu (IAvnMenu* menu);
extern IAvnMenu* GetAppMenu (); extern IAvnMenu* GetAppMenu ();
extern NSMenuItem* GetAppMenuItem (); extern NSMenuItem* GetAppMenuItem ();
extern void InitializeAvnApp(IAvnApplicationEvents* events); extern void InitializeAvnApp(IAvnApplicationEvents* events, bool disableAppDelegate);
extern NSApplicationActivationPolicy AvnDesiredActivationPolicy; extern NSApplicationActivationPolicy AvnDesiredActivationPolicy;
extern NSPoint ToNSPoint (AvnPoint p); extern NSPoint ToNSPoint (AvnPoint p);
extern NSRect ToNSRect (AvnRect r); extern NSRect ToNSRect (AvnRect r);

41
native/Avalonia.Native/src/OSX/main.mm

@ -3,6 +3,8 @@
#include "common.h" #include "common.h"
static NSString* s_appTitle = @"Avalonia"; static NSString* s_appTitle = @"Avalonia";
static int disableSetProcessName = 0;
static bool disableAppDelegate = false;
// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
@ -111,11 +113,17 @@ public:
@autoreleasepool @autoreleasepool
{ {
auto appTitle = [NSString stringWithUTF8String: utf8String]; auto appTitle = [NSString stringWithUTF8String: utf8String];
if (disableSetProcessName == 0)
[[NSProcessInfo processInfo] setProcessName:appTitle]; {
[[NSProcessInfo processInfo] setProcessName:appTitle];
SetProcessName(appTitle); SetProcessName(appTitle);
}
if (disableSetProcessName == 1)
{
auto rootMenu = [NSApp mainMenu];
[rootMenu setTitle:appTitle];
}
return S_OK; return S_OK;
} }
@ -133,6 +141,27 @@ public:
} }
} }
virtual HRESULT SetDisableSetProcessName(int disable) override
{
START_COM_CALL;
@autoreleasepool
{
disableSetProcessName = disable;
return S_OK;
}
}
virtual HRESULT SetDisableAppDelegate(int disable) override
{
START_COM_CALL;
@autoreleasepool {
disableAppDelegate = disable;
return S_OK;
}
}
}; };
/// See "Using POSIX Threads in a Cocoa Application" section here: /// See "Using POSIX Threads in a Cocoa Application" section here:
@ -175,7 +204,7 @@ public:
@autoreleasepool{ @autoreleasepool{
[[ThreadingInitializer new] do]; [[ThreadingInitializer new] do];
} }
InitializeAvnApp(events); InitializeAvnApp(events, disableAppDelegate);
return S_OK; return S_OK;
}; };

2
src/Avalonia.Native/AvaloniaNativePlatform.cs

@ -103,6 +103,8 @@ namespace Avalonia.Native
var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>() ?? new MacOSPlatformOptions(); var macOpts = AvaloniaLocator.Current.GetService<MacOSPlatformOptions>() ?? new MacOSPlatformOptions();
_factory.MacOptions.SetShowInDock(macOpts.ShowInDock ? 1 : 0); _factory.MacOptions.SetShowInDock(macOpts.ShowInDock ? 1 : 0);
_factory.MacOptions.SetDisableSetProcessName(macOpts.DisableSetProcessName ? 1 : 0);
_factory.MacOptions.SetDisableAppDelegate(macOpts.DisableAvaloniaAppDelegate ? 1 : 0);
} }
AvaloniaLocator.CurrentMutable AvaloniaLocator.CurrentMutable

8
src/Avalonia.Native/AvaloniaNativePlatformExtensions.cs

@ -83,5 +83,13 @@ namespace Avalonia
/// Gets or sets a value indicating whether the native macOS menu bar will be enabled for the application. /// Gets or sets a value indicating whether the native macOS menu bar will be enabled for the application.
/// </summary> /// </summary>
public bool DisableNativeMenus { get; set; } public bool DisableNativeMenus { get; set; }
public bool DisableSetProcessName { get; set; }
/// <summary>
/// Gets or sets a value indicating whether Avalonia can install its own AppDelegate.
/// Disabling this can be useful in some scenarios like when running as a plugin inside an existing macOS application.
/// </summary>
public bool DisableAvaloniaAppDelegate { get; set; }
} }
} }

2
src/Avalonia.Native/avn.idl

@ -599,6 +599,8 @@ interface IAvnMacOptions : IUnknown
{ {
HRESULT SetShowInDock(int show); HRESULT SetShowInDock(int show);
HRESULT SetApplicationTitle(char* utf8string); HRESULT SetApplicationTitle(char* utf8string);
HRESULT SetDisableSetProcessName(int disable);
HRESULT SetDisableAppDelegate(int disable);
} }
[uuid(04c1b049-1f43-418a-9159-cae627ec1367)] [uuid(04c1b049-1f43-418a-9159-cae627ec1367)]

Loading…
Cancel
Save