Skip to content

Fix six things in the native heads - #846

Merged
SimonCropp merged 3 commits into
mainfrom
fix-native-heads
Aug 23, 2026
Merged

Fix six things in the native heads#846
SimonCropp merged 3 commits into
mainfrom
fix-native-heads

Conversation

@SimonCropp

@SimonCropp SimonCropp commented Aug 23, 2026

Copy link
Copy Markdown
Member

Escape with the Linux context menu open reached the managed side as quit, which
closes the menu and then runs the command, so dismissing the menu closed the viewer

  • and on Linux there is no tray to open it again from, so the queue went to staging.
    A click outside the menu reported nothing at all, leaving it floating until a row, a
    button or a key was hit, which is not what docs/viewer.md says of it. Both are
    dismissals now.

WindowShouldClose waits on events while the window is minimised, and it is called
inside deview_present, so minimising the Linux viewer stopped the managed loop being
pumped: a snapshot arriving after that was accepted by the listener and never shown.
FLAG_WINDOW_ALWAYS_RUN keeps the loop running, and a focus restores a minimised
window rather than leaving it in the taskbar.

The ImGui backend did not declare RendererHasVtxOffset and the renderer ignored the
vertex offset, so a draw list past 65535 vertices - a maximised 4K window of dense
long lines reaches that - wrapped its sixteen bit indices and drew scrambled panes,
with IM_ASSERT compiled out of the release build to say nothing about it.

A failed queue row on Linux was coloured and left unmarked, while the other three
heads and the docs show " !" after the label.

Trackpad scrolling: the Linux head truncated fractional wheel offsets to zero, and
the Mac head rounded points to notches - so an ordinary flick, which is tens of
points, arrived as tens of notches and the managed side multiplied it by three,
while slow movement rounded away to nothing. Both accumulate now, and macOS converts
points and lines separately.

macOS tooltips: refreshToolTips removed and re-added every tracking rectangle on
every frame, and AppKit times its tooltip delay from the moment the cursor enters
one, so the delay was restarted before it could elapse and queue tooltips never
appeared. The rectangles are rebuilt only when they change.

The macOS head derived "Pending (N)" from the queue it was handed, which is the visible slice - sized to the body, with folded group members left out - so thirty pending in a sixteen row body read "Pending (16)" beside "inline 1 of 30". DeviewScreen carries the real count now, which takes DEVIEW_VERSION to 7.

The binaries these compile into are committed, so the build-native workflow's rebuild has to land on this branch before it is merged. It runs on every push here and opens its PR against this branch.

Escape with the Linux context menu open reached the managed side as quit, which
closes the menu and then runs the command, so dismissing the menu closed the viewer
- and on Linux there is no tray to open it again from, so the queue went to staging.
A click outside the menu reported nothing at all, leaving it floating until a row, a
button or a key was hit, which is not what docs/viewer.md says of it. Both are
dismissals now.

WindowShouldClose waits on events while the window is minimised, and it is called
inside deview_present, so minimising the Linux viewer stopped the managed loop being
pumped: a snapshot arriving after that was accepted by the listener and never shown.
FLAG_WINDOW_ALWAYS_RUN keeps the loop running, and a focus restores a minimised
window rather than leaving it in the taskbar.

The ImGui backend did not declare RendererHasVtxOffset and the renderer ignored the
vertex offset, so a draw list past 65535 vertices - a maximised 4K window of dense
long lines reaches that - wrapped its sixteen bit indices and drew scrambled panes,
with IM_ASSERT compiled out of the release build to say nothing about it.

A failed queue row on Linux was coloured and left unmarked, while the other three
heads and the docs show " !" after the label.

Trackpad scrolling: the Linux head truncated fractional wheel offsets to zero, and
the Mac head rounded points to notches - so an ordinary flick, which is tens of
points, arrived as tens of notches and the managed side multiplied it by three,
while slow movement rounded away to nothing. Both accumulate now, and macOS converts
points and lines separately.

macOS tooltips: refreshToolTips removed and re-added every tracking rectangle on
every frame, and AppKit times its tooltip delay from the moment the cursor enters
one, so the delay was restarted before it could elapse and queue tooltips never
appeared. The rectangles are rebuilt only when they change.

The binaries these compile into are committed, so the build-native workflow's
rebuild has to land on this branch before it is merged.
The macOS head derived "Pending (N)" from the queue it was handed, which is the
visible slice: sized to the body, and with the members of folded groups left out. So
thirty pending in a sixteen row body read "Pending (16)" beside "inline 1 of 30",
and folding a group lowered it further. The ASCII and WinForms heads use
Screen.PendingCount, which the shim had no field for.

DeviewScreen carries it now, so DEVIEW_VERSION goes to 7 and the binaries have to be
rebuilt with this. DeviewStructTests holds the two sides together and is the part of
this a machine with no toolchain can still check.
@SimonCropp SimonCropp changed the title Fix five things in the native heads Fix six things in the native heads Aug 23, 2026
@SimonCropp
SimonCropp merged commit 6385b43 into main Aug 23, 2026
13 checks passed
@SimonCropp
SimonCropp deleted the fix-native-heads branch August 23, 2026 09:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant