From c8d9d04f59e9eafb96db314c0435d6cc18b446b2 Mon Sep 17 00:00:00 2001 From: Martino Ferrari Date: Tue, 3 Nov 2026 10:47:11 +0100 Subject: [PATCH] ui: the readouts show in a strip under the plot when the dock is hidden Co-Authored-By: Claude Sonnet 4.6 --- src/ui.cpp | 11 ++- src/ui/main-window.ui | 26 ++++++- src/ui_app.hpp | 18 +++++ src/ui_cursors.cpp | 5 +- src/ui_dock.cpp | 154 +++++++++++++++++++++++++++++++++++++----- src/ui_probe.cpp | 88 ++++++++++++++++++++++++ src/ui_widgets.cpp | 2 + 7 files changed, 282 insertions(+), 22 deletions(-) diff --git a/src/ui.cpp b/src/ui.cpp index cd3aa0b..f768826 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -4013,6 +4013,11 @@ gboolean tick(gpointer user) { app->sidebar_syncing = false; } } + // The readouts strip is on screen exactly when the dock is not. Decided here, right after the wish was + // re-asserted and *before* the collapsing below (which makes the split view write `show-sidebar` + // false itself until the next frame re-asserts it): read after it, the strip would show for one frame + // each time the window narrowed. + sync_readouts_strip(*app); const int window_w = gtk_widget_get_width(app->window); if (window_w > 0) { adw_overlay_split_view_set_collapsed(ADW_OVERLAY_SPLIT_VIEW(app->side_view), @@ -4976,6 +4981,8 @@ void on_activate(GtkApplication* application, gpointer user) { app->badge_bar = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_bar")); app->badge_signals = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_signals")); app->badge_system = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "badge_system")); + app->readouts_strip = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "readouts_strip")); + app->strip_box = GTK_WIDGET(gtk_builder_get_object(app->window_ui, "readouts_strip_box")); // A missing id is the one mistake neither the build nor `GtkBuilder` sees, and every use below would // be a null pointer. if (app->window == nullptr || side_view == nullptr || @@ -4983,7 +4990,7 @@ void on_activate(GtkApplication* application, gpointer user) { app->status_badge == nullptr || app->status_label == nullptr || app->status_info_button == nullptr || app->status_row == nullptr || app->badge_bar == nullptr || app->badge_signals == nullptr || - app->badge_system == nullptr || + app->badge_system == nullptr || app->readouts_strip == nullptr || app->strip_box == nullptr || side == nullptr || app->dock_scroller == nullptr || app->dock_page == nullptr) { return; } @@ -5165,7 +5172,7 @@ void on_activate(GtkApplication* application, gpointer user) { // switch that turns it back on. The trigger's body is deliberately *not* disabled: a trigger is // configured before it is switched on, so its settings have to stay editable while it is off. gtk_widget_set_sensitive(app->cursors_body, FALSE); - gtk_widget_set_sensitive(app->dock_cursor_grid, FALSE); + dock_set_cursors_sensitive(*app, false); // the dock's grid and the strip's chips, together // The arm controls are the one part of the trigger pane that needs trigger mode running: both of them, // and the compact line's visibility, are stated from the toggle by `sync_arm_buttons()`. sync_arm_buttons(*app); diff --git a/src/ui/main-window.ui b/src/ui/main-window.ui index 6817e15..8903bfe 100644 --- a/src/ui/main-window.ui +++ b/src/ui/main-window.ui @@ -4,7 +4,8 @@ + + 0 + 26 + 0 + external + never + 6 + 6 + + + horizontal + 8 + center + + + +