diff --git a/v2/internal/frontend/desktop/darwin/AppDelegate.h b/v2/internal/frontend/desktop/darwin/AppDelegate.h index e2dd841c9..56399ee9f 100644 --- a/v2/internal/frontend/desktop/darwin/AppDelegate.h +++ b/v2/internal/frontend/desktop/darwin/AppDelegate.h @@ -17,6 +17,7 @@ @property bool startHidden; @property bool startFullscreen; @property (retain) WailsWindow* mainWindow; +@property int activationPolicy; @end diff --git a/v2/internal/frontend/desktop/darwin/AppDelegate.m b/v2/internal/frontend/desktop/darwin/AppDelegate.m index c985fb9b6..0f47caf67 100644 --- a/v2/internal/frontend/desktop/darwin/AppDelegate.m +++ b/v2/internal/frontend/desktop/darwin/AppDelegate.m @@ -26,7 +26,8 @@ } - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - processNotification(0); // Notify Go + processNotification(0); // Notify Go + [NSApp setActivationPolicy:self.activationPolicy]; [NSApp activateIgnoringOtherApps:YES]; if ( self.startFullscreen ) { NSWindowCollectionBehavior behaviour = [self.mainWindow collectionBehavior]; diff --git a/v2/internal/frontend/desktop/darwin/Application.h b/v2/internal/frontend/desktop/darwin/Application.h index 363461107..91d04ba90 100644 --- a/v2/internal/frontend/desktop/darwin/Application.h +++ b/v2/internal/frontend/desktop/darwin/Application.h @@ -18,7 +18,7 @@ #define WindowStartsFullscreen 3 WailsContext* Create(const char* title, int width, int height, int frameless, int resizable, int fullscreen, int fullSizeContent, int hideTitleBar, int titlebarAppearsTransparent, int hideTitle, int useToolbar, int hideToolbarSeparator, int webviewIsTransparent, int alwaysOnTop, int hideWindowOnClose, const char *appearance, int windowIsTranslucent, int debug, int windowStartState, int startsHidden, int minWidth, int minHeight, int maxWidth, int maxHeight); -void Run(void*, const char* url); +void Run(void *inctx, const char* url, int activationPolicy); void SetTitle(void* ctx, const char *title); void Center(void* ctx); diff --git a/v2/internal/frontend/desktop/darwin/Application.m b/v2/internal/frontend/desktop/darwin/Application.m index 2f82c5aad..131ef2353 100644 --- a/v2/internal/frontend/desktop/darwin/Application.m +++ b/v2/internal/frontend/desktop/darwin/Application.m @@ -19,7 +19,7 @@ WailsContext* Create(const char* title, int width, int height, int frameless, in WailsContext *result = [WailsContext new]; result.debug = debug; - + if ( windowStartState == WindowStartsFullscreen ) { fullscreen = 1; } @@ -27,7 +27,7 @@ WailsContext* Create(const char* title, int width, int height, int frameless, in [result CreateWindow:width :height :frameless :resizable :fullscreen :fullSizeContent :hideTitleBar :titlebarAppearsTransparent :hideTitle :useToolbar :hideToolbarSeparator :webviewIsTransparent :hideWindowOnClose :safeInit(appearance) :windowIsTranslucent :minWidth :minHeight :maxWidth :maxHeight]; [result SetTitle:safeInit(title)]; [result Center]; - + switch( windowStartState ) { case WindowStartsMaximised: [result.mainWindow zoom:nil]; @@ -344,12 +344,11 @@ void AppendSeparator(void* inMenu) { [menu AppendSeparator]; } - - -void Run(void *inctx, const char* url) { +void Run(void *inctx, const char* url, int activationPolicy) { WailsContext *ctx = (__bridge WailsContext*) inctx; NSApplication *app = [NSApplication sharedApplication]; AppDelegate* delegate = [AppDelegate new]; + delegate.activationPolicy = activationPolicy; [app setDelegate:(id)delegate]; ctx.appdelegate = delegate; delegate.mainWindow = ctx.mainWindow; diff --git a/v2/internal/frontend/desktop/darwin/WailsContext.h b/v2/internal/frontend/desktop/darwin/WailsContext.h index b51d62f47..f4b4ca848 100644 --- a/v2/internal/frontend/desktop/darwin/WailsContext.h +++ b/v2/internal/frontend/desktop/darwin/WailsContext.h @@ -23,6 +23,7 @@ @property NSSize userMinSize; @property NSSize userMaxSize; +@property int activationPolicy; - (BOOL) canBecomeKeyWindow; - (void) applyWindowConstraints; diff --git a/v2/internal/frontend/desktop/darwin/frontend.go b/v2/internal/frontend/desktop/darwin/frontend.go index 492d42b32..fa34bce6f 100644 --- a/v2/internal/frontend/desktop/darwin/frontend.go +++ b/v2/internal/frontend/desktop/darwin/frontend.go @@ -178,7 +178,11 @@ func (f *Frontend) Run(ctx context.Context) error { f.frontendOptions.OnStartup(f.ctx) } }() - mainWindow.Run(f.startURL.String()) + var activationPolicy C.int + if f.frontendOptions != nil && f.frontendOptions.Mac != nil { + activationPolicy = C.int(f.frontendOptions.Mac.ActivationPolicy) + } + mainWindow.Run(f.startURL.String(), activationPolicy) return nil } diff --git a/v2/internal/frontend/desktop/darwin/window.go b/v2/internal/frontend/desktop/darwin/window.go index 2437b5126..38cfb0b14 100644 --- a/v2/internal/frontend/desktop/darwin/window.go +++ b/v2/internal/frontend/desktop/darwin/window.go @@ -123,9 +123,9 @@ func (w *Window) Center() { C.Center(w.context) } -func (w *Window) Run(url string) { +func (w *Window) Run(url string, activationPolicy C.int) { _url := C.CString(url) - C.Run(w.context, _url) + C.Run(w.context, _url, activationPolicy) C.free(unsafe.Pointer(_url)) } diff --git a/v2/pkg/options/mac/mac.go b/v2/pkg/options/mac/mac.go index 033cfd1a2..2f574607f 100644 --- a/v2/pkg/options/mac/mac.go +++ b/v2/pkg/options/mac/mac.go @@ -1,12 +1,12 @@ package mac -//type ActivationPolicy int -// -//const ( -// NSApplicationActivationPolicyRegular ActivationPolicy = 0 -// NSApplicationActivationPolicyAccessory ActivationPolicy = 1 -// NSApplicationActivationPolicyProhibited ActivationPolicy = 2 -//) +type ActivationPolicy int + +const ( + NSApplicationActivationPolicyRegular ActivationPolicy = 0 + NSApplicationActivationPolicyAccessory ActivationPolicy = 1 + NSApplicationActivationPolicyProhibited ActivationPolicy = 2 +) type AboutInfo struct { Title string @@ -20,7 +20,7 @@ type Options struct { Appearance AppearanceType WebviewIsTransparent bool WindowIsTranslucent bool - //ActivationPolicy ActivationPolicy - About *AboutInfo + About *AboutInfo + ActivationPolicy ActivationPolicy //URLHandlers map[string]func(string) }