feat(gui): focus the viewer code field when the View screen opens
Entering View now grabs keyboard focus on the code field (once, via a one-shot flag so it doesn't steal focus every frame), so the user can paste or type the share code immediately without clicking into it first. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -211,6 +211,9 @@ struct ViewerState {
|
||||
/// Short endpoint id we're dialing, decoded from the ticket at Connect.
|
||||
/// Shown in the "Connecting to …" line so a dead host is identifiable.
|
||||
connecting_to: Option<String>,
|
||||
/// Set when the View screen opens so the code field grabs focus once
|
||||
/// (cleared on use, so it doesn't steal focus every frame).
|
||||
focus_ticket: bool,
|
||||
error: Option<String>,
|
||||
}
|
||||
|
||||
@@ -613,6 +616,11 @@ impl PixelPassApp {
|
||||
)
|
||||
})
|
||||
.inner;
|
||||
// Grab focus once on screen entry so the user can paste/type straight
|
||||
// away without first clicking into the field.
|
||||
if std::mem::take(&mut self.viewer.focus_ticket) {
|
||||
ticket_resp.request_focus();
|
||||
}
|
||||
// Enter in the field connects (gated on a decodable code below).
|
||||
let enter_pressed =
|
||||
ticket_resp.lost_focus() && ui.input(|i| i.key_pressed(egui::Key::Enter));
|
||||
@@ -702,6 +710,7 @@ impl PixelPassApp {
|
||||
{
|
||||
self.viewer.ticket_input = text.trim().to_string();
|
||||
}
|
||||
self.viewer.focus_ticket = true;
|
||||
}
|
||||
|
||||
fn start_viewer(&mut self, ctx: egui::Context) {
|
||||
|
||||
Reference in New Issue
Block a user