Skip to content

Win+D (Show Desktop) does not hide the overlay - decide normal vs topmost window #1

Description

@endolith

Problem

Pressing Win+D (Show Desktop) does not hide the PlotRuler overlay along with other windows — it stays visible floating over the desktop.

Why

Windows implements Show Desktop by raising the desktop above everything in the window stack, but it explicitly cannot cover always-on-top (topmost) windows. PlotRuler is topmost by design (it's an overlay that must float above the graph being read), so the OS can't hide it natively on Win+D without dropping that flag.

WS_EX_TOOLWINDOW is not the blocker; WindowStaysOnTopHint (WS_EX_TOPMOST) is the reason it stays up.

Options considered

  1. Intercept Win+D / Win+M with a Win32 low-level keyboard hook, then hide the overlay to the tray. Keeps it topmost for reading graphs, disappears on show-desktop like a normal window. Slightly more Win32 code to maintain (hook lifecycle, edge cases like the taskbar "Show Desktop" button, which a keyboard hook won't catch).
  2. Drop the always-on-top flag and make it a fully normal window. Simplest and most predictable — appears in taskbar / Alt+Tab, hides on Win+D. But it no longer floats above other apps, so reading over a graph requires bringing it forward manually. This conflicts with the core overlay use case.
  3. Hybrid: keep topmost for the reading overlay, but respond to Win+D/Win+M by hiding to tray via a hook.

Other "normal window" behaviors

While here, this is a broader question: the overlay currently does not behave like a normal window for several OS operations. The issue is to decide how far to go toward "normal window" semantics (taskbar/Alt-Tab presence, minimize-all behavior, etc.) versus staying a specialized always-on-top tool.

Decision

Undecided — needs more real-world testing of the current topmost behavior before choosing. Filing to track the tradeoff and revisit.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions