feat: Screen search, virtual desktop scrolling, task-view nav#5
feat: Screen search, virtual desktop scrolling, task-view nav#5
Conversation
Guarded against destroyed guide GUIs so CornerRadius won’t throw “Gui has no window” if a guide gets destroyed between creation and sizing.
…ex: terminal applications which don't play nice with window title maintenance)
Refine app matching to use cached window metadata and PID-based lookups for off-desktop windows, plus debug logging for focus/match issues to track why targets are missed.
…oss vritual desktops
… spacebar can select - super+wheel switches desktops; super+alt+wheel no longer does
…malizing a human‑curated changelog. Add an optional switch curtain to mask Task View flicker, update virtual desktop hotkeys/config, and document new behaviors in README/CHANGELOG.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 6da7e1fa2c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| A_DetectHiddenWindows := true | ||
| if VirtualDesktopEnabled() { | ||
| desktop_num := GetWindowDesktopNum(hwnd) | ||
| if (desktop_num <= 0) | ||
| return |
There was a problem hiding this comment.
Restore hidden-window flag before returning from cache update
TryUpdateWindowMatchCache enables A_DetectHiddenWindows and can return early when GetWindowDesktopNum(hwnd) <= 0, but this path exits before restoring the original flag. After the first such window, hidden-window detection stays enabled globally, so later WinGet*/WinExist calls can start matching hidden windows and destabilize focus/cycling behavior.
Useful? React with 👍 / 👎.
| if !DllCall("dwmapi\DwmGetWindowAttribute", "ptr", hwnd, "int", 14, "int*", &cloaked, "int", 4) | ||
| return false |
There was a problem hiding this comment.
Treat DwmGetWindowAttribute success as non-error
DwmGetWindowAttribute returns 0 on success, but this condition negates the return value and immediately returns false in the success case. That means IsWindowCloaked effectively never reports cloaked windows, so Screen Search can include non-interactable cloaked surfaces and generate unusable hints.
Useful? React with 👍 / 👎.
| IsOverviewActive(*) { | ||
| ; Heuristic: Task View classes vary by Windows build, so allow a broader list. | ||
| static overview_classes := ["MultitaskingViewFrame", "TaskViewFrame", "XamlExplorerHostIslandWindow"] | ||
| static allowed_processes := Map("explorer.exe", true, "ShellExperienceHost.exe", true) |
There was a problem hiding this comment.
Lowercase ShellExperienceHost in overview allowlist
IsOverviewActive lowercases the detected process name before lookup, but the allowlist stores ShellExperienceHost.exe with mixed case. Because Map key lookups are case-sensitive, shellexperiencehost.exe will not match, so Task View instances hosted by ShellExperienceHost are skipped and the h/j/k/l overview navigation hotkeys do not trigger in that setup.
Useful? React with 👍 / 👎.
Changelog
Added
Changed
Fixed