Skip to content

v0.7.3

Latest

Choose a tag to compare

@huacnlee huacnlee released this 12 Oct 07:27
· 86 commits to main since this release
67265a3

GPUI Kit v0.7.3 replaces v0.7.2, which is yanked: it contains every v0.7.2 change and moves GPUI to the gpui-pre 0.3.9 snapshot. Upgrade from v0.7.1 or v0.7.2 directly to v0.7.3.

This release adds a readonly Diff viewer with a Git history example, an optional GPUI Fast backend, and configurable dialog entrances. It refreshes TextView typography and improves text selection, Editor completions, tables, menus, tooltips and accessibility, and stops several per-frame state writes that made long scrolling views rebuild.

New components and runtime

  • Diff: display application-supplied unified or Git patches with the virtualized, readonly Diff view. DiffFile::parse prepares each file and one DiffState shows them all, with Unified or Split layout (DiffMode), syntax highlighting, folding, change navigation, inline word or character emphasis, soft wrapping, annotations, and two-way or diff3 conflict display. Applications own patch loading, review comments and saving. (#3378)
  • Git history example: examples/tig is a desktop Git history browser built on Diff, with a resizable commit and file sidebar, Split layout and a settings menu; the Diff review APIs it needed are complete. (#3388)
  • GPUI snapshot: exact snapshot dependencies are updated to =0.3.9 (zed@93d7456), and the optional GPUI Fast backend requires gpui-fast 0.1.7 on the same snapshot. (#3459)
  • GPUI Fast backend: enable the optional gpui-fast feature (gpui-kit = { version = "0.7", features = ["gpui-fast"] }) to run on GPUI Fast instead of the default gpui-pre backend. Imports and macros are unchanged, and Windows applications embed a single manifest. (#3375, #3380)
  • Fewer rebuilds: selectable text, the text selection layer, Root, inputs, TextViewState and resizable panels no longer write state on frames where nothing changed, so retained views under GPUI Fast stay on their scroll layer. (#3407, #3418)

Editor and text input

  • On-demand completions: dispatch the Editor-only ShowCompletions action or call show_completions to request suggestions from a command, menu or application shortcut; no default shortcut is bound. (#3411)
  • Programmatic multi-cursor: InputState::add_selection adds a selection while keeping the existing ones, enabling features such as select all occurrences. (#3403)
  • Context menus: an input keeps its selection and focus ring while its context menu is open, and submenus inherit the parent menu's action_context, so actions such as Select All reach the source Textarea. Custom on_context_menu builders now run after the input is released and can read its cursor and text. (#3382, #3433)
  • Fixed completion and code-action popups lagging one frame behind the caret, and auto-grow Textareas collapsing to min_rows after set_auto_grow changes the limits. (#3412, #3430)

Markdown and text rendering

  • Typography: TextView headings build hierarchy with weight, sizes and spacing scale with the inherited font size, and lists, code, links and tables are more restrained. See Behavior changes. (#3371)
  • Selection: mouse selections include block MarkdownPlugin content as whole blocks, completed selections survive style, zoom and width changes, and the selection paints under the glyphs so opaque selection colors keep text readable. (#3373, #3390, #3421, #3439)
  • Tables: narrow columns size from measured text width and stay on one line, and rounded table frames keep clean corners at any horizontal scroll offset. RoundedFrameCover is available for application frames with their own rounded scroll viewports. (#3399, #3309, #3400)
  • Fixed inline <mark> highlights in Markdown, including color and background-color attributes. (#3425)

Components

  • Dialog: choose an entrance with entrance(DialogEntrance::Fade), FadeSlide, None or the default SlideDown on Dialog and AlertDialog; AlertDialog::margin_top moves an alert off the default top offset. (#3405, #3404)
  • Tooltip: install TooltipDefaults to set the application-wide show delay and grace period, or override one trigger with tooltip_show_delay. (#3376)
  • DataTable: header_row_height sets header rows apart from body rows; the sort icon is a labelled button; visible_rows_changed reports one-row and empty tables; a right-clicked cell's outline clears on the next click, exposed through TableState::right_clicked_cell. (#3420, #3396, #3397, #3413)
  • ContextMenu: a long press opens the menu on touch devices, and the menu takes focus before its first frame, avoiding a debug-build abort with accessibility active. (#3393, #3422)
  • TabBar: clicking a clipped tab scrolls it into view with the next tab peeking. (#3419)
  • Dock: closing the focused tab hands focus to the tab that replaces it. (#3409)
  • DropdownButton: menu_accessibility_label names the caret-only menu trigger, with a localized "More options" default. (#3410)
  • Settings: focus rings stay inside the list viewport. (#3394)
  • UI tests: Progress, ProgressCircle and TitleBar can be found with TestWindowExt::find. (#3383)

Documentation

  • Focus and dialogs: the guides explain recovering focus when the focused element stops rendering, and the open_dialog builder and footer contracts. (#3386, #3406)

Behavior changes

TextView renders with new default typography. Heading sizes follow the inherited font size, the paragraph gap is 0.75rem (was 1rem), and list, inline code, link and table cell styling change. The paragraph gap, headings and code blocks can be restored through the existing style hooks. (#3371)

 TextViewStyle::default()
+    .paragraph_gap(rems(1.))

Table column widths in the default wrap layout change for most Markdown tables. A drag that starts and ends inside the same block plugin no longer selects it. (#3399, #3390)

While a context menu is open, focus that the application moves elsewhere is no longer pulled back to the menu. (#3422)

TableDelegate::visible_rows_changed now fires with 0..1 for a one-row table and 0..0 when the rows drop to none, and its end never passes rows_count. (#3397)

TooltipRequest::placement is deprecated in favor of with_placement. (#3376)

- TooltipRequest::new(bounds, build).placement(Placement::Right)
+ TooltipRequest::new(bounds, build).with_placement(Placement::Right)

Thank you to everyone who contributed code, documentation, testing, and feedback!

What's Changed

  • text_view: Improve default typography by @madcodelife in #3371
  • text_view: Include block plugins in mouse selections by @lurenjia534 in #3373
  • kit: Add optional gpui-fast backend by @huacnlee in #3375
  • tooltip: Make show delay and grace period configurable with TooltipDefaults by @madcodelife in #3376
  • docs: Explain recovering focus when the focused element stops rendering by @AncientPixel in #3386
  • diff: Add readonly patch viewer by @huacnlee in #3378
  • kit: Use one Windows manifest with GPUI Fast by @huacnlee in #3380
  • test: Make Progress and TitleBar findable in UI tests by @AncientPixel in #3383
  • input: Preserve selection, focus ring and context menu actions by @lurenjia534 in #3382
  • diff: Add a Git history example and complete review APIs by @huacnlee in #3388
  • text_view: Ignore gestures that stay inside one block plugin by @ylinwind in #3390
  • text_view: Round the first and last table rows to the frame radius by @ihavecoke in #3309
  • menu: Open a context menu with a long press on touch by @Bombatomica64 in #3393
  • text_view: Keep narrow table columns on one line by @madcodelife in #3399
  • settings: Keep focus rings inside the list viewport by @lurenjia534 in #3394
  • scrollable_mask: Keep rounded scroll-table corners clean at any scroll offset by @ihavecoke in #3400
  • dialog: Add margin_top to AlertDialog by @xxww0098 in #3404
  • input: Add InputState::add_selection for programmatic multi-cursor by @sola-ryu in #3403
  • text_selection: Stop writing selection state on every frame by @huacnlee in #3407
  • table: Make the sort icon a labelled button by @AncientPixel in #3396
  • table: Report visible row ranges of one row or none by @AncientPixel in #3397
  • dialog: Support configurable entrance animations by @xxww0098 in #3405
  • docs: Explain the open_dialog builder and footer contracts by @xxww0098 in #3406
  • dock: Hand the focus to the tab that replaces a closed one by @sola-ryu in #3409
  • dropdown_button: Add A11y names for the menu trigger by @sola-ryu in #3410
  • text, resizable: Stop notifying state that did not change by @huacnlee in #3418
  • editor: Add on-demand completion commands by @sola-ryu in #3411
  • table: Clear a right-clicked cell's outline on the next click by @sola-ryu in #3413
  • tab: Scroll a clicked tab into view with the next one peeking by @madcodelife in #3419
  • table: Allow a header row height separate from the body by @xhofe in #3420
  • menu: Focus a context menu before its first frame by @madcodelife in #3422
  • text: Preserve logical selection across presentation changes by @TomiXRM in #3421
  • text: Keep inline HTML mark highlights in Markdown by @henrikogaard in #3425
  • input: Anchor completion/code-action popups to the current frame's caret by @sola-ryu in #3412
  • input: Run custom context menu builders after releasing the input by @costajohnt in #3433
  • input: Keep auto-grow rows fitted when the limits change by @sneffets in #3430
  • text: Paint TextView selection under the glyphs by @cesartalen in #3439
  • kit: Update GPUI to gpui-pre 0.3.9 by @huacnlee in #3459

New Contributors

Full Changelog: v0.7.1...v0.7.3