diff --git a/v3/pkg/application/application_windows.go b/v3/pkg/application/application_windows.go index 8e6e23b13..2cf49bc80 100644 --- a/v3/pkg/application/application_windows.go +++ b/v3/pkg/application/application_windows.go @@ -3,11 +3,13 @@ package application import ( - "github.com/wailsapp/wails/v3/pkg/events" - "github.com/wailsapp/wails/v3/pkg/w32" + "os" "syscall" "unsafe" + "github.com/wailsapp/wails/v3/pkg/events" + "github.com/wailsapp/wails/v3/pkg/w32" + "github.com/samber/lo" ) @@ -217,7 +219,6 @@ func newPlatformApp(app *App) *windowsApp { os.Exit(1) } - result := &windowsApp{ parent: app, instance: w32.GetModuleHandle(""), diff --git a/v3/pkg/application/menuitem.go b/v3/pkg/application/menuitem.go index 9b0ff3724..ed7143e29 100644 --- a/v3/pkg/application/menuitem.go +++ b/v3/pkg/application/menuitem.go @@ -173,6 +173,8 @@ func newRole(role Role) *MenuItem { return newMinimizeMenuItem() case Zoom: return newZoomMenuItem() + case FullScreen: + return newFullScreenMenuItem() default: println("No support for role:", role) diff --git a/v3/pkg/application/menuitem_darwin.go b/v3/pkg/application/menuitem_darwin.go index c918c2ee3..eb252abf1 100644 --- a/v3/pkg/application/menuitem_darwin.go +++ b/v3/pkg/application/menuitem_darwin.go @@ -606,7 +606,7 @@ func newMinimizeMenuItem() *MenuItem { OnClick(func(ctx *Context) { currentWindow := globalApplication.CurrentWindow() if currentWindow != nil { - currentWindow.Minimize() + currentWindow.Minimise() } }) } @@ -620,3 +620,13 @@ func newZoomMenuItem() *MenuItem { } }) } + +func newFullScreenMenuItem() *MenuItem { + return newMenuItem("Fullscreen"). + OnClick(func(ctx *Context) { + currentWindow := globalApplication.CurrentWindow() + if currentWindow != nil { + currentWindow.Fullscreen() + } + }) +} diff --git a/v3/pkg/application/menuitem_windows.go b/v3/pkg/application/menuitem_windows.go index c8974c26f..caf07b850 100644 --- a/v3/pkg/application/menuitem_windows.go +++ b/v3/pkg/application/menuitem_windows.go @@ -177,3 +177,7 @@ func newMinimizeMenuItem() *MenuItem { func newZoomMenuItem() *MenuItem { panic("implement me") } + +func newFullScreenMenuItem() *MenuItem { + panic("implement me") +} diff --git a/v3/pkg/application/webview_window_darwin.go b/v3/pkg/application/webview_window_darwin.go index 5be173fea..60305c49a 100644 --- a/v3/pkg/application/webview_window_darwin.go +++ b/v3/pkg/application/webview_window_darwin.go @@ -703,6 +703,12 @@ static bool isFullScreen(void *window) { return (mask & NSWindowStyleMaskFullScreen) == NSWindowStyleMaskFullScreen; } +static bool isVisible(void *window) { + // get main window + WebviewWindow* nsWindow = (WebviewWindow*)window; + return (nsWindow.occlusionState & NSWindowOcclusionStateVisible) == NSWindowOcclusionStateVisible; +} + // windowSetFullScreen static void windowSetFullScreen(void *window, bool fullscreen) { if (isFullScreen(window)) { @@ -942,6 +948,14 @@ func (w *macosWebviewWindow) isFullscreen() bool { }) } +func (w *macosWebviewWindow) isNormal() bool { + return !w.isMinimised() && !w.isMaximised() && !w.isFullscreen() +} + +func (w *macosWebviewWindow) isVisible() bool { + return bool(C.isVisible(w.nsWindow)) +} + func (w *macosWebviewWindow) syncMainThreadReturningBool(fn func() bool) bool { var wg sync.WaitGroup wg.Add(1) @@ -1147,10 +1161,12 @@ func (w *macosWebviewWindow) run() { }) } +func (w *macosWebviewWindow) nativeWindowHandle() uintptr { + return uintptr(w.nsWindow) +} + func (w *macosWebviewWindow) setBackgroundColour(colour RGBA) { - if colour == nil { - return - } + C.windowSetBackgroundColour(w.nsWindow, C.int(colour.Red), C.int(colour.Green), C.int(colour.Blue), C.int(colour.Alpha)) }