Skip to content

PEARL 1.1.9

Latest

Choose a tag to compare

@Uncode7 Uncode7 released this 22 Aug 21:10

PEARL 1.1.9 — Preview Instant Switching Hotfix

This release is a focused hotfix on top of PEARL 1.1.8, specifically targeting the remaining latency in the Preview Tool when rapidly switching between multiple EVE Online clients.

The general PEARL 1.1.8 feature set remains unchanged. This update primarily improves the responsiveness of Preview hotkeys and removes unnecessary supervision from the critical foreground-switching path.

Update highlights

  • Preview hotkey switching is now effectively immediate on key press instead of waiting for the hotkey key to be released.
  • Rapid workflows such as 1 → click → 2 → click → 3 → click → 4 → click can now be performed without the previous artificial input delay.
  • Removed the Preview hotkey itself from the physical-input blocking gate when the hotkey does not use modifiers.
  • Ctrl, Alt, Shift, Windows key and unrelated physical inputs remain protected and can still block a foreground transition when necessary.
  • Preview switching remains isolated from the main PEARL/Qt event loop through the dedicated native switching runtime.
  • Removed normal foreground polling, periodic full-client scans and DWM watchdog activity from the critical switching path.
  • DWM recovery/polling is now treated as optional recovery functionality rather than part of normal client switching.
  • Preview direct/shared/cycle hotkeys now work globally by default, including while another desktop application such as a browser, Discord or Explorer is in foreground.
  • Minimized EVE clients remain valid hotkey targets and are restored before foreground activation.
  • Added persistent Preview refresh-rate options:
    • Off / Native DWM
    • 5 FPS
    • 12 FPS
    • 24 FPS
    • 30 FPS
    • 60 FPS
  • Default Preview refresh setting is 24 FPS.
  • The selected Preview refresh rate is saved and restored after restarting PEARL.
  • No authenticated ESI scope changes.

Preview Tool — Instant client switching

PEARL 1.1.7 introduced a dedicated native switching runtime and removed most of the latency caused by the Qt event loop.

However, PEARL 1.1.8 still treated the physical key used to trigger the Preview hotkey itself as active input.

For example:

NumPad2 DOWN

would trigger the Preview switch request, but the switching runtime would still see NumPad2 as physically pressed and wait until:

NumPad2 UP

before allowing the actual foreground transition.

This normally added approximately 70–160 ms before the switch.

The Windows foreground operation itself was already extremely fast, commonly taking only fractions of a millisecond.

This delay became particularly noticeable when trying to issue commands across several EVE clients very quickly.

Example:

Client 1 → command → Client 2 → command → Client 3 → command → Client 4 → command

If the user clicked shortly after pressing the next Preview hotkey, the mouse button could also enter the physical-input gate before the previous hotkey had been released, delaying or preventing the expected foreground transition.

New behavior

Dedicated Preview hotkeys without modifiers are now considered owned by the Preview system.

The key used to trigger the switch is therefore excluded from the physical-input blocking check for that specific request.

The new path is effectively:

Hotkey DOWN
Preview hotkey detected
target HWND resolved
PreviewSwitchRuntime
SetForegroundWindow
EVE client active

There is no longer a requirement to wait for the Preview hotkey's key-up event before changing foreground.

This allows the destination EVE client to become active before the user can normally begin the following mouse or keyboard command.

Input safety

The low-latency change does not completely remove the physical-input safety system.

The exception applies specifically to the Preview-owned hotkey that initiated the switch.

Other physical inputs remain blocking conditions.

For example:

  • Ctrl
  • Alt
  • Shift
  • Windows key
  • F1–F12
  • unrelated keyboard keys
  • mouse buttons already held before the switch

still prevent PEARL from deliberately transferring foreground in the middle of that unrelated input lifecycle.

Modifier-based Preview shortcuts therefore continue to wait for the relevant modifier state where required.

PEARL also continues to avoid synthetic keyboard recovery or forced key releases.

The Preview foreground path does not use:

  • AttachThreadInput
  • SetFocus
  • SetActiveWindow
  • BringWindowToTop
  • SendInput
  • keybd_event
  • synthetic Ctrl/Alt/Shift releases
  • synthetic F-key input

Simplified foreground path

The normal Preview switching path has been simplified further.

With DWM Recovery disabled, which remains the normal/default configuration, foreground switching no longer depends on periodic supervisory timers.

The primary path is now:

Global Hotkey Thread
Native Hotkey Routing
PreviewSwitchRuntime
SetForegroundWindow

Qt-side state such as the active border, map follow and Preview visual bookkeeping is updated after the foreground transaction.

These UI updates cannot delay the native foreground request itself.

Periodic recovery mechanisms such as foreground polling, full client scans and DWM watchdog repair are no longer part of normal switching behavior.

They are reserved for the optional DWM recovery mode.

Windows foreground confirmation

PEARL 1.1.8 diagnostics also revealed cases where:

SetForegroundWindow(target)

returned success, but an immediate:

GetForegroundWindow()

temporarily returned 0 while Windows was completing the foreground hand-off.

This previously caused PEARL to report:

Preview foreground activation was not confirmed

even when the visible EVE client had successfully changed.

PEARL 1.1.9 no longer treats this temporary Windows transition state as an automatic switching failure when SetForegroundWindow has already accepted the request.

The following Windows foreground event is allowed to update the visual/client state naturally without attempting aggressive focus recovery.

Global Preview hotkeys

Preview switching hotkeys are now global by default.

This means configured client hotkeys remain usable while the foreground application is:

  • another EVE client;
  • PEARL;
  • a web browser;
  • Discord;
  • Windows Explorer;
  • Blender;
  • another desktop application.

This makes Preview usable as a true client switcher rather than requiring PEARL or EVE to already be the current foreground context.

Users who prefer the previous restricted behavior can still configure Preview hotkey context accordingly.

Minimized clients

Minimized EVE windows remain valid Preview hotkey targets.

When a minimized client is selected, PEARL requests the window to be restored before the foreground transition.

This means switching hotkeys remain useful even when a client is currently minimized.

Note about black/minimized thumbnails

PEARL uses Windows DWM thumbnails for the Preview display.

DWM mirrors the content produced by the original EVE window.

If Windows or EVE stops rendering a truly minimized client, the corresponding DWM thumbnail can become black, frozen or update very slowly.

PEARL can control how often it updates the thumbnail presentation, but it cannot force the EVE client itself to continue rendering frames while Windows has suspended/minimized its rendering surface.

Restoring the client normally restores its live thumbnail output.

Preview refresh rate

A new persistent Preview refresh-rate setting is available.

Available values:

  • Off / Native DWM
  • 5 FPS
  • 12 FPS
  • 24 FPS
  • 30 FPS
  • 60 FPS

The default is:

24 FPS

The selected value is saved in the Preview configuration and restored the next time PEARL starts.

This refresh configuration is separate from the foreground switching runtime and does not participate in hotkey activation.

Inactive but non-minimized clients are not intentionally throttled by the foreground switching system.

Preserved from PEARL 1.1.8

PEARL 1.1.9 keeps the stability and Industrialist improvements introduced in 1.1.8, including:

  • stabilized DWM thumbnail behavior during rapid EVE client changes;
  • protection against transient Windows foreground=0 visual glitches;
  • background detection of newly opened EVE clients while PEARL is minimized or hidden;
  • automatic continuation of Industrial Works > Calculate after an SDE download/rebuild;
  • persistent multi-location Mining inventory selection for asteroid ore, moon ore, ice and gas;
  • prioritization/highlighting of stations containing matching mining resources;
  • aggregation of normal, compressed and grade variants inside the same ore/moon/ice family;
  • compressed gas stock accounting using real decompression efficiency rather than 1:1 conversion;
  • existing Windows 10/11 visual compatibility and detached-map persistence improvements.

ESI

No authenticated ESI scope was added, removed or changed.

PEARL continues to use 14 authenticated scopes.

No EVE Developer application update or character ESI reconnection is required for PEARL 1.1.9.

Stability / regression testing

The final PEARL 1.1.9 source passed the complete available clean-source regression gate:

  • 823 passed, 1 skipped
  • 94 intra-package module contracts passed
  • 18 Qt symbol audits passed
  • Pathfinder privacy audit passed
  • 1,590 translation keys × 8 languages validated
  • 0 direct UI translation violations
  • source-path/dead-code audit passed
  • final SOURCE ZIP integrity/CRC passed

Summary

PEARL 1.1.9 removes the final noticeable delay from the Preview client-switching path.

The intended behavior is now:

press the client hotkey → client changes immediately → issue the command → switch to the next client

with the native foreground transaction kept independent from PEARL's normal UI, map, Industrialist and background processing.