diff --git a/.core/TODO.md b/.core/TODO.md index e69de29b..ab1751c7 100644 --- a/.core/TODO.md +++ b/.core/TODO.md @@ -0,0 +1,2 @@ +- @bug stubs/wails/pkg/application/application.go:73 — submenu items are not linked into the parent menu item, so submenu state is lost after AddSubmenu returns. +- @bug stubs/wails/pkg/application/browser_window.go:113 — several browser-window state transitions still return fixed defaults, so the stub does not fully reflect fullscreen, resize, or geometry changes. diff --git a/stubs/wails/pkg/application/browser_window.go b/stubs/wails/pkg/application/browser_window.go index 545ebf26..e8135a05 100644 --- a/stubs/wails/pkg/application/browser_window.go +++ b/stubs/wails/pkg/application/browser_window.go @@ -39,6 +39,7 @@ type BrowserWindow struct { id uint name string clientID string + visible bool } // NewBrowserWindow creates a browser window with the given ID and client ID. @@ -49,6 +50,7 @@ func NewBrowserWindow(id uint, clientID string) *BrowserWindow { id: id, name: fmt.Sprintf("browser-%d", id), clientID: clientID, + visible: true, } } @@ -83,7 +85,15 @@ func (browserWindow *BrowserWindow) handleDragAndDropMessage(filenames []string, func (browserWindow *BrowserWindow) HandleMessage(message string) {} func (browserWindow *BrowserWindow) HandleWindowEvent(identifier uint) {} func (browserWindow *BrowserWindow) Height() int { return 0 } -func (browserWindow *BrowserWindow) Hide() Window { return browserWindow } +func (browserWindow *BrowserWindow) Hide() Window { + if browserWindow == nil { + return nil + } + browserWindow.mu.Lock() + browserWindow.visible = false + browserWindow.mu.Unlock() + return browserWindow +} func (browserWindow *BrowserWindow) HideMenuBar() {} func (browserWindow *BrowserWindow) IsFocused() bool { return false } func (browserWindow *BrowserWindow) IsFullscreen() bool { return false } @@ -138,7 +148,15 @@ func (browserWindow *BrowserWindow) SetURL(url string) Window { return b func (browserWindow *BrowserWindow) SetZoom(magnification float64) Window { return browserWindow } -func (browserWindow *BrowserWindow) Show() Window { return browserWindow } +func (browserWindow *BrowserWindow) Show() Window { + if browserWindow == nil { + return nil + } + browserWindow.mu.Lock() + browserWindow.visible = true + browserWindow.mu.Unlock() + return browserWindow +} func (browserWindow *BrowserWindow) ShowMenuBar() {} func (browserWindow *BrowserWindow) Size() (int, int) { return 0, 0 } func (browserWindow *BrowserWindow) OpenDevTools() {} @@ -150,7 +168,14 @@ func (browserWindow *BrowserWindow) UnFullscreen() {} func (browserWindow *BrowserWindow) UnMaximise() {} func (browserWindow *BrowserWindow) UnMinimise() {} func (browserWindow *BrowserWindow) Width() int { return 0 } -func (browserWindow *BrowserWindow) IsVisible() bool { return true } +func (browserWindow *BrowserWindow) IsVisible() bool { + if browserWindow == nil { + return false + } + browserWindow.mu.RLock() + defer browserWindow.mu.RUnlock() + return browserWindow.visible +} func (browserWindow *BrowserWindow) Bounds() Rect { return Rect{} } func (browserWindow *BrowserWindow) SetBounds(bounds Rect) {} func (browserWindow *BrowserWindow) Zoom() {} diff --git a/stubs/wails/pkg/application/browser_window_test.go b/stubs/wails/pkg/application/browser_window_test.go index e94dde2c..6d4e7c0d 100644 --- a/stubs/wails/pkg/application/browser_window_test.go +++ b/stubs/wails/pkg/application/browser_window_test.go @@ -39,7 +39,9 @@ func TestBrowserWindow_NewBrowserWindow_Ugly(t *testing.T) { window := NewBrowserWindow(99, "client") assert.Same(t, window, window.Show()) + assert.True(t, window.IsVisible()) assert.Same(t, window, window.Hide()) + assert.False(t, window.IsVisible()) assert.Same(t, window, window.Fullscreen()) assert.Same(t, window, window.Maximise()) assert.Same(t, window, window.Minimise()) diff --git a/stubs/wails/pkg/application/events.go b/stubs/wails/pkg/application/events.go index c7b24354..b89f6e36 100644 --- a/stubs/wails/pkg/application/events.go +++ b/stubs/wails/pkg/application/events.go @@ -32,6 +32,12 @@ type ApplicationEvent struct { // // ctx := event.Context() func (e *ApplicationEvent) Context() *ApplicationEventContext { + if e == nil { + return nil + } + if e.ctx == nil { + e.ctx = newApplicationEventContext() + } return e.ctx } diff --git a/stubs/wails/pkg/application/events_test.go b/stubs/wails/pkg/application/events_test.go index cbc44bee..818f7aa1 100644 --- a/stubs/wails/pkg/application/events_test.go +++ b/stubs/wails/pkg/application/events_test.go @@ -47,7 +47,7 @@ func TestEvents_ApplicationEvent_Good(t *testing.T) { func TestEvents_ApplicationEvent_Bad(t *testing.T) { event := &ApplicationEvent{} - assert.Nil(t, event.Context()) + require.NotNil(t, event.Context()) assert.False(t, event.IsCancelled()) }