From fc73d2bb719a7777ede23a8740ed50e2df3735d9 Mon Sep 17 00:00:00 2001 From: Snider Date: Wed, 15 Apr 2026 20:13:37 +0100 Subject: [PATCH] Add display window opacity websocket command --- pkg/display/display.go | 12 ++++++++++++ pkg/display/display_test.go | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/pkg/display/display.go b/pkg/display/display.go index e26f9fd9..17edc470 100644 --- a/pkg/display/display.go +++ b/pkg/display/display.go @@ -878,6 +878,18 @@ func (s *Service) handleWSMessage(msg WSMessage) core.Result { Primary: primary, Secondary: secondary, ScreenID: screenID, Ratio: ratio, }}, )) + case "window:set-opacity": + name, e := wsRequire(msg.Data, "name") + if e != nil { + return core.Result{Value: e, OK: false} + } + opacity, ok := msg.Data["opacity"].(float64) + if !ok { + return core.Result{Value: coreerr.E("display.handleWSMessage", "missing required field \"opacity\"", nil), OK: false} + } + return c.Action("window.setOpacity").Run(ctx, core.NewOptions( + core.Option{Key: "task", Value: window.TaskSetOpacity{Name: name, Opacity: opacity}}, + )) default: return core.Result{Value: coreerr.E("display.handleWSMessage", "unknown websocket action: "+msg.Action, nil), OK: false} } diff --git a/pkg/display/display_test.go b/pkg/display/display_test.go index a253c13b..30f93418 100644 --- a/pkg/display/display_test.go +++ b/pkg/display/display_test.go @@ -372,6 +372,26 @@ func TestSetWindowTitle_Good(t *testing.T) { assert.NoError(t, err) } +func TestHandleWSMessage_SetWindowOpacity_Good(t *testing.T) { + c := newTestConclave(t) + svc := core.MustServiceFor[*Service](c, "display") + _ = svc.OpenWindow(window.WithName("opacity-win")) + + r := svc.handleWSMessage(WSMessage{ + Action: "window:set-opacity", + Data: map[string]any{ + "name": "opacity-win", + "opacity": 0.35, + }, + }) + require.True(t, r.OK) + + info, err := svc.GetWindowInfo("opacity-win") + require.NoError(t, err) + require.NotNil(t, info) + assert.InDelta(t, 0.35, info.Opacity, 0.0001) +} + func TestGetFocusedWindow_Good(t *testing.T) { c := newTestConclave(t) svc := core.MustServiceFor[*Service](c, "display")