diff --git a/v2/internal/ffenestri/ffenestri_darwin.c b/v2/internal/ffenestri/ffenestri_darwin.c index 3193ab55..254cfd2f 100644 --- a/v2/internal/ffenestri/ffenestri_darwin.c +++ b/v2/internal/ffenestri/ffenestri_darwin.c @@ -79,6 +79,7 @@ struct Application { id mouseEvent; id mouseDownMonitor; id mouseUpMonitor; + int activationPolicy; // Window Data const char *title; @@ -253,7 +254,7 @@ void Hide(struct Application *app) { if( app->shuttingDown ) return; ON_MAIN_THREAD( - msg(app->application, s("hide:")) + msg(app->application, s("hide:")); ); } @@ -1112,7 +1113,7 @@ void processDecorations(struct Application *app) { void createApplication(struct Application *app) { id application = msg(c("NSApplication"), s("sharedApplication")); app->application = application; - msg(application, s("setActivationPolicy:"), 0); + msg(application, s("setActivationPolicy:"), app->activationPolicy); } void DarkModeEnabled(struct Application *app, const char *callbackID) { @@ -1812,6 +1813,10 @@ void Run(struct Application *app, int argc, char **argv) { MEMFREE(internalCode); } +void SetActivationPolicy(struct Application* app, int policy) { + app->activationPolicy = policy; +} + // Quit will stop the cocoa application and free up all the memory // used by the application void Quit(struct Application *app) { @@ -1883,6 +1888,8 @@ void* NewApplication(const char *title, int width, int height, int resizable, in result->shuttingDown = false; + result->activationPolicy = NSApplicationActivationPolicyRegular; + return (void*) result; } diff --git a/v2/internal/ffenestri/ffenestri_darwin.go b/v2/internal/ffenestri/ffenestri_darwin.go index e33fcc06..b44be0f8 100644 --- a/v2/internal/ffenestri/ffenestri_darwin.go +++ b/v2/internal/ffenestri/ffenestri_darwin.go @@ -48,6 +48,9 @@ func (a *Application) processPlatformSettings() error { C.SetAppearance(a.app, a.string2CString(string(mac.Appearance))) } + // Set activation policy + C.SetActivationPolicy(a.app, C.int(mac.ActivationPolicy)) + // Check if the webview should be transparent if mac.WebviewIsTransparent { C.WebviewIsTransparent(a.app) diff --git a/v2/internal/ffenestri/ffenestri_darwin.h b/v2/internal/ffenestri/ffenestri_darwin.h index b930d66b..83219c03 100644 --- a/v2/internal/ffenestri/ffenestri_darwin.h +++ b/v2/internal/ffenestri/ffenestri_darwin.h @@ -66,6 +66,10 @@ #define NSControlStateValueOff 0 #define NSControlStateValueOn 1 +#define NSApplicationActivationPolicyRegular 0 +#define NSApplicationActivationPolicyAccessory 1 +#define NSApplicationActivationPolicyProhibited 2 + // Unbelievably, if the user swaps their button preference // then right buttons are reported as left buttons #define NSEventMaskLeftMouseDown 1 << 1 @@ -110,6 +114,8 @@ void SetTray(struct Application* app, const char *, const char *, const char *); //void SetContextMenus(struct Application* app, const char *); void AddTrayMenu(struct Application* app, const char *); +void SetActivationPolicy(struct Application* app, int policy); + void* lookupStringConstant(id constantName); #endif \ No newline at end of file diff --git a/v2/pkg/options/mac/mac.go b/v2/pkg/options/mac/mac.go index 3e0a8507..3108a6d6 100644 --- a/v2/pkg/options/mac/mac.go +++ b/v2/pkg/options/mac/mac.go @@ -2,6 +2,14 @@ package mac import "github.com/wailsapp/wails/v2/pkg/menu" +type ActivationPolicy int + +const ( + NSApplicationActivationPolicyRegular ActivationPolicy = 0 + NSApplicationActivationPolicyAccessory ActivationPolicy = 1 + NSApplicationActivationPolicyProhibited ActivationPolicy = 2 +) + // Options are options specific to Mac type Options struct { TitleBar *TitleBar @@ -11,4 +19,5 @@ type Options struct { Menu *menu.Menu TrayMenus []*menu.TrayMenu ContextMenus []*menu.ContextMenu + ActivationPolicy ActivationPolicy }