Skip to content

v3.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Sep 06:07

Fixed

  • The app pinned a full CPU core (~12% of an 8-core machine) for the entire time
    it sat hidden in the system tray. Idle usage is now 0%.

Cause

  • Hiding to the tray used ShowWindow(SW_HIDE), which clears WS_VISIBLE.
    Windows does not deliver WM_PAINT to an invisible window, so winit's
    request_redraw produced nothing and eframe was left holding its event loop
    in ControlFlow::Poll, waiting for a RedrawRequested that could never
    arrive. Upstream issue: emilk/egui#3982.
  • The window is now minimised with the WS_EX_TOOLWINDOW style instead. It
    stays out of the taskbar and Alt+Tab, but keeps WS_VISIBLE, so repaints are
    still serviced and the event loop parks in ControlFlow::Wait between them.

Changed

  • Removed the internal workaround that had to poke a hidden window from another
    thread before it could act on the tray icon, the global hotkey or a second
    launch. A window that can still paint handles those directly.
  • The window handle is taken from eframe rather than found
    window title.
  • The start-at-login path (--background) re-applies the
    frames, because winit rewrites the extended window style while eframe applies
    the state the window was built with.

Measured

State 2.9.1 3.0.0
Hidden in tray, idle 100% of a core 0%
Window shown, idle 0% 0-2%
Start-at-login, idle 1% 0%

Platforms

  • Windows only. Linux and macOS were never affected: X11 a
    redraw requests inside winit instead of going through the display server, and
    both already minimised rather than hiding.

Upgrading

  • Drop-in replacement. No data, settings or shortcut chang