From e969be67c1e5365b2332471e831959c59ee1e8da Mon Sep 17 00:00:00 2001 From: canvrno-oai Date: Wed, 15 Apr 2026 20:43:37 -0700 Subject: [PATCH] Add simple pop-all overlay flow --- codex-rs/tui/src/app.rs | 3 +++ codex-rs/tui/src/app_event.rs | 3 +++ codex-rs/tui/src/bottom_pane/mod.rs | 6 ++++++ codex-rs/tui/src/chatwidget.rs | 6 ++++++ 4 files changed, 18 insertions(+) diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index 50dbd0bf6d..3ff5d7ae11 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -5650,6 +5650,9 @@ impl App { AppEvent::OpenReviewCustomPrompt => { self.chat_widget.show_review_custom_prompt(); } + AppEvent::DismissAllBottomPaneViews => { + self.chat_widget.dismiss_all_bottom_pane_views(); + } AppEvent::SubmitUserMessageWithMode { text, collaboration_mode, diff --git a/codex-rs/tui/src/app_event.rs b/codex-rs/tui/src/app_event.rs index a3b31aa988..ae7932efcc 100644 --- a/codex-rs/tui/src/app_event.rs +++ b/codex-rs/tui/src/app_event.rs @@ -553,6 +553,9 @@ pub(crate) enum AppEvent { /// Open the custom prompt option from the review popup. OpenReviewCustomPrompt, + /// Dismiss all active bottom-pane views. + DismissAllBottomPaneViews, + /// Submit a user message with an explicit collaboration mask. SubmitUserMessageWithMode { text: String, diff --git a/codex-rs/tui/src/bottom_pane/mod.rs b/codex-rs/tui/src/bottom_pane/mod.rs index 91c8bd48eb..f164f9cf3d 100644 --- a/codex-rs/tui/src/bottom_pane/mod.rs +++ b/codex-rs/tui/src/bottom_pane/mod.rs @@ -386,6 +386,12 @@ impl BottomPane { } } + pub(crate) fn pop_all_views(&mut self) { + while !self.view_stack.is_empty() { + self.pop_active_view(); + } + } + fn on_view_stack_depth_decreased(&mut self) { if self.view_stack.is_empty() { self.on_active_view_complete(); diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 599655b364..aef7c7cf3a 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -5220,6 +5220,11 @@ impl ChatWidget { self.request_redraw(); } + pub(crate) fn dismiss_all_bottom_pane_views(&mut self) { + self.bottom_pane.pop_all_views(); + self.request_redraw(); + } + pub(crate) fn no_modal_or_popup_active(&self) -> bool { self.bottom_pane.no_modal_or_popup_active() } @@ -10530,6 +10535,7 @@ impl ChatWidget { }, user_facing_hint: None, }); + tx3.send(AppEvent::DismissAllBottomPaneViews); })], dismiss_on_select: true, search_value: Some(option),