Skip to content

Commit 9058b3c

Browse files
committed
Prevent crash when display disappears during power switch
1 parent 2753ebe commit 9058b3c

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

main.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,11 @@ def _set_resolution() -> Optional[int]:
179179
f"set_resolution returned {res} for {adapter_name!r}; retrying after 10s"
180180
)
181181
await asyncio.sleep(10)
182-
_set_resolution()
182+
retry_res = _set_resolution()
183+
if retry_res not in (None, DISP_RESULTS.DISP_CHANGE_SUCCESSFUL):
184+
logging.warning(
185+
f"retry set_resolution returned {retry_res} for {adapter_name!r}"
186+
)
183187

184188

185189
async def switch_rate(
@@ -285,7 +289,13 @@ def _target_modes(state: bool) -> Dict[str, ScreenSettings]:
285289
}
286290

287291
async def _do_switch(state: bool) -> None:
292+
nonlocal display_map
288293
assert current_config is not None
294+
295+
# A monitor can disappear between the power event and this switch.
296+
# Refresh the snapshot so a disconnected adapter is not used.
297+
display_map = build_display_map()
298+
_refresh_tray_displays()
289299
targets = _target_modes(state)
290300
filtered_map = {mid: display_map[mid] for mid in targets if mid in display_map}
291301
await switch_rate(state, current_config, filtered_map)

0 commit comments

Comments
 (0)