@@ -60,30 +60,52 @@ func (a *App) handleScreenParametersChange() {
6060 defer func () { a .screenChangeProcessing = false }()
6161
6262 a .logger .Info ("Screen parameters changed; adjusting overlays" )
63- // Only act if grid is enabled
63+
64+ // Handle grid overlay
6465 if a .config .Grid .Enabled && a .gridCtx != nil && a .gridCtx .gridOverlay != nil {
6566 // If grid mode is not active, mark for refresh on next activation
6667 if a .currentMode != ModeGrid {
6768 a .gridOverlayNeedsRefresh = true
68- return
69- }
69+ } else {
70+ // Grid mode is active - resize the existing overlay window to match new screen bounds
71+ gridOverlay := * a .gridCtx .gridOverlay
7072
71- // Grid mode is active - resize the existing overlay window to match new screen bounds
72- gridOverlay := * a . gridCtx . gridOverlay
73+ // Resize overlay window to current active screen (where mouse is)
74+ gridOverlay . ResizeToActiveScreenSync ()
7375
74- // Resize overlay window to current active screen (where mouse is)
75- gridOverlay . ResizeToActiveScreen ()
76-
77- // Give the UI thread a moment to complete the resize
78- time . Sleep ( 150 * time . Millisecond )
76+ // Regenerate the grid cells with updated screen bounds
77+ if err := a . setupGrid ( a . gridCtx . currentAction ); err != nil {
78+ a . logger . Error ( "Failed to refresh grid after screen change" , zap . Error ( err ))
79+ return
80+ }
7981
80- // Regenerate the grid cells with updated screen bounds
81- if err := a .setupGrid (a .gridCtx .currentAction ); err != nil {
82- a .logger .Error ("Failed to refresh grid after screen change" , zap .Error (err ))
83- return
82+ a .logger .Info ("Grid overlay resized and regenerated for new screen bounds" )
8483 }
84+ }
8585
86- a .logger .Info ("Grid overlay resized and regenerated for new screen bounds" )
86+ // Handle hint overlay
87+ if a .config .Hints .Enabled && a .hintOverlay != nil {
88+ // If hints mode is not active, mark for refresh on next activation
89+ if a .currentMode != ModeHints {
90+ a .hintOverlayNeedsRefresh = true
91+ } else {
92+ // Hints mode is active - resize the overlay and regenerate hints
93+ a .hintOverlay .ResizeToActiveScreenSync ()
94+
95+ // Regenerate hints for current action
96+ a .updateRolesForCurrentApp ()
97+ elements := a .collectElementsForAction (a .currentAction )
98+ if len (elements ) > 0 {
99+ if err := a .setupHints (elements , a .currentAction ); err != nil {
100+ a .logger .Error ("Failed to refresh hints after screen change" , zap .Error (err ))
101+ return
102+ }
103+ a .logger .Info ("Hint overlay resized and regenerated for new screen bounds" )
104+ } else {
105+ a .logger .Warn ("No elements found after screen change" )
106+ a .exitMode ()
107+ }
108+ }
87109 }
88110}
89111
0 commit comments