Repository navigation
refactor(linux): finish remediation steps 40 to 45 - #3413
Merged
Merged
Conversation
TrackerEdit::DeleteRows replaces Delete and DiscardDraft and is one undo step. TrackerDelta lists inserted and removed drafts for the one store path. Delete is tab.delete-rows, enabled from the selection and the delta.
relm4's ComponentSender::input and FactorySender::input expect on a closed channel, so a read or save that answered after its window closed aborted the whole process. Both are now banned in favour of deliver.
Ctrl+Shift+N becomes the application's New Window, and GTK runs application accelerators before a focused grid sees the key.
Drafts hold CellInput, so a cell left to the server is not a NULL, and InsertDraft seeds Default where the server fills. The grid parses each commit against its column and sends a TrackerEdit; untouched text is no edit.
An adw::Application subclass replaces RelmApp and the flock gate: a second launch hands over to the running instance on D-Bus, and --new-window opens a window there. Quit asks each window through its close prompts and never calls g_application_quit, so the process ends only once every close and save hold has dropped.
A copied draft keeps the cells it leaves to the server instead of writing NULL there. One Ctrl+Z removes every copy, past the 50-step history limit too.
GtkCalendar emits day-selected only when the date changes, so a click or Space on the selected day, such as today on a NULL cell, picked nothing.
begin_edit flipped the check box, so the auto-edit after Insert Row would write TRUE into a new row once its cells take focus.
GTK takes C strings: the cell drew such a value cut at the NUL, or aborted in a debug build, and an editor would save the cut text.
A new row is dropped at once with its undo history, so the prompt no longer tells it to wait for Save.
The Delete button takes its icon from the template. A preset for a column the tab lacks is logged and dropped instead of reading as a missing value.
- A view or trigger whose SQL cannot be replayed is named as itself, not as a column. - new.x and old.x in a trigger on another table no longer block dropping column x.
- The Structure tab hides Add Foreign Key and foreign key removal there. - The CREATE TABLE read for capabilities is kept per thread, so a wide table is read once, not once per column.
The table definition also reads the CREATE statement once, not again for its foreign keys.
# Conflicts: # linux/CHANGELOG.md
# Conflicts: # linux/CHANGELOG.md # linux/crates/app/src/services/mod.rs # linux/crates/app/src/ui/connection_row.rs # linux/crates/app/src/ui/session_window/imp.rs # linux/crates/app/src/ui/session_window/mod.rs # linux/crates/app/src/ui/session_window/session_window_command.rs # linux/crates/app/src/ui/session_window/session_window_input.rs # linux/crates/app/src/ui/session_window/tests.rs # linux/po/POTFILES.in
# Conflicts: # linux/CHANGELOG.md # linux/crates/app/src/workspace/mod.rs
# Conflicts: # linux/CHANGELOG.md
# Conflicts: # linux/CHANGELOG.md # linux/crates/app/Cargo.toml # linux/crates/app/src/application/app_services.rs # linux/crates/app/src/application/imp.rs # linux/crates/app/src/ui/session_window/mod.rs # linux/crates/app/src/ui/session_window/session_window_input.rs # linux/crates/app/src/workspace/workspace_store.rs
AdwAlertDialog closes itself before it emits a response, so a second close found it gone and logged a critical when animations were off.
Rows are still keyed in the identity the save path binds (the primary key in column order); RowKeyBuilder takes the page's identity range once saves plan with the page identity.
AdwAlertDialog emits closed before the response a click chose, and the closed handler answered Cancel first. Answer through workspace::respond, which defers its close response to an idle callback.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Steps 40 to 45 of
linux/docs/plan-2026-09-14-audit-remediation.md. The app had one Relm4 window for every connection, no prompt for secrets the keyring lacked, no way past a rejected host key, and SQLite schema changes it could not make.Change
TableProApplication: New Window, a quit through every close flow, windows reopened on launch, files opened from Files and the command line.Verified
fmt, both clippy runs, unit, widget and app integration tests in the
ubuntu:26.04image; docker suites per engine for DDL and saves.Not in this PR