From 02b7fa92302bb1e44a38cf21d03b8b40b91f06fb Mon Sep 17 00:00:00 2001 From: Virgil Date: Tue, 31 Mar 2026 07:54:57 +0000 Subject: [PATCH] refactor(ax): dedupe window close events --- pkg/window/mock_platform.go | 7 ++++++- pkg/window/mock_test.go | 5 ++++- pkg/window/service.go | 1 - pkg/window/service_screen_test.go | 1 + pkg/window/service_test.go | 11 +++++++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/pkg/window/mock_platform.go b/pkg/window/mock_platform.go index 762f9d4..5322996 100644 --- a/pkg/window/mock_platform.go +++ b/pkg/window/mock_platform.go @@ -55,7 +55,12 @@ func (w *MockWindow) Maximise() { w.maximised = true func (w *MockWindow) Restore() { w.maximised = false } func (w *MockWindow) Minimise() {} func (w *MockWindow) Focus() { w.focused = true } -func (w *MockWindow) Close() { w.closed = true } +func (w *MockWindow) Close() { + w.closed = true + for _, handler := range w.eventHandlers { + handler(WindowEvent{Type: "close", Name: w.name}) + } +} func (w *MockWindow) Show() { w.visible = true } func (w *MockWindow) Hide() { w.visible = false } func (w *MockWindow) Fullscreen() {} diff --git a/pkg/window/mock_test.go b/pkg/window/mock_test.go index a932756..4b79fba 100644 --- a/pkg/window/mock_test.go +++ b/pkg/window/mock_test.go @@ -55,7 +55,10 @@ func (w *mockWindow) Maximise() { w.maximised = true func (w *mockWindow) Restore() { w.maximised = false } func (w *mockWindow) Minimise() { w.minimised = true } func (w *mockWindow) Focus() { w.focused = true } -func (w *mockWindow) Close() { w.closed = true } +func (w *mockWindow) Close() { + w.closed = true + w.emit(WindowEvent{Type: "close", Name: w.name}) +} func (w *mockWindow) Show() { w.visible = true } func (w *mockWindow) Hide() { w.visible = false } func (w *mockWindow) Fullscreen() { w.fullscreened = true } diff --git a/pkg/window/service.go b/pkg/window/service.go index 87b4f71..3a59e9c 100644 --- a/pkg/window/service.go +++ b/pkg/window/service.go @@ -275,7 +275,6 @@ func (s *Service) taskCloseWindow(name string) error { s.manager.State().CaptureState(platformWindow) platformWindow.Close() s.manager.Remove(name) - _ = s.Core().ACTION(ActionWindowClosed{Name: name}) return nil } diff --git a/pkg/window/service_screen_test.go b/pkg/window/service_screen_test.go index 9501e45..98f283d 100644 --- a/pkg/window/service_screen_test.go +++ b/pkg/window/service_screen_test.go @@ -27,6 +27,7 @@ func (m *mockScreenPlatform) GetPrimary() *screen.Screen { func newTestWindowServiceWithScreen(t *testing.T, screens []screen.Screen) (*Service, *core.Core) { t.Helper() + t.Setenv("XDG_CONFIG_HOME", t.TempDir()) c, err := core.New( core.WithService(screen.Register(&mockScreenPlatform{screens: screens})), diff --git a/pkg/window/service_test.go b/pkg/window/service_test.go index 806371b..db25a22 100644 --- a/pkg/window/service_test.go +++ b/pkg/window/service_test.go @@ -12,6 +12,8 @@ import ( func newTestWindowService(t *testing.T) (*Service, *core.Core) { t.Helper() + t.Setenv("XDG_CONFIG_HOME", t.TempDir()) + c, err := core.New( core.WithService(Register(newMockPlatform())), core.WithServiceLock(), @@ -108,9 +110,18 @@ func TestTaskCloseWindow_Good(t *testing.T) { _, c := newTestWindowService(t) _, _, _ = c.PERFORM(TaskOpenWindow{Window: Window{Name: "test"}}) + var closedCount int + c.RegisterAction(func(_ *core.Core, msg core.Message) error { + if _, ok := msg.(ActionWindowClosed); ok { + closedCount++ + } + return nil + }) + _, handled, err := c.PERFORM(TaskCloseWindow{Name: "test"}) require.NoError(t, err) assert.True(t, handled) + assert.Equal(t, 1, closedCount) // Verify window is removed result, _, _ := c.QUERY(QueryWindowByName{Name: "test"})