Harden Wails application stubs
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run

This commit is contained in:
Snider 2026-04-17 19:13:49 +01:00
parent 7efba121a9
commit e67fa32827
5 changed files with 39 additions and 4 deletions

View file

@ -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.

View file

@ -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() {}

View file

@ -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())

View file

@ -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
}

View file

@ -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())
}