Skip to content

feat: Screen search, virtual desktop scrolling, task-view nav#5

Open
grantith wants to merge 20 commits intomainfrom
ignore-classes
Open

feat: Screen search, virtual desktop scrolling, task-view nav#5
grantith wants to merge 20 commits intomainfrom
ignore-classes

Conversation

@grantith
Copy link
Owner

Changelog

Added

  • Screen Search (super + .) with UIA-based clickable hints and a new screen_search config section.
  • UI Automation support via src/lib/UIA.ahk plus licensing documentation.
  • Command mode actions: m (move mode) and g (reapply desktop assignments).
  • Virtual desktop enhancements: switch curtain overlay, auto-assign windows to configured desktops, and focus debug logging.
  • Process-tree app matching, exclude_titles, and ignore_classes matching support.
  • Config watcher section (config_watch) with warnings for unknown config keys and a config warnings log/GUI.
  • docs/COMPILE.md build instructions and a new CHANGELOG.md.

Changed

  • Command mode is now hardwired to super + ; (removed reload-mode config).
  • Double-super opens Task View; h/j/k/l navigate Task View while it is open.
  • Close window hotkey moved to alt + q.
  • App cycle hotkeys swapped: super + c cycles across desktops; super + shift + c cycles current desktop.
  • Optional super + wheel desktop switching and super + alt + shift + wheel moving.
  • Window inspector now shows active column and supports pause/resume auto-refresh.
  • Window walker UI refreshes per monitor/DPI to fix clipping after resolution changes.
  • README/config examples updated for new hotkeys, matching options, and desktop behaviors.

Fixed

  • Window walker rendering issues after resolution changes.
  • Window matching reliability via cached metadata and PID snapshot lookups for off-desktop windows.

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.
… 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.
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment on lines +946 to +950
A_DetectHiddenWindows := true
if VirtualDesktopEnabled() {
desktop_num := GetWindowDesktopNum(hwnd)
if (desktop_num <= 0)
return

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment on lines +578 to +579
if !DllCall("dwmapi\DwmGetWindowAttribute", "ptr", hwnd, "int", 14, "int*", &cloaked, "int", 4)
return false

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge 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 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant