diff options
| author | Can Celik <ogulcancelik@gmail.com> | 2026-09-14 03:02:14 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-14 03:02:14 +0300 |
| commit | 21c1f8cf856affb875b5ab4302225a63f4563bdd (patch) | |
| tree | fc3fa607c4af3d9233f3ba7d905a4744ad25c215 /src/client/shell/overlays.rs | |
| parent | add3dd28f91db1a2b33e9582c60ac9c1809c1bf5 (diff) | |
fix: hide only kitty image placements overlapping overlays (#4081)
Diffstat (limited to 'src/client/shell/overlays.rs')
| -rw-r--r-- | src/client/shell/overlays.rs | 48 |
1 files changed, 35 insertions, 13 deletions
diff --git a/src/client/shell/overlays.rs b/src/client/shell/overlays.rs index 4418c2c3..bc3772b1 100644 --- a/src/client/shell/overlays.rs +++ b/src/client/shell/overlays.rs @@ -5,6 +5,8 @@ mod worktree_overlays; #[derive(Default)] pub(crate) struct OverlayRender { + pub(crate) area: Rect, + pub(crate) menu_rows: Vec<(Rect, usize)>, pub(crate) primary: Rect, pub(crate) clear: Rect, pub(crate) cancel: Rect, @@ -85,7 +87,7 @@ pub(crate) fn render_global_menu( menu: &ClientGlobalMenuOverlay, snapshot: &ClientShellSnapshot, palette: &Palette, -) -> Option<Vec<(Rect, usize)>> { +) -> Option<OverlayRender> { let items = super::super::global_menu::global_menu_items(snapshot); let screen = buffer.area; let width = items @@ -108,12 +110,8 @@ pub(crate) fn render_global_menu( .saturating_sub(width) .min(screen.right().saturating_sub(width)); let y = launcher.y.saturating_sub(height).max(screen.y); - let inner = panel( - buffer, - Rect::new(x, y, width, height), - palette.accent, - palette.panel_bg, - )?; + let rect = Rect::new(x, y, width, height); + let inner = panel(buffer, rect, palette.accent, palette.panel_bg)?; let mut rows = Vec::new(); for (index, (label, action)) in items.iter().enumerate() { let row_y = inner.y.saturating_add(index as u16); @@ -155,14 +153,18 @@ pub(crate) fn render_global_menu( } rows.push((row, index)); } - Some(rows) + Some(OverlayRender { + area: rect, + menu_rows: rows, + ..OverlayRender::default() + }) } pub(crate) fn render_context_menu( buffer: &mut Buffer, menu: &ClientContextMenuOverlay, palette: &Palette, -) -> Option<Vec<(Rect, usize)>> { +) -> Option<OverlayRender> { let items = menu.items(); let screen = buffer.area; let max_item_width = items @@ -207,7 +209,11 @@ pub(crate) fn render_context_menu( put_text(buffer, row.x, row.y, row.width, item.label, style); rows.push((row, index)); } - Some(rows) + Some(OverlayRender { + area: rect, + menu_rows: rows, + ..OverlayRender::default() + }) } fn panel( @@ -306,7 +312,10 @@ fn render_release_notes_overlay( )?; let inner = panel(b, outer, p.accent, p.panel_bg)?; if inner.height < 8 || inner.width < 20 { - return Some(OverlayRender::default()); + return Some(OverlayRender { + area: outer, + ..OverlayRender::default() + }); } let stack = crate::ui::modal_stack_areas(inner, 2, 1, 0, 1); @@ -397,6 +406,7 @@ fn render_release_notes_overlay( } Some(OverlayRender { + area: outer, primary: close, release_notes_scrollbar: track.unwrap_or_default(), release_notes_scroll_metrics: Some(metrics), @@ -417,7 +427,10 @@ fn render_product_announcement_overlay( )?; let inner = panel(b, outer, p.accent, p.panel_bg)?; if inner.height < 8 || inner.width < 20 { - return Some(OverlayRender::default()); + return Some(OverlayRender { + area: outer, + ..OverlayRender::default() + }); } let stack = crate::ui::modal_stack_areas(inner, 2, 1, 0, 1); @@ -509,6 +522,7 @@ fn render_product_announcement_overlay( } Some(OverlayRender { + area: outer, primary: close, product_announcement_scrollbar: track.unwrap_or_default(), product_announcement_scroll_metrics: Some(metrics), @@ -521,7 +535,10 @@ fn render_onboarding_overlay(b: &mut Buffer, p: &Palette) -> Option<OverlayRende let outer = popup(b.area, 64, 16)?; let inner = panel(b, outer, p.accent, p.panel_bg)?; if inner.height < 11 { - return Some(OverlayRender::default()); + return Some(OverlayRender { + area: outer, + ..OverlayRender::default() + }); } let stack = crate::ui::modal_stack_areas(inner, 2, 0, 1, 1); let base = Style::default() @@ -602,6 +619,7 @@ fn render_onboarding_overlay(b: &mut Buffer, p: &Palette) -> Option<OverlayRende .remove_modifier(Modifier::DIM), ); Some(OverlayRender { + area: outer, primary, ..OverlayRender::default() }) @@ -655,6 +673,7 @@ fn render_rename_overlay( button(b, *clear, " ^c clear ", n); button(b, *cancel, " esc cancel ", n); Some(OverlayRender { + area: q, primary: *save, clear: *clear, cancel: *cancel, @@ -912,6 +931,7 @@ fn render_navigator_overlay( Style::default().fg(p.overlay0).bg(p.panel_bg), ); Some(OverlayRender { + area: q, primary: Rect::default(), clear: Rect::default(), cancel: Rect::default(), @@ -1113,6 +1133,7 @@ fn render_help_overlay( Style::default().fg(p.overlay0).bg(p.panel_bg), ); Some(OverlayRender { + area: q, cancel: close, help_popup: q, help_scrollbar: scrollbar.unwrap_or_default(), @@ -1176,6 +1197,7 @@ fn render_confirm_close_overlay( .add_modifier(Modifier::BOLD), ); Some(OverlayRender { + area: q, primary: *ok, clear: Rect::default(), cancel: *cancel, |
