fix: a file view states its pin once, so the axis holds still

`set_data_pin()` takes a range and `pin_event_window()` a pre/post
split; the file view handed the split to both. On a recording whose
stamps start before zero that stored a pin that no longer held the
data, so every second frame found the pin wrong and stated it in full
again -- rewriting the group's x range and discarding the user's
gesture with it. The view alternated between the file's span and the
corrupted one at the frame rate: a flicker in which no pan, zoom or
click survived. `[drop-probe]` now reports the view and the count of
pin statements, which must stay at two for a whole run.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino FerrariandClaude Opus 4.6 committed 2026-10-14 01:11:04 +02:00
1 parent 345145c52b
commit 4235ee6225
6 files changed
+52 -6

No files matched your search

+10 -2
View File
@@ -3392,11 +3392,19 @@ gboolean tick(gpointer user) {
// made it a no-op. The held-event branch above has this shape for this reason: `set_data_pin()`
// for the numbers, `pin_event_window()` when the view first becomes an event. A re-open into the
// same row set with a different extent *is* a new event and re-states it.
const auto pin_view = [lo, hi](RowSet& rows) {
const auto pin_view = [lo, hi, app](RowSet& rows) {
// `set_data_pin()` takes the **range**, `pinned_window_is()`/`pin_event_window()` the
// pre/post split: passing the split to the former wrote the pin as `[lo, -lo]`-ish, which
// on a recording whose stamps start *before* zero is a window that no longer holds the
// data. The next frame's `pinned_window_is()` then read false, re-stated the pin, and the
// view alternated between the file's span and the corrupted one every frame -- a flicker
// with no interaction surviving it. A file whose first stamp was positive hid this: the
// corrupted pin was wider than the data and the clamp never fired.
if (rows.pinned_window_is(-lo, hi)) {
rows.set_data_pin(-lo, hi);
rows.set_data_pin(lo, hi);
} else {
rows.pin_event_window(-lo, hi);
++app->dbg_file_repins;
}
rows.set_trigger_marker(0.0, true);
};