From 1f87cbc88320e540db408d65b763a4bed675b93e Mon Sep 17 00:00:00 2001 From: Hojjat Date: Mon, 6 Apr 2026 23:04:49 -0600 Subject: [PATCH] fix: do not allow cursor or keyboard activity when popup is open traps Tab from escaping, and won't allow elements in the background to react to hover --- src/widget/popover.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/widget/popover.rs b/src/widget/popover.rs index 7a82cd8..af5370a 100644 --- a/src/widget/popover.rs +++ b/src/widget/popover.rs @@ -138,6 +138,10 @@ where renderer: &Renderer, operation: &mut dyn Operation, ) { + // Skip operating on background content, prevents Tab from escaping + if self.modal && self.popup.is_some() { + return; + } self.content .as_widget_mut() .operate(content_tree_mut(tree), layout, renderer, operation); @@ -172,11 +176,17 @@ where } } + // Hide cursor from background content when modal popup is active + let cursor = if self.modal && self.popup.is_some() { + mouse::Cursor::Unavailable + } else { + cursor_position + }; self.content.as_widget_mut().update( &mut tree.children[0], event, layout, - cursor_position, + cursor, renderer, clipboard, shell, @@ -214,13 +224,19 @@ where cursor_position: mouse::Cursor, viewport: &Rectangle, ) { + // Hide cursor from background content when a modal popup is active + let cursor = if self.modal && self.popup.is_some() { + mouse::Cursor::Unavailable + } else { + cursor_position + }; self.content.as_widget().draw( content_tree(tree), renderer, theme, renderer_style, layout, - cursor_position, + cursor, viewport, ); }