ZIm/crates
Finn Evers 82a7aca5a6
ui: Account for padding of parent container during scrollbar layout (#27402)
Closes https://github.com/zed-industries/zed/issues/23386

This PR updates the scrollbar-component to account for padding present
in the parent container.

Since the linked issue was opened,
https://github.com/zed-industries/zed/pull/25288 improved the behaviour
so that the scrollbar does allow scrolling the entire container, however
the scrollbar thumb still does not go the entire way to the bottom. This
can be seen here:


https://github.com/user-attachments/assets/89204355-e6b8-428b-9fa9-bb614051b6fa

This happens because during layouting of the scrollbar, padding of the
parent container is not taken into account. The scrollbar thumb size is
calculated as if no padding was present.

With this change, padding is now included in the calculation, which
resolves the issue:


https://github.com/user-attachments/assets/1d4c62e0-4555-4332-a9ab-4e114684b4b3

The change here is to store the calculated content size during prepaint
_including_ padding and use this for layouting the scrollbar. This
ensures that the actual scroll max and the content size are always in
sync. Furthermore, the existing `TODO`-comment is also resolved, as we
now no longer look at the size of the last child but the actual parent
size instead.

This also removes an existing panic of the scrollbar-component in cases
where the content size was 0, which was previously not accounted for
(this never happened in practice so far, for example because of the
padding added here:

43712285bf/crates/editor/src/hover_popover.rs (L802-L809)
which prevented the container size from ever being 0).

---

Lastly, as I was wiring through the changes of the `content_size` I
noticed that some code was duplicated during the initial layouting as
well as in the click handlers. I refactored this in the second commit to
use `along` where possible as well as computing the new click offset in
one closure which can be passed to both event listeners. As always,
should any of these changes not be wanted, feel free to let me know and
I will revert these.

Looking forward to your feedback 😄 

Release Notes:

- Fixed scrollbars sometimes not scrolling all the way to the bottom.
2025-05-11 21:40:45 +02:00
..
activity_indicator Add a way to clear activity indicator (#30156) 2025-05-07 17:50:52 +00:00
agent agent: Reduce allocations (#30220) 2025-05-11 16:14:17 +00:00
anthropic Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
askpass askpass: Remove attempt to surface friendly error if zed exe path is not executable before use in askpass script (#30396) 2025-05-09 15:37:19 +00:00
assets Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
assistant_context_editor Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
assistant_settings assistant_context_editor: Remove suggest edits (#30286) 2025-05-08 17:27:49 +00:00
assistant_slash_command Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
assistant_slash_commands assistant_slash_commands: Be more precise in content type matching (#29124) 2025-05-06 04:38:03 +00:00
assistant_tool Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
assistant_tools agent: Make terminal command render with Markdown in the tool card (#30430) 2025-05-09 21:53:11 -03:00
audio Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
auto_update Add a way to clear activity indicator (#30156) 2025-05-07 17:50:52 +00:00
auto_update_helper Update block diagnostics (#28006) 2025-04-15 09:35:13 -06:00
auto_update_ui Restyle notification close control (#30262) 2025-05-08 14:10:30 +00:00
aws_http_client Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
bedrock Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
breadcrumbs breadcrumbs: Update multibuffer to match singleton (#28267) 2025-04-07 20:26:55 +00:00
buffer_diff Fix diff recalculation hang (#28377) 2025-04-10 22:58:41 +00:00
call VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
channel Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
cli Try to weak-link ScreenCaptureKit always (#28585) 2025-04-11 17:38:14 +00:00
client Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
clock Add the ability to follow the agent as it makes edits (#29839) 2025-05-04 08:28:39 +00:00
collab Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
collab_ui Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
collections Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
command_palette Simplify the SerializableItem::cleanup implementation (#29567) 2025-04-28 22:15:24 +00:00
command_palette_hooks Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
component component: Component crate cleanup (#29967) 2025-05-06 03:41:52 +00:00
context_server context_store: Refactor state management (#29910) 2025-05-05 21:36:12 +02:00
copilot Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
credentials_provider Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
dap debugger: Fix up Rust test tasks definitions (#30232) 2025-05-08 14:39:56 +02:00
dap_adapters Add rdbg for Ruby (#30126) 2025-05-08 09:37:20 +01:00
db Simplify the SerializableItem::cleanup implementation (#29567) 2025-04-28 22:15:24 +00:00
debugger_tools debugger: Run build in terminal (#29645) 2025-05-05 20:08:14 +00:00
debugger_ui debugger: Fix removal of running sessions when spawning a debug session (#30384) 2025-05-09 22:52:43 +00:00
deepseek Default to fast model for thread summaries and titles + don't include system prompt / context / thinking segments (#29102) 2025-04-19 23:26:29 +00:00
diagnostics Allow to temporarily toggle diagnostics in the editor (#30316) 2025-05-08 21:47:32 +00:00
docs_preprocessor Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
editor editor: Prevent vertical scrollbar from overlapping with buffer headers (#30477) 2025-05-11 17:54:57 +02:00
eval Wait to locate system-installed Node until the shell environment is loaded (#30416) 2025-05-09 19:24:28 +00:00
extension debugger/extensions: Revert changes to extension store related to language config (#30225) 2025-05-08 14:01:39 +02:00
extension_api zed_extension_api: Release v0.5.0 (#29802) 2025-05-02 15:58:54 +00:00
extension_cli Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
extension_host debugger/extensions: Revert changes to extension store related to language config (#30225) 2025-05-08 14:01:39 +02:00
extensions_ui Suggest nim extension for *.nim files (#29912) 2025-05-05 11:46:42 +00:00
feature_flags agent: Remove feature flag checks (#30055) 2025-05-06 21:38:05 -04:00
feedback feedback: Update issue template URL (#28790) 2025-04-15 21:36:30 -04:00
file_finder Allow opening the FS root dir as a remote project (#30190) 2025-05-07 16:50:57 -07:00
file_icons Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
fs windows: Remove extra empty line when loading default settings (#30344) 2025-05-09 19:00:16 +08:00
fsevent Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
fuzzy Properly score fuzzy match queries with multiple chars in lower case (#29794) 2025-05-02 15:02:53 +00:00
git Improve handling of remote-tracking branches in the picker (#29744) 2025-05-01 21:24:26 -04:00
git_hosting_providers VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
git_ui git_ui: Fix co-author tooltip message (#30426) 2025-05-09 15:50:25 -04:00
go_to_line editor: Add minimap (#26893) 2025-05-07 23:11:09 +03:00
google_ai Add support for getting the token count for all parts of Gemini generation requests (#29630) 2025-05-04 21:32:45 +00:00
gpui ui: Account for padding of parent container during scrollbar layout (#27402) 2025-05-11 21:40:45 +02:00
gpui_macros Rename regex search tool to grep and accept an include glob pattern (#29100) 2025-04-20 00:53:30 +00:00
gpui_tokio Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
html_to_markdown Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
http_client Remove individual URL overrides for LLM service (#30290) 2025-05-08 17:54:46 +00:00
http_client_tls Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
icons agent: Fix layout shift due to the "Generating" label (#30422) 2025-05-09 16:20:14 -03:00
image_viewer Add the ability to follow the agent as it makes edits (#29839) 2025-05-04 08:28:39 +00:00
indexed_docs indexed_docs: Remove some unnecessary cloning (#30236) 2025-05-08 10:59:56 +00:00
inline_completion Show edit predictions usage in status bar menu (#29046) 2025-04-18 14:15:19 +00:00
inline_completion_button zeta: Update onboarding modal with subscription info (#30439) 2025-05-09 22:46:10 +00:00
install_cli install_cli: Show feedback when installing CLI from welcome screen (#28532) 2025-04-11 01:47:40 +05:30
journal VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
language editor: Fix function completion expansion in string contexts and call expressions (#30351) 2025-05-09 14:52:52 +05:30
language_extension debugger/extensions: Revert changes to extension store related to language config (#30225) 2025-05-08 14:01:39 +02:00
language_model Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
language_model_selector agent: Fuzzy search in model selector (#30281) 2025-05-09 11:36:29 +00:00
language_models Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
language_selector Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
language_tools Add searchable global tab switcher (#28047) 2025-04-28 09:21:27 +00:00
languages editor: Fix function completion expansion in string contexts and call expressions (#30351) 2025-05-09 14:52:52 +05:30
livekit_api Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
livekit_client Fix deafening new participants (#28330) 2025-04-08 16:01:27 +00:00
lmstudio lmstudio: Fix streaming not working in v0.3.15 (#30013) 2025-05-06 12:59:36 -04:00
lsp Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
markdown markdown: Fix out of range panic in parser (#30510) 2025-05-11 15:08:37 +00:00
markdown_preview Use image cache to stop leaking images (#29452) 2025-04-29 19:30:16 +00:00
media chore: Make objc a workspace level crate (#28258) 2025-04-07 18:46:09 +00:00
menu agent: Add new panel navigation dropdown (#29539) 2025-04-29 21:58:45 -03:00
migrator settings: Migration for fixing duplicated agent keys (#30237) 2025-05-08 12:38:19 +00:00
mistral mistral: Add new Mistral medium model (#30171) 2025-05-07 21:57:15 -04:00
multi_buffer agent: Review edits in single-file editors (#29820) 2025-05-02 17:57:16 -03:00
node_runtime Wait to locate system-installed Node until the shell environment is loaded (#30416) 2025-05-09 19:24:28 +00:00
notifications Merge Component and ComponentPreview trait (#28365) 2025-04-08 16:09:06 -06:00
ollama Improve Ollama tool use (#30120) 2025-05-07 15:37:06 +00:00
open_ai open_ai: Remove list of supported countries (#29347) 2025-04-24 14:55:37 +00:00
outline Highlight merge conflicts and provide for resolving them (#28065) 2025-04-23 12:38:46 -04:00
outline_panel editor: Remove extra quotes from outline search term (#29829) 2025-05-06 10:50:33 +03:00
panel Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
paths debugger: Update New Session Modal (#30018) 2025-05-08 16:19:14 +00:00
picker agent: Keyboard navigation improvements (#30274) 2025-05-09 13:52:06 +00:00
prettier Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
project Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
project_panel Use ESC to cancel dragging in Zed (#30318) 2025-05-08 22:58:38 +00:00
project_symbols Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
prompt_store assistant_context_editor: Remove suggest edits (#30286) 2025-05-08 17:27:49 +00:00
proto language_models: Improve subscription states in the Agent configuration view (#30252) 2025-05-08 09:10:50 -04:00
recent_projects Allow opening the FS root dir as a remote project (#30190) 2025-05-07 16:50:57 -07:00
refineable Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
release_channel Fix handling of --system-specs argument so it happens before Application::new (#29240) 2025-04-22 21:32:32 +00:00
remote Add a test for remote tool use by the agent (#30289) 2025-05-08 16:53:04 -04:00
remote_server Wait to locate system-installed Node until the shell environment is loaded (#30416) 2025-05-09 19:24:28 +00:00
repl Implement rendering of images with data urls in markdown (#30322) 2025-05-08 18:26:24 -07:00
reqwest_client Fix license symlinks (#29758) 2025-05-01 19:24:14 +00:00
rich_text Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
rope chore: Bump Rust version to 1.86 (#28021) 2025-04-03 23:32:50 +02:00
rpc rpc: Remove llm module in favor of zed_llm_client (#28900) 2025-04-16 20:22:44 +00:00
rules_library Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
schema_generator Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
search Add ability to keybind search filter (#30327) 2025-05-09 12:29:03 +00:00
semantic_index Reuse conversation cache when streaming edits (#30245) 2025-05-08 14:36:34 +02:00
semantic_version Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
session Avoid unnecessary DB writes (#29417) 2025-04-25 17:41:49 +03:00
settings Fall back to old key when loading agent settings (#30001) 2025-05-06 14:31:38 +00:00
settings_ui Add searchable global tab switcher (#28047) 2025-04-28 09:21:27 +00:00
snippet Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
snippet_provider snippet_provider: Use proper casing of VsCode in identifiers (#29038) 2025-04-18 12:11:54 +00:00
snippets_ui Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
sqlez Simplify the SerializableItem::cleanup implementation (#29567) 2025-04-28 22:15:24 +00:00
sqlez_macros Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
story Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
storybook Merge Component and ComponentPreview trait (#28365) 2025-04-08 16:09:06 -06:00
streaming_diff Introduce a new StreamingEditFileTool (#29733) 2025-05-01 17:37:43 +02:00
sum_tree Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
supermaven Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
supermaven_api Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
tab_switcher Add searchable global tab switcher (#28047) 2025-04-28 09:21:27 +00:00
task debugger: Update New Session Modal (#30018) 2025-05-08 16:19:14 +00:00
tasks_ui debugger: Add debug task picker to new session modal (#29702) 2025-05-02 08:38:29 +00:00
telemetry Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
telemetry_events Add new action to run agent eval (#29158) 2025-04-21 21:30:21 -07:00
terminal Do not flicker when switching cmd-hovered words in terminal (#30098) 2025-05-07 11:04:11 +00:00
terminal_view ui: Account for padding of parent container during scrollbar layout (#27402) 2025-05-11 21:40:45 +02:00
text format: Re-implement support for formatting with code actions that contain commands (#28392) 2025-04-09 01:53:54 +00:00
theme theme: Add scrollbar_thumb_active_background color (#30177) 2025-05-07 23:15:32 +03:00
theme_extension Add workspace-hack (#27277) 2025-04-02 13:26:34 -07:00
theme_importer theme: Add scrollbar_thumb_active_background color (#30177) 2025-05-07 23:15:32 +03:00
theme_selector theme_selector: Don't select last theme when fuzzy searching (#28278) 2025-04-28 14:29:17 +00:00
time_format agent: Add date separators to Thread History (#29961) 2025-05-06 10:18:48 +00:00
title_bar title_bar: Hide plans without a subscription period (#30478) 2025-05-10 20:52:38 +00:00
toolchain_selector toolchain: Respect currently focused file when querying toolchains (#28875) 2025-04-16 19:05:57 +02:00
ui ui: Account for padding of parent container during scrollbar layout (#27402) 2025-05-11 21:40:45 +02:00
ui_input Merge Component and ComponentPreview trait (#28365) 2025-04-08 16:09:06 -06:00
ui_macros Merge Component and ComponentPreview trait (#28365) 2025-04-08 16:09:06 -06:00
ui_prompt markdown: Don't retain MarkdownStyle in favor of using MarkdownElement directly (#28255) 2025-04-07 19:03:24 +00:00
util Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
util_macros Fix license symlinks (#29758) 2025-05-01 19:24:14 +00:00
vim Add :h[elp] vim command (#30179) 2025-05-07 17:26:42 -07:00
vim_mode_setting VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00
web_search agent: Expose web search tool to beta users (#29273) 2025-04-23 15:30:20 +00:00
web_search_providers Remove individual URL overrides for LLM service (#30290) 2025-05-08 17:54:46 +00:00
welcome welcome: Theme preview tile (#29689) 2025-04-30 17:46:11 +00:00
workspace ui: Account for padding of parent container during scrollbar layout (#27402) 2025-05-11 21:40:45 +02:00
worktree Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
zed chore: Move component_preview into zed (#30480) 2025-05-10 22:25:35 +00:00
zed_actions Add :h[elp] vim command (#30179) 2025-05-07 17:26:42 -07:00
zeta Separate timeout and connection dropped errors out (#30457) 2025-05-10 15:12:58 +03:00
zlog zlog: Fall back to printing module path instead of *unknown* or just crate name (#29691) 2025-05-01 10:59:51 -04:00
zlog_settings VSCode Settings import (#29018) 2025-04-23 20:54:09 +00:00