fix: the overlaid sidebar steps aside for a drag, and the compact view follows the trigger
Two reports, both real, and neither was about the lock itself.
**A drag out of an overlaid sidebar had nowhere to land.** In a window too narrow to show both columns,
`AdwOverlaySplitView` puts the sidebar *on* the plot — that is what `collapsed` means — so the pointer
stays over the list and never over a drop target: a signal could be dragged but not dropped, which reads
as "dragging does not work". `row_drag_sidebar()` now hides the sidebar on `drag-begin` and restores it on
`drag-end`, and only when collapsed: side by side the plot is already visible, and hiding the list the drag
started in would be startling. The reading begins a drag through the *source* with the state forced
collapsed, the way the sidebar probe forces it:
pane drag: sidebar hidden for the drag=1 restored after it=1
**The compact view did not follow the trigger switch.** The locked line's first branch reads
`tc.enabled` — with trigger mode off it says `stream (trigger off)` and nothing else — and
`on_trigger_toggled()` never re-synced it, so the line kept saying whichever it had been. One call to
`sync_trigger_summary()` beside the switch sync. The dump's two `panes:` lines were already the test and
now pass it: with a session whose trigger is off, the line as found reads `stream (trigger off)` and the
live one reads the settings, because the exit probe turns the trigger on in between. Both reading `stream`
was the defect.
Verified: the two lines above; `panes: the same line as the probe found it: 'mode: stream (trigger off)'`
against the live `'signal: square | condition: window, rising | level: 0.3 .. 0.6 | mode: normal'`;
`make test-ui` 14 files; zero `Gtk-CRITICAL`. Docs: the `pane drag:` reading and the invariants bullet for
the overlay, and the `panes:` pair's second job — the refresh test — written down so the next reader knows
what both lines reading `stream` means.
This commit is contained in:
1 parent
a43d3830f0
commit
8b2dae7655
8 files changed
+96
-4
No files matched your search
+22
-1
@@ -4436,6 +4436,25 @@ void on_pane_edit_clicked(GtkButton* button, gpointer user) {
|
||||
apply_pane_lock(*app);
|
||||
}
|
||||
|
||||
/// Hides the sidebar for the length of a drag, when it is *overlaid*, and restores it after.
|
||||
///
|
||||
/// With the split view collapsed the sidebar covers the plot -- that is what collapsed means -- so a drag
|
||||
/// that starts in the signal list has nowhere to land: the pointer is over the sidebar and never over a
|
||||
/// drop target, and the drag is impossible rather than merely awkward. Side by side nothing is done: the
|
||||
/// plot is already visible, and hiding the list the drag started in would be startling.
|
||||
void row_drag_sidebar(App& app, bool dragging) {
|
||||
if (app.side_view == nullptr) return;
|
||||
AdwOverlaySplitView* split = ADW_OVERLAY_SPLIT_VIEW(app.side_view);
|
||||
if (dragging) {
|
||||
if (!adw_overlay_split_view_get_collapsed(split)) return;
|
||||
app.sidebar_hidden_for_drag = adw_overlay_split_view_get_show_sidebar(split) != FALSE;
|
||||
if (app.sidebar_hidden_for_drag) adw_overlay_split_view_set_show_sidebar(split, FALSE);
|
||||
} else if (app.sidebar_hidden_for_drag) {
|
||||
app.sidebar_hidden_for_drag = false;
|
||||
adw_overlay_split_view_set_show_sidebar(split, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void run_app_action(App& app, AppAction action) {
|
||||
const auto toggle = [](GtkWidget* button) {
|
||||
if (button == nullptr) return;
|
||||
@@ -5782,7 +5801,9 @@ int run_ui(int argc, char** argv, const Config& cfg, ScopeModel& model, Acquisit
|
||||
app.window_limit_s);
|
||||
{
|
||||
GtkIconTheme* theme = gtk_icon_theme_get_for_display(gdk_display_get_default());
|
||||
std::printf("[udpscope] pane edits: locked=%s(%s) config=%s(%s)\n",
|
||||
std::printf("[udpscope] pane drag: sidebar hidden for the drag=%d restored after it=%d\n",
|
||||
app.dbg_drag_hid_sidebar, app.dbg_drag_restored_sidebar);
|
||||
std::printf("[udpscope] pane edits: locked=%s(%s) config=%s(%s)\n",
|
||||
app.dbg_pane_edit_icon.c_str(),
|
||||
gtk_icon_theme_has_icon(theme, app.dbg_pane_edit_icon.c_str()) ? "ok" : "MISSING",
|
||||
app.dbg_pane_view_icon.c_str(),
|
||||
|
||||
Reference in new issue
Block a user