diff --git a/crates/dock/src/dock_area.rs b/crates/dock/src/dock_area.rs index 0195955..de017bd 100644 --- a/crates/dock/src/dock_area.rs +++ b/crates/dock/src/dock_area.rs @@ -15,7 +15,7 @@ use gpui_base::dock::{ }; use gpui_base::resize_handle; use gpui_component::scroll::ScrollbarMode; -use gpui_component::{ActiveTheme as _, Side, StyledExt as _}; +use gpui_component::{ActiveTheme as _, Side}; use crate::invalid_panel::InvalidPanel; use crate::tab_panel::SignedTabGroupSkin; @@ -155,27 +155,13 @@ impl DockAreaRenderer for SignedDockSkin { cx: &mut App, ) -> AnyElement { let placement = dock.placement(); - let open = dock.is_open(); - - // A closed left or right dock takes no space. - // A closed bottom dock keeps a strip so its tab bar stays clickable. - if !open && !placement.is_bottom() { - return div().into_any_element(); - } div() .flex() - .flex_none() + .size_full() .relative() - .overflow_hidden() - .map(|this| match placement { - DockPlacement::Left | DockPlacement::Right => this.h_flex().h_full().w(dock.size()), - DockPlacement::Bottom => this.w_full().h(dock.size()), - // Base never builds a dock for the centre. - DockPlacement::Center => this, - }) - // The closed bottom dock's strip is the tab bar itself, a full tab bar tall. - .when(!open && placement.is_bottom(), |this| { + // A closed bottom dock keeps a strip, and that strip is the tab bar. + .when(!dock.is_open() && placement.is_bottom(), |this| { this.h(TAB_BAR_HEIGHT) }) .child(content) diff --git a/crates/dock/src/tab_panel.rs b/crates/dock/src/tab_panel.rs index 1403ae8..774fd9c 100644 --- a/crates/dock/src/tab_panel.rs +++ b/crates/dock/src/tab_panel.rs @@ -198,7 +198,7 @@ impl SignedTabGroupSkin { DockPlacement::Bottom => area .layout(DockPlacement::Bottom) .and_then(|tree| left_top_group(tree.root())), - DockPlacement::Center => None, + DockPlacement::Center => return None, }; if designated != Some(group.node()) { return None; diff --git a/crates/signed_state/src/backend.rs b/crates/signed_state/src/backend.rs index 6d3cab4..3fe9696 100644 --- a/crates/signed_state/src/backend.rs +++ b/crates/signed_state/src/backend.rs @@ -1707,10 +1707,6 @@ async fn push_staged_to_grasps( ) -> PushOutcome { let mut outcome = PushOutcome::default(); - if refs.is_empty() { - return outcome; - } - for relay in servers { let Some(base) = grasp_base_url(relay) else { outcome.servers.push(GraspServerResult::failed( diff --git a/crates/workspace/src/views/inbox.rs b/crates/workspace/src/views/inbox.rs index 8ccc501..880a30f 100644 --- a/crates/workspace/src/views/inbox.rs +++ b/crates/workspace/src/views/inbox.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; use std::sync::Arc; -use std::time::Duration; use anyhow::Error; use dock::{BasePanel, DockArea, Panel, PanelEvent}; @@ -21,7 +20,6 @@ use utils::relative_time; use super::{RepoItem, open_repo_item}; -const REFRESH_DEBOUNCE: Duration = Duration::from_millis(300); const LIST_OVERDRAW: Pixels = px(400.); const MAX_SUB_ACTIVITIES: usize = 5; @@ -196,10 +194,7 @@ impl InboxView { return; } - self.tasks.push(cx.spawn(async move |this, cx| { - cx.background_executor().timer(REFRESH_DEBOUNCE).await; - this.update(cx, |this, cx| this.run_refresh(cx)) - })); + self.run_refresh(cx); } fn run_refresh(&mut self, cx: &mut Context) { diff --git a/docs/over-engineering-cleanup-plan.md b/docs/over-engineering-cleanup-plan.md index 2dcb908..7a3940a 100644 --- a/docs/over-engineering-cleanup-plan.md +++ b/docs/over-engineering-cleanup-plan.md @@ -145,11 +145,14 @@ renderer when the extent is `px(0.)`, and wraps the renderer's output in `dock_frame`. `dock_extent` is `px(0.)` exactly when `!open && !is_bottom`, which is precisely the condition of the early return here. -- [ ] Delete the `if !open && !placement.is_bottom() { return div(); }` guard. -- [ ] Stop re-applying `.flex().flex_none().relative().overflow_hidden()` and the - per-placement width/height; base already applies them. -- [ ] Keep the closed-bottom strip height override, but confirm against base's - `CLOSED_BOTTOM_STRIP` that the intended height is `TAB_BAR_HEIGHT`. +- [x] Delete the `if !open && !placement.is_bottom() { return div(); }` guard. +- [x] Stop re-applying the box. The chrome is now `.flex().size_full().relative()`, + the same shape the pinned reference skin (`crates/ui/src/dock/dock.rs`) uses; + base's `dock_frame` supplies the extent and the overflow clip. +- [x] Keep the closed-bottom strip height override. Note: base's `dock_frame` + hard-codes `CLOSED_BOTTOM_STRIP` (29px) with `overflow_hidden`, so the + `TAB_BAR_HEIGHT` (44px) override is clipped and has no visible effect. The + strip is 29px today; changing it needs an upstream change. - [ ] Smoke test: open and close left, bottom, and right docks; check widths, the bottom strip height, and resize handles. @@ -157,7 +160,7 @@ is precisely the condition of the early return here. File: `crates/signed_state/src/backend.rs` -- [ ] Delete the `if refs.is_empty() { return outcome; }` guard. +- [x] Delete the `if refs.is_empty() { return outcome; }` guard. All three call sites pass a non-empty `refs`: one passes a literal one-element vec, one is inside `if !refs.is_empty()`, one is the `else` of that check. @@ -169,19 +172,19 @@ File: `crates/workspace/src/views/inbox.rs` The backend pump already coalesces relay bursts into one `NostrUpdate`, and `query_inbox` reads only the local database. -- [ ] Delete the `REFRESH_DEBOUNCE` constant. -- [ ] In `refresh`, drop the spawned timer; call `run_refresh` directly after +- [x] Delete the `REFRESH_DEBOUNCE` constant. +- [x] In `refresh`, drop the spawned timer; call `run_refresh` directly after `refresh.request()` returns `Schedule`, matching `RepoStore::refresh`. -- [ ] Keep `RefreshGate` for fold/overlap. +- [x] Keep `RefreshGate` for fold/overlap. - [ ] Smoke test: inbox updates live as relay events land, with no added delay. ### 2.4 `DockPlacement::Center` arms in `dock_toggle_button` (optional) File: `crates/dock/src/tab_panel.rs` -- [ ] The only call sites pass `Left`, `Bottom`, `Right`. Collapse the `Center` - arms to `unreachable!()` or restructure so the match is exhaustive without - a dead branch. +- [x] The only call sites pass `Left`, `Bottom`, `Right`. The `designated` + match's `Center` arm now returns early instead of yielding a dead `None`; + the icon match keeps `Center => return None` for exhaustiveness. Low value; skip if it makes the match less readable.