Skip to content

Commit f76da47

Browse files
jb55claude
andcommitted
dave: skip input auto-focus on mobile, dismiss Done on focus queue nav
Don't request_focus() on the text input when is_compiled_as_mobile to avoid the virtual keyboard popping up on every session switch. Also auto-dismiss Done items from the focus queue when navigating via next/prev (Ctrl+N/P or the mobile NEXT badge), matching the session list behavior. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 87b639c commit f76da47

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

crates/notedeck_dave/src/ui/dave.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,9 +1323,12 @@ impl<'a> DaveUi<'a> {
13231323
notedeck_ui::context_menu::PasteBehavior::Append,
13241324
);
13251325

1326-
// Request focus if flagged (e.g., after spawning a new agent or entering tentative state)
1326+
// Request focus if flagged (e.g., after spawning a new agent or entering tentative state).
1327+
// Skip on mobile to avoid popping up the virtual keyboard on every session switch.
13271328
if *self.focus_requested {
1328-
r.request_focus();
1329+
if !notedeck::ui::is_compiled_as_mobile() {
1330+
r.request_focus();
1331+
}
13291332
*self.focus_requested = false;
13301333
}
13311334

crates/notedeck_dave/src/update.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ pub fn cycle_prev_agent(
518518
// =============================================================================
519519

520520
/// Navigate to the next item in the focus queue.
521+
/// Done items are automatically dismissed after switching to them.
521522
pub fn focus_queue_next(
522523
session_manager: &mut SessionManager,
523524
focus_queue: &mut FocusQueue,
@@ -526,10 +527,12 @@ pub fn focus_queue_next(
526527
) {
527528
if let Some(session_id) = focus_queue.next() {
528529
switch_and_focus_session(session_manager, scene, show_scene, session_id);
530+
dismiss_done(session_manager, focus_queue, session_id);
529531
}
530532
}
531533

532534
/// Navigate to the previous item in the focus queue.
535+
/// Done items are automatically dismissed after switching to them.
533536
pub fn focus_queue_prev(
534537
session_manager: &mut SessionManager,
535538
focus_queue: &mut FocusQueue,
@@ -538,6 +541,24 @@ pub fn focus_queue_prev(
538541
) {
539542
if let Some(session_id) = focus_queue.prev() {
540543
switch_and_focus_session(session_manager, scene, show_scene, session_id);
544+
dismiss_done(session_manager, focus_queue, session_id);
545+
}
546+
}
547+
548+
/// Dismiss a Done session from the focus queue and clear its indicator.
549+
fn dismiss_done(
550+
session_manager: &mut SessionManager,
551+
focus_queue: &mut FocusQueue,
552+
session_id: SessionId,
553+
) {
554+
if focus_queue.get_session_priority(session_id) == Some(FocusPriority::Done) {
555+
focus_queue.dequeue_done(session_id);
556+
if let Some(session) = session_manager.get_mut(session_id) {
557+
if session.indicator == Some(FocusPriority::Done) {
558+
session.indicator = None;
559+
session.state_dirty = true;
560+
}
561+
}
541562
}
542563
}
543564

0 commit comments

Comments
 (0)