QuickPaneSetup-3.4.1-release
·
6 commits
to main
since this release
Fixed
- System-wide input lag while navigating. Everything that can touch a slow disk, the network, or cross-process COM now runs on one background worker (
WorkQueue) instead of the UI thread, which shares Explorer's input queue in Inside mode, so a dead network target or a busy Explorer can no longer freeze input across the desktop while CPU sits idle. This covers shortcut resolution, Shell.Application navigation and path queries, the Windows Recent scan, drive detail queries, existence probes, shell file operations from drops, and slow icon extraction. - Recent tracking no longer installs a global NAMECHANGE hook. That hook fired for nearly every control text change on the desktop and answered each with a cross-process COM enumeration; activation events plus a slow poll now do the same job for a fraction of the cost.
- The Windows Recent folder is scanned newest-first with a resolution budget, so a Recent folder holding hundreds of shortcuts costs only as much as the visible list.
- Pin, group, and recent rows never probe the disk while building. Existence and file-vs-folder facts come from a background probe cache (
PathStatus); unknown targets render optimistically and correct themselves moments later, dimming exactly like Explorer does when a share is gone. - Save/Open dialog panes no longer glitch after the dialog is dragged. A pure move fires a location event per pixel but needs no relayout (controls live in client coordinates), and those events used to trip the relayout back-off and permanently stop pane maintenance for that dialog. Back-off now also resets when the dialog really resizes.
- Dialog detection results are cached per window. Foreground changes and sweep passes no longer re-enumerate the child tree of every open dialog in every app (Photoshop's dialogs were enumerated on every focus change), and an unfamiliar picker is logged once instead of every time it takes focus.
- Every message sent into another app's dialog (navigation text, Enter, OK clicks) uses a timeout, so a host app that is busy saving can never hang QuickPane and, through the shared input queue, the shell.
- Unhandled exceptions are now logged to debug.log and dispatcher exceptions are contained, so crashes are visible and one bad event no longer silently kills the tray app. Missed window-destroy events are swept up, so lost hooks no longer leak panes.
- Group reorders are crash-safe. A reorder interrupted midway (locked folder, antivirus, crash) rolls back instead of stranding groups under temp names, and any temp names left by a hard crash are recovered on the next scan.
- Recents and groups change events always arrive on the UI thread, removing a race between the FileSystemWatcher thread and the pane.
- A navigation no longer rebuilds every section of every open sidebar; each section rebuilds only on its own data, coalesced to one rebuild per change burst.
- Settings saves no longer reload the group store (and its FileSystemWatcher) unless the groups folder actually changed.
- Drag-over highlight sticks no more: rows track the active drop target centrally, so highlight always clears when the drag moves on, drops, or leaves the pane.
Added
- File pins. Files can be pinned everywhere folders can: drop a file on a group, between pins, or on empty section space, or use the new "Add file..." menu item. File pins open the file on click, offer "Open containing folder", and show the file's own icon; recent files can be pinned directly as file pins.
- Drop-intent menu. Dropping a folder (no modifier) onto a pinned folder now asks: Move into, Copy into, Create shortcut inside, Pin to the group, or Cancel, because a silent default was moving folders people meant to pin. Files keep Explorer's silent semantics (move on same drive, copy across), and modifiers always act silently exactly like Explorer: Ctrl copies, Shift moves, Alt or Ctrl+Shift links.
- Dropping files or folders on empty Groups-section space pins them to the last group (creating a "Pinned" group when none exists), and the drag cursor shows the shortcut arrow wherever a drop will pin rather than move.
Changed
- Drive details (labels, free space, readiness) load from a cached snapshot and refresh in the background on device changes, so an unreachable mapped drive cannot stall pane rebuilds.
- Expanding a folder row enumerates its children on the worker and fills the subtree when ready, so expanding a slow or dead folder cannot freeze input.