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

+9 -2
View File
@@ -3863,10 +3863,17 @@ gboolean noise_probe_denoise(gpointer user) {
gboolean drop_probe(gpointer user) {
App* a = static_cast<App*>(user);
if (a->window == nullptr || a->model->signals().empty()) return G_SOURCE_REMOVE;
std::fprintf(stderr, "[drop-probe] signals=%zu channels=%zu rows=%d slots0=[%s|%s|%s|%s]\n",
// `repins` beside the view: a file's extent is fixed, so the pin is stated once and only its
// numbers are refreshed afterwards. A count that tracks the frame number is the pin being written
// every frame, which flickers the view and swallows every gesture.
const plot::Range view = a->rows->view_range();
std::fprintf(stderr,
"[drop-probe] signals=%zu channels=%zu rows=%d slots0=[%s|%s|%s|%s] "
"view=[%.6f..%.6f] repins=%d\n",
a->model->signals().size(), a->model->channels().size(), a->rows->row_count(),
a->rows->row(0).name[0].c_str(), a->rows->row(0).name[1].c_str(),
a->rows->row(0).name[2].c_str(), a->rows->row(0).name[3].c_str());
a->rows->row(0).name[2].c_str(), a->rows->row(0).name[3].c_str(), view.min, view.max,
a->dbg_file_repins);
for (int signal = 0; signal < 2 && static_cast<std::size_t>(signal) < a->model->signals().size();
++signal) {
GValue value = G_VALUE_INIT;