handle click dock icon to reopen app for Mac
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
//go:build darwin
|
||||
|
||||
package ui
|
||||
|
||||
/*
|
||||
void installReopenDelegate();
|
||||
*/
|
||||
import "C"
|
||||
|
||||
import "fyne.io/fyne/v2"
|
||||
|
||||
var darwinAppDelegateReopenWindow fyne.Window
|
||||
|
||||
func installReopenHandler(w fyne.Window) {
|
||||
darwinAppDelegateReopenWindow = w
|
||||
C.installReopenDelegate()
|
||||
}
|
||||
|
||||
//export appReopened
|
||||
func appReopened() {
|
||||
if darwinAppDelegateReopenWindow == nil {
|
||||
return
|
||||
}
|
||||
go func() {
|
||||
fyne.Do(darwinAppDelegateReopenWindow.Show)
|
||||
}()
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
//go:build darwin
|
||||
|
||||
#import <AppKit/AppKit.h>
|
||||
|
||||
extern void appReopened(void);
|
||||
|
||||
@interface ReopenDelegate : NSObject<NSApplicationDelegate>
|
||||
@property (nonatomic, strong) id<NSApplicationDelegate> wrapped;
|
||||
@end
|
||||
|
||||
|
||||
@implementation ReopenDelegate
|
||||
|
||||
- (BOOL)applicationShouldHandleReopen:(NSApplication *)app
|
||||
hasVisibleWindows:(BOOL)hasVisible {
|
||||
if (!hasVisible) {
|
||||
appReopened();
|
||||
}
|
||||
if ([self.wrapped respondsToSelector:_cmd]) {
|
||||
return [self.wrapped applicationShouldHandleReopen:app
|
||||
hasVisibleWindows:hasVisible];
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)respondsToSelector:(SEL)sel {
|
||||
return [super respondsToSelector:sel] ||
|
||||
[self.wrapped respondsToSelector:sel];
|
||||
}
|
||||
|
||||
- (id)forwardingTargetForSelector:(SEL)sel {
|
||||
return [self.wrapped respondsToSelector:sel] ? self.wrapped : nil;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
void installReopenDelegate(void) {
|
||||
ReopenDelegate *d = [ReopenDelegate new];
|
||||
d.wrapped = [NSApp delegate];
|
||||
[NSApp setDelegate:d];
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
//go:build !darwin
|
||||
|
||||
package ui
|
||||
|
||||
import "fyne.io/fyne/v2"
|
||||
|
||||
func installReopenHandler(w fyne.Window) {
|
||||
}
|
||||
+2
-1
@@ -61,6 +61,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
|
||||
Window: fyneApp.NewWindow(displayAppName),
|
||||
theme: myTheme.NewMyTheme(&app.Config.Theme, app.ThemesDir()),
|
||||
}
|
||||
installReopenHandler(m.Window)
|
||||
fynetooltip.SetToolTipTextSizeName(myTheme.SizeNameSubText)
|
||||
|
||||
m.theme.NormalFont = app.Config.Application.FontNormalTTF
|
||||
@@ -184,7 +185,7 @@ func NewMainWindow(fyneApp fyne.App, appName, displayAppName, appVersion string,
|
||||
|
||||
m.Window.SetCloseIntercept(func() {
|
||||
m.SaveWindowSettings()
|
||||
if app.Config.Application.CloseToSystemTray && m.HaveSystemTray() {
|
||||
if runtime.GOOS == "darwin" || (app.Config.Application.CloseToSystemTray && m.HaveSystemTray()) {
|
||||
m.Window.Hide()
|
||||
} else {
|
||||
m.Window.Close()
|
||||
|
||||
Reference in New Issue
Block a user