Skip to main content

WindowGroup

Struct WindowGroup 

pub struct WindowGroup {
    pub id: u64,
    pub hover_resize: bool,
    pub maximized: bool,
    pub search_active: bool,
    pub focused: bool,
    /* private fields */
}

Fields§

§id: u64§hover_resize: bool§maximized: bool§search_active: bool§focused: bool

The active group of the active strip, set by the shell each frame. Consumed by the active TileHost, which paints the signal on the window’s own edge/shadow rather than the group drawing a ring around both the tab row and the card.

Implementations§

§

impl WindowGroup

pub fn new( id: u64, tabs_with_content: Vec<(TabDescriptor, TileContent)>, active_id: u64, width: WindowWidth, ) -> WindowGroup

pub fn from_hosts( id: u64, tabs: Vec<(TabDescriptor, TileHost)>, active_id: u64, width: WindowWidth, ) -> WindowGroup

Mount prepared hosts without unwrapping checked component custody.

pub fn width(&self) -> WindowWidth

pub fn set_external_navigation(&mut self, external: bool)

pub fn with_maximized(self, maximized: bool) -> WindowGroup

pub fn set_focused(&mut self, focused: bool) -> bool

pub fn focused(&self) -> bool

pub fn start_spawn_animation(&mut self)

pub fn layout_width_px(&self) -> f64

Width the strip must reserve this frame — the spring value while a transition is in flight, otherwise the persisted fraction.

pub fn dest_width_px(&self) -> f64

Width the slot is going to, in the same pixels as Self::layout_width_px. A later usable-basis change does not rewrite an in-flight target, so overflow can use this instead of the current fraction.

pub fn spawn_anim_t(&self) -> f32

The same eased factor draw uses for alpha, scale and offset.

pub fn start_closing(&mut self)

pub fn next_frame(&mut self)

A new frame may step the width spring and rebuild a closing group once more. Called when the group is drawn, and by a row for groups it culled from a frame, so an off-screen transition still ends.

pub fn is_closing(&self) -> bool

pub fn close_complete(&self) -> bool

pub fn should_show_maximized_chrome(&self, cursor_y: Option<f64>) -> bool

pub fn strip_usable_px(&self) -> f64

pub fn set_strip_usable_px(&mut self, px: f64)

Called by crate::widget::GroupRow::build_layout before each child builds its own node.

pub fn resolved_width_px(&self) -> f64

pub fn begin_resize(&mut self, pointer_x: f32)

pub fn update_resize(&mut self, pointer_x: f32)

pub fn end_resize(&mut self)

pub fn set_width(&mut self, w: WindowWidth)

Does NOT touch resize_origin — the inter-group handle owns its own drag state; follow up with Self::stamp_pending_width_change on release.

pub fn set_width_px(&mut self, px: f64)

Converts to a fraction immediately so nothing downstream ever stores pixels. Live handle drags call this so the seam stays welded to the pointer; a committed resize goes through Self::set_width and springs.

pub fn stamp_pending_width_change(&mut self)

pub fn take_pending_width_change(&mut self) -> Option<u16>

pub fn take_pending_tab_reorder(&mut self) -> Option<(usize, usize)>

pub fn take_pending_search_open(&mut self) -> Option<u64>

pub fn take_pending_new_tab(&mut self) -> Option<u64>

pub fn take_pending_close_commits(&mut self) -> Vec<u64>

Drain user-initiated close intents for the shell lifecycle owner. Programmatic closes do not enter this queue because their caller has already committed the workspace mutation before starting the fade.

pub fn new_tab_rect(&self) -> Rect

pub fn bind_tab_records( &mut self, store: &RecordStore, record_for: impl Fn(u64) -> RecordCheckout, )

Not done inside Self::new: a group is also built by a bare ui host and by tests with no records at all, where an unbound tile keeps editing whatever document the parent pass carries.

pub fn any_tile_opening(&self) -> bool

Deliberately not Widget::opening, which is false as soon as one tab has drawn even if a tab behind it is still starting (and still needs animation frames).

pub fn active_host_mut(&mut self) -> Option<&mut TileHost>

pub fn active_host(&self) -> Option<&TileHost>

Read-only twin of Self::active_host_mut — avoids a &mut borrow that would conflict with the frame builder’s own borrows.

pub fn complete_capture_rect(&self) -> Option<Rect>

Complete capture bounds for the active app, including this group’s tab decoration. None preserves the normal whole-window capture path.

pub fn draw_complete_capture( &mut self, scene: &mut Scene, transform: Affine, tr: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> Option<Rect>

Paint a complete semantic app canvas with the same shared window card and tab decoration as the live group, without changing live layout.

pub fn cancel_tab_drag(&mut self) -> bool

Cancel the tab bar’s gesture while preserving every live tab host.

pub fn take_tab_detach(&mut self) -> Option<(u64, Point)>

Returns (tab_id, release_point) if the user released a drag outside the bar’s own rect. The parent widget hit-tests the release point against sibling bars to find a target.

pub fn take_pending_maximize_change(&mut self) -> Option<bool>

pub fn toggle_maximized(&mut self)

Keyboard/accessibility twin of the frame maximize button.

pub fn publish_maximize_intent_for_tests(&mut self)

Not gated by cfg(any(test, debug_assertions)): ui’s cfg(test) only applies when ui itself is under test, so the downstream shell’s --release test build (debug_assertions off) would lose this method.

pub fn detach_tab(&mut self, tab_id: u64) -> Option<(TabDescriptor, TileHost)>

pub fn insert_detached_tab( &mut self, idx: usize, desc: TabDescriptor, host: TileHost, )

The sibling path — splitting into a brand-new group — plays the group-level fade instead, in GroupRow::split_tab_into_new_group, so the two never double up.

pub fn reorder_tab(&mut self, from: usize, to: usize) -> bool

Move an existing tab to a persisted order without producing a user-gesture one-shot. The tab bar and content hosts are parallel vectors, so a document-driven reorder has to move both or the pill and visible application diverge.

pub fn from_detached( id: u64, desc: TabDescriptor, host: TileHost, width: WindowWidth, ) -> WindowGroup

pub fn tab_count(&self) -> usize

pub fn bar_rect(&self) -> Rect

pub fn tab_rects(&self) -> &[Rect]

pub fn bar_grab_hit(&self, p: Point) -> bool

True inside the bar rect but not on a tab pill and not in the right-edge resize band. Used by GroupRow to arbitrate a press into a group-reorder drag vs. a tab/resize gesture.

pub fn touch_grab_hit(&self, p: Point) -> bool

Where a finger can grab the whole group: anywhere on its tab bar, tabs included, except the new-tab button and the resize edge.

pub fn resize_grab_hit(&self, p: Point) -> bool

True when p is in the group’s trailing-edge resize target. GroupRow uses this before arming a whole-group drag so the two gestures cannot race; this matters especially for a one-group strip, where this grip is the only resize affordance.

pub fn resize_grab_rect(&self) -> Option<Rect>

Painted trailing-edge grip, shared with compositor input admission.

pub fn drop_index_for(&self, release_point: Point) -> usize

pub fn update_tab_descriptor(&mut self, descriptor: TabDescriptor) -> bool

Update chrome metadata without replacing the document/component owner.

pub fn tabs(&self) -> &[TabDescriptor]

pub fn set_tab_icon(&mut self, id: u64, icon: Option<AppImage>) -> bool

Replace tab id’s artwork. true when that changed what it paints.

pub fn active_tab_id(&self) -> u64

pub fn presentation_bounds(&self) -> WindowGroupBounds

Layout bounds and the control targets cached by production paint. A missing target means it is not currently painted.

pub fn active_maximize_rect(&self) -> Option<Rect>

Painted maximize target for the active tab, if that tab currently has one. This is immutable presentation geometry used by accessibility and optional developer diagnostics.

pub fn restore_rect(&self) -> Rect

Painted restore target for a maximized group. A zero rectangle means the control is not currently visible.

pub fn take_tab_activation(&mut self) -> Option<u64>

Drain an explicit user selection from the tab bar. Model-driven set_active_tab calls never create this edge.

pub fn set_active_tab(&mut self, id: u64) -> bool

The bar’s active_id is the authoritative copy (the shell flushes it into the persisted tree after input), so a programmatic focus jump must land here, not only in the tree.

pub fn cycle_active_tab(&mut self, dir: i32) -> bool

pub fn request_close_active_tab(&mut self) -> bool

Exists because close was pointer-only: the ✕ only paints on an active/hovered/pressed pill, so there was no route for someone driving by keyboard.

pub fn take_tab_context_menu(&mut self) -> Option<(u64, Point)>

pub fn request_close_tab(&mut self, tab_id: u64) -> bool

Drains the bar’s pending_close immediately rather than waiting for the next handle_event, since a menu pick arrives outside pointer dispatch and would otherwise leave the host un-faded until an unrelated event landed.

pub fn cancel_tab_close(&mut self, tab_id: u64) -> bool

Retain the native client while its host awaits actual close admission. The live host and tab metadata survive the provisional close animation.

pub fn drag_in_flight(&self) -> bool

pub fn edge_resize_in_flight(&self) -> bool

Whether this group’s own edge is being dragged to resize it.

pub fn set_external_drag_hover(&mut self, cursor: Option<Point>)

A no-op while the bar has its own pending_drag in flight, so the source bar’s own indicator stays put.

pub fn bar_mut_for_tests(&mut self) -> &mut TabBar

crates/session/shell/tests/ integration tests need this from outside the crate.

pub fn close_rect_for_tests(&self, tab_id: u64) -> Option<Rect>

pub fn tile_kind_labels_for_tests(&self) -> Vec<String>

pub fn active_host_rect_for_tests(&self) -> Option<Rect>

pub fn bar_for_tests(&self) -> &TabBar

pub fn host_for_tab_mut(&mut self, tab_id: u64) -> Option<&mut TileHost>

Detaching and re-inserting would do the same job plus three things nobody asked for: activate the tab, play the arrival fade, and move it to the caller’s index.

pub fn content_rect_for_tab(&self, tab_id: u64) -> Option<Rect>

Laid-out content bounds for a tab. Shell-owned system windows use this as their ordinary tile viewport instead of inventing separate floating geometry.

Trait Implementations§

§

impl ActionControls for WindowGroup

§

fn has_pending_control_invocation(&self) -> bool

Local control intent queued behind asynchronous startup preparation. A scheduling hint only; the host still checks live authority.
§

fn install_control_custody( &mut self, domain: &ControlDomain, attachment: CustodyAttachment, )

Bind retained producers before their first callback. Private holders must override this; child traversal alone never certifies full coverage.
§

fn take_control_invocation(&mut self) -> Option<ControlInvocation>

Drain one queued action-bound control intent from this subtree.
§

fn take_attributed_control_invocation( &mut self, ) -> Option<(ControlInvocation, Option<InvocationId>)>

Self::take_control_invocation, with the effect invocation the intent continues when an effect’s handler or completion queued it: the host applies it for that invocation’s invoker.
§

fn on_control_invocation_result( &mut self, address: &ActionAddress, result: &Result<ResourceOperationStart, DoorError>, )

Report the admission result of one queued local control invocation. Accepted means queued, not completed; confirmation remains an error while the host offers its normal confirmation UI. This notification grants no document authority and must not retry the invocation itself.
§

fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>

Inventory action-native and explicitly legacy controls. A widget that owns an emitter prepends its metadata to its descendants’ inventory.
§

fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>

Action-emitter bindings in the same order and exposure as the full inventory. Custom private inventories keep their authoritative default; wrappers can avoid allocating semantic-only accessibility snapshots.
§

fn has_action_control_bindings(&self) -> bool

Whether this exposed subtree contains controls consuming action availability. An override must match whether control_action_bindings contains an Action, including the same modal child exposure, regardless of current availability.
§

fn refresh_control_action_availability( &mut self, allowed: &HashSet<ActionAddress>, )

Push the fresh local permission-filtered action surface into every retained control: refresh this widget’s own emitter, then its children.
§

impl CollaborationTopology for WindowGroup

§

fn collaboration_children_mut(&mut self) -> Vec<&mut dyn Widget>

§

impl ComponentLifecycle for WindowGroup

§

fn unsaved_documents(&self, doc: &AutoCommit) -> Vec<UnsavedDocument>

App-declared external document obligations. An in-memory record set is not evidence that an editable file has been saved.
§

fn checkpoint_components(&mut self) -> Vec<String>

Non-destructive persistence checkpoint. Never closes a wake scope or removes a tree; a failed host close must leave every child usable.
§

fn finish_admitted_close(&mut self) -> Vec<ComponentCloseReport>

Only the host may call this after every checkpoint succeeded, without dispatching another document mutation in between.
§

fn close_components(&mut self) -> Vec<ComponentCloseReport>

Capture and close nested components before removing their live trees, transferring all recovery reports to the caller.
§

fn take_component_close_reports(&mut self) -> Vec<ComponentCloseReport>

Drain inert close-report ownership once; never invoke ordinary app callbacks through a closed component.
§

fn on_window_close_requested(&mut self) -> WindowCloseAdmission

Admit or defer the primary native window’s ordinary close request. Roots that defer must later produce a one-shot close intent.
§

fn take_window_close_intent(&mut self) -> bool

One-shot approval after an earlier deferred ordinary window close.
§

fn take_replacement(&mut self) -> Option<ComponentReplacement>

The component this root’s own component asked to show in its place (AppComponent::take_replacement), for the host that mounted it. A component nested deeper answers to the host that mounted it, so the default reaches no child.
§

fn take_save_status_presentation(&mut self) -> bool

One-shot: the durability of this root’s own component’s record changed since this was last asked, and the root already synced with the new state. A host that asks (an App) presents it with a frame of its own, not a rebuilt tree; one that does not ask sees it through take_structure_dirty.
§

impl FloatingSurfaceProvider for WindowGroup

§

fn on_floating_surface_focus_changed(&mut self, id: Option<&str>, focused: bool)

Route native keyboard focus to the exact presentation instance.
§

fn on_floating_surface_ime_source_changed(&mut self, id: Option<&str>)

Keep the exact secondary presentation’s editor logically focused while the platform deliberately retains text-input focus on its source. Read more
§

fn on_floating_surface_event_source(&mut self, id: Option<&str>)

Identify the native surface delivering the current input event. The host resets this immediately after dispatch; it grants no authority.
§

fn floating_surface_accessibility(&self, id: &str) -> Option<AccessNode>

The retained semantic subtree presented in one secondary window.
§

fn perform_floating_surface_accessibility_action( &mut self, id: &str, target: &str, action: &Action, state: &mut Edits<'_>, path: &ExId, ) -> bool

§

fn floating_surface_ime(&self, id: &str) -> Option<(ImePurpose, Rect)>

IME purpose and desktop-logical caret rect for one secondary window.
§

fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>

One-shot request to hand app content to the shared floating-surface host. Shell and in-app hosts consume the same description, so PiP does not require a second rendering/widget API.
§

fn take_capture_studio_request(&mut self) -> Option<CaptureMode>

One-shot request for the session shell’s shared capture/PiP chooser.
§

fn take_floating_surface_source_updates(&mut self) -> Vec<(String, Rect)>

Rising-edge source-geometry updates for an adopted floating surface.
§

fn draw_floating_surfaces( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )

Paint app-owned content whose presentation has moved into shell space.
§

fn draw_floating_surface( &mut self, id: &str, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool

Paint exactly one app-owned presentation into its native window. Read more
§

fn set_floating_surface_bounds(&mut self, bounds: Rect)

Push the shell’s authoritative combined-output bounds into the owner.
§

fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>

Desktop-space presentations that need a native secondary window.
§

fn active_floating_surface_ids(&self) -> Vec<String>

Stable IDs whose underlying activity still exists.
§

fn on_floating_surface_host_message( &mut self, message: &FloatingSurfaceHostMessage, )

Deliver an acknowledged shell lifecycle edge back to the owner.
§

impl FrameworkHistoryTopology for WindowGroup

§

fn visit_framework_history( &self, visitor: &mut dyn FnMut(&HistoryHost, &dyn Widget), )

§

fn visit_framework_history_mut( &mut self, visitor: &mut dyn FnMut(&mut HistoryHost, &mut dyn Widget), )

§

impl Widget for WindowGroup

§

fn presented(&self) -> bool

Any, not all: a group with one live window and a second still starting must not blink out because a sibling tab hasn’t drawn.

§

fn opening(&self) -> bool

Only true while nothing has presented, so a group with one live window never turns into a placeholder because a sibling is starting.

§

fn cursor_shape(&self, point: Point) -> Option<CursorIcon>

Mirrors the inter-group crate::widget::ResizeHandle so both affordances give the same feedback.

§

fn is_layout_dirty(&self) -> bool

Layout follows the built tree: the tab bar (whenever it was built) and the active host. Inactive hosts have no taffy nodes until they are selected, which is a structural change, so their dirtiness must not keep the group re-measuring; the default would walk for_each_child and include them.

§

fn provide<'a>(&'a self, request: &mut Request<'a, '_>)

Answer a request for a capability this widget takes part in (see capability). Declare capabilities with crate::provides!.
§

fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)

Exclusive counterpart to Widget::provide.
§

fn keyboard_input_scope(&self) -> Option<u64>

Exact app instance whose non-text shortcuts this subtree owns when activation has no control target. Unbound desktop chrome may declare the active tab; component boundaries default to their captured owner.
§

fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>

Explicit app-owned region; never search secondary children implicitly.
§

fn apply_primary_vertical_scroll( &mut self, action: PrimaryScrollAction, ) -> PrimaryScrollResult

§

fn modal_capture(&self) -> Option<Rect>

Some(rect) when this subtree holds an open modal, its panel box. While any widget reports Some, the host suppresses its own global focus shortcuts and swallows unhandled pointer presses so nothing behind the modal is clickable. Containers MUST forward (the default does, via first Some among children).
§

fn next_wake_deadline(&self) -> Option<Instant>

Earliest wall-clock deadline at which this subtree needs a sync/redraw even if there is no input. Unlike needs_animation_frame, this keeps the event loop asleep until the requested instant and is appropriate for filesystem/status polling rather than animation.
§

fn set_platform_conventions(&mut self, conventions: PlatformConventions)

Receive host-selected platform conventions. The default propagates to retained children, keeping target-OS branches out of app code.
§

fn set_interaction_environment(&mut self, environment: InteractionEnvironment)

Receive the host’s current input capabilities. The default propagates through retained containers, so app code does not need device branches.
§

fn mount_native_views(&mut self, host: &NativeViewHost<'_>)

Attach native child views through this owner’s retained lifecycle topology. Read more
§

fn unmount_native_views(&mut self)

Tear native children down while their parent window still exists.
§

fn native_view_frame_start(&mut self)

Begin a native-view frame through this owner’s retained lifecycle topology.
§

fn children(&self) -> Vec<&dyn Widget>

§

fn children_mut(&mut self) -> Vec<&mut dyn Widget>

§

fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))

Allocation-free read-only child traversal. Existing custom containers inherit a compatibility adapter over Self::children; toolkit containers override this to walk their retained storage directly.
§

fn sync(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static))

Pull model state into this widget before layout. The default syncs the children Widget::children_mut returns; a widget overrides it only to read state of its own, or to sync children it does not expose there.
§

fn update(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static)) -> bool

Notice, between frames, state that lives outside the document (a chrome revision, a momentum scroll still ticking) and report whether anything changed. The default updates every child Widget::children_mut returns, without short-circuiting, so a container never freezes its descendants at build-time state; a widget overrides it to check state of its own and then forward.
§

fn build_layout( &mut self, taffy: &mut TaffyTree, theme: &Theme, node_map: &mut HashMap<NodeId, *mut dyn Widget>, ) -> NodeId

§

fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)

Take the geometry layout gave this node. The default keeps none, for widgets that neither draw nor hit-test.
§

fn draw( &mut self, scene: &mut Scene, transform: Affine, tr: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )

Paint into scene. The default paints nothing.
§

fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)

Handle one input event with the runtime services for this retained node.
§

fn name(&self) -> &'static str

§

fn get_rect(&self) -> Rect

The rectangle this widget occupies. The default, for widgets that keep no geometry, is empty.
§

fn wants_pointer_capture(&self) -> bool

§

fn take_structure_dirty(&mut self) -> bool

True if this subtree’s structural composition (children inserted/removed) changed since the last frame; the App rebuilds the taffy tree when so. Reading clears it. The default drains every retained child (no short-circuit, so no child keeps a stale flag) and reports whether any was dirty; a leaf has no children and reports false. A container that changes its own child list sets its own flag and ORs it with this traversal.
§

fn needs_redraw(&self) -> bool

Default true (dirty every frame). Opt into incremental redraw by tracking a dirty: bool, setting it in handle_event/sync, and clearing it in mark_drawn(). Containers MUST forward: dirty iff any descendant is.
§

fn mark_drawn(&mut self)

Called after this widget’s scene lands in the composed frame, to clear a dirty flag. Default forwards to children.
§

fn layout_needs_measure(&self) -> bool

Whether a layout_dirty frame needs taffy to re-solve sizes (compute_layout) rather than just reposition already-solved boxes. Scrollable is the motivating override: it translates its origin in apply_layout without changing any taffy size, so re-solving on every scroll frame is pure waste.
§

fn has_pending_visual_work(&self) -> bool

Work already requested by this view whose completion will replace a placeholder. Unlike animations, this can be awaited by still captures.
§

fn needs_animation_frame(&self) -> bool

App polls this in Event::AboutToWait; without it a curve would freeze partway until an unrelated event woke it again.
§

fn native_input_snapshot( &self, _state: &(dyn Any + 'static), _path: &(dyn Any + 'static), ) -> Option<Value>

Read-only state evidence for opt-in scheduled native input diagnostics. Called only around diagnostic inputs, never during ordinary input or paint. Keep this inexpensive and root-local; snapshots may be logged verbatim. This verifies widget state, not rendered pixels or display presentation.
§

fn view_only_scroll(&self, _event: &WindowEvent) -> bool

Opt in only when this wheel event changes scroll geometry and nothing else: no document edit, focus/selection, action availability, resource declaration, pending command or work that requires sync. The runner still lays out, paints and refreshes accessibility geometry. Unknown handlers stay on the full synchronization/publication path.
§

fn callback_binding(&self) -> Option<CallbackBinding>

Runtime binding inherited by descendants in a matching layout topology.
§

fn has_separate_document_owner(&self) -> bool

Whether this widget introduces a document owner distinct from the runner’s outer State. This is a compatibility check, never identity or authority for history access or restore. Read more
§

fn history_owner(&self) -> Option<HistoryOwner>

Opaque actual custody for framework History source registration.
§

fn record_owners(&self) -> Vec<HistoryOwner>

Records this widget keeps open beside the document it shows, each synced on its own route: a framework app’s records in the person’s own room (crate::record::person). They take no part in this widget’s history or controls.
§

fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)

Apply, after the sync pass, what the widget took up there and must write: a worker’s answer, a chooser’s file, an event a child queued. Writes go only through typed actions on edits (a resource’s dispatcher); the host syncs again when the document changed. The default settles the children Widget::children_mut returns.
§

fn measure( &mut self, _known: Size<Option<f32>>, _available: Size<AvailableSpace>, _text_renderer: &mut TextRenderer, ) -> Size<f32>

§

fn layout_info(&self) -> Option<LayoutInfo>

Read-only resolved decisions for widgets with an explicit layout policy. None means the widget has no such policy; ordinary manual widgets remain valid. Values are available after build/settlement and carry real origins.
§

fn adjust_layout_style( &mut self, _taffy: &mut TaffyTree, _node: NodeId, _text: &mut TextRenderer, ) -> bool

Adjust this node’s style using its allocated size, before final geometry is applied. Return true only when the style changed (or an inherited decision child hooks read). An override may measure its owned children through ordinary references, entering their callback binding when present. Never reenter descendants through the raw node map while borrowing their parent, change topology, or build another layout tree. The shared host solver visits every registered widget, repeats layout at most eight times and skips a frame that does not settle.
§

fn observe_physical_input(&mut self, _input: PhysicalInput)

Observe this app’s ordinary foreground physical input before framework shortcuts consume it. Keep feedback ephemeral; this is not an input grant.
§

fn local_resource_operation_handlers(&self) -> &'static [&'static str]

Effect/view operation type ids this widget can actually dispatch. Read more
§

fn resource_operation_handlers(&self) -> HashSet<String>

§

fn test_id(&self) -> Option<&str>

Stable id for the e2e test harness; None falls back to a path-based key. Must be unique across the live tree — the registry resolves on first match, so a duplicate shadows the second occurrence.
§

fn as_any(&self) -> Option<&(dyn Any + 'static)>

Downcast to the concrete widget, for hosts and tests that reach a known widget through dyn Widget. Default None (a widget may borrow and so not be 'static); a widget opts in with Some(self), and a Decorator answers itself.
§

fn as_any_mut(&mut self) -> Option<&mut (dyn Any + 'static)>

§

fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool

Reveal a newly keyboard-focused descendant inside any enclosing viewport. Containers override this to scroll; ordinary widgets simply recurse toward the target and report whether it was found.
§

fn test_rects(&self) -> Vec<(String, Rect)>

Named hit rects for widgets that paint several affordances into one rect instead of composing children. Same space as Widget::get_rect; zero-area entries are dropped.
§

fn child_clip_rect(&self) -> Option<Rect>

Absolute logical clip applied to ordinary children during painting and pointer routing. Inspectors and enclosing scroll regions must respect this boundary instead of treating clipped descendants as visible extent.
§

fn take_action_palette_request(&mut self) -> Option<ActionAddress>

One-shot request to open the host’s action palette directly at a typed resource action. Parameter collection and permission checks remain host policy; widgets only name an address already present in resources().
§

fn take_search_request(&mut self) -> bool

One-shot request to open the host’s search palette, the same one the platform search shortcut opens. An app’s own search button latches it so search stays one shared host surface rather than an app overlay.
§

fn claims_raw_touch(&self, _point: Point) -> bool

Opt out of touch-to-pointer emulation for contacts that begin at point (logical coords, same space as Widget::get_rect). Read more
§

fn tooltip(&self) -> Option<&str>

Revealed after a dwell over the widget’s rect, via the toolkit’s one tooltip mechanism (crate::widget::tooltip::TooltipHost), hit-tested like cursor_shape so containers need not forward it. An icon-only control should also use this as its accessible name.
§

fn tooltip_side(&self) -> TooltipSide

Which side of the control its tooltip goes: below by default, beside it for a control in a vertical rail.
§

fn tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>

§

fn is_focusable(&self) -> bool

§

fn is_default_keyboard_focus(&self) -> bool

Preferred control when its app is explicitly activated without a valid saved control. Hosts still enforce visibility, enabled state and scope.
§

fn set_focus(&mut self, _focused: bool)

§

fn set_invalid(&mut self, _invalid: bool)

The form’s validation verdict for this control, set by Field::with_error: an invalid control edges itself in danger ink and reports invalid to assistive technology. Controls without a field face ignore it.
§

fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)

An explicit runner focus request, after resolving the actual keyboard owner. Retained flags and layout restoration are not user gestures. Containers can observe this to reveal the owning viewport.
§

fn is_focused(&self) -> bool

§

fn wants_tab_input(&self) -> bool

Whether a focused widget owns Tab instead of the host’s focus traversal. This is deliberately opt-in: ordinary form fields and controls retain platform-standard Tab/Shift+Tab navigation, while a code editor or terminal can receive the key for indentation or completion.
§

fn ime_cursor_rect(&self) -> Option<Rect>

Caret rectangle for the platform input method, in window-logical coordinates. Returning Some enables IME for the focused widget and positions its candidate window; non-text controls keep the default None and therefore disable IME.
§

fn traps_focus(&self) -> bool

While any widget answers true, the host restricts Tab/directional focus to this subtree (wrapping at the ends) and restores the prior focus once it goes back to false. Default false.
§

fn accessibility(&self) -> Option<AccessNode>

Role, name/description/value, and AccessState. Default None means presentational: the node is skipped and children reparent onto the parent. State must be derived, not stored so it can’t drift from draw; names must already be i18n!-resolved.
§

fn synthetic_accessibility_rect(&self, _path: &[usize]) -> Option<Rect>

Geometry for an immediate-mode semantic child from AccessNode::children. The path is its child-index path beneath this widget’s accessibility node. Returning a rect lets AccessKit activation inject the same click as pointer input.
§

fn focus_synthetic_accessibility(&mut self, _path: &[usize]) -> bool

Move this widget’s own immediate-mode focus to a synthetic semantic child. Retained widgets continue to use the ordinary taffy focus path.
§

fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>

Reparent one retained children entry beneath a synthetic child returned by accessibility. The returned index addresses AccessNode::children for this frame. Collections use this to place a real interactive row delegate inside its virtual ListItem/TreeItem instead of exporting a duplicate.
§

fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>

Reparent one retained children entry beneath a nested path of synthetic children returned by accessibility. Read more
§

fn accessibility_represents_child(&self, _child_index: usize) -> bool

Whether one retained children entry is already represented in this widget’s own synthetic accessibility tree, so the bridge must not export it a second time. A host that publishes a child’s semantics itself (to add its own controls inside the same dialog) answers true for that child; assistive technology then sees one copy, not two.
§

fn perform_action( &mut self, _action: &Action, _key_path: &[u64], _state: &mut Edits<'_>, _path: &(dyn Any + 'static), ) -> bool

Perform an accessibility Action on this widget, or on one of its synthetic accessibility nodes. May mutate the CRDT like handle_event. Read more
§

fn perform_semantic_action( &mut self, target: &str, action: &Action, state: &mut Edits<'_>, path: &(dyn Any + 'static), ) -> bool

Handle an action addressed to a synthetic accessibility child created by this widget. target is the opaque stable value supplied through AccessNode::with_action_target. Read more
§

fn is_enabled(&self) -> bool

A disabled (false) widget is excluded from focus traversal, must reject input in handle_event, and renders dimmed (see DISABLED_ALPHA).
§

fn ime_requires_deferred_ack(&self) -> bool

This field needs a host that consumes deferred receipts. Ordinary native Wayland windows must not advertise it until they have that delivery path.
§

fn start_deferred_text(&mut self) -> Option<Receipt>

Begin one bounded deferred session after explicit host consent, preserving the existing original-field fingerprint. This grants no microphone access.
§

fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>

A private asynchronous final. None leaves ordinary synchronous IME dispatch to the host. A receipt binds this original field and must be acknowledged before the host releases its private recovery transcript.
§

fn ime_purpose(&self) -> Option<ImePurpose>

The focused widget wants platform text input (Wayland text-input-v3, native IMEs elsewhere). None is intentionally the default: enabling an IME for buttons, canvas tools or games makes the compositor raise an on-screen keyboard over content that cannot accept the committed text. Read more
§

fn ime_multiline(&self) -> bool

Whether the original focused editor accepts line feeds as text. This is field policy, never inferred from a multiline accessibility presentation. Wrappers inherit only one unambiguous child at their active IME caret.
§

fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>

Opaque local invalidation of deferred input, including selection edits that leave the caret rectangle unchanged. The host supplies an ephemeral secret key; no text or selection is retained in the resulting digest. The default shares the accessibility door and excludes protected or read-only controls. Text controls can override it to avoid cloning text.
§

fn text_review(&self) -> Option<(usize, String)>

(caret_byte, text), byte offset on a char boundary. The host diffs this before/after an event so caret-only moves (arrows, Home/End) get announced, not just typing.
§

fn on_external_event( &mut self, _payload: &str, _state: &mut Edits<'_>, _root: &(dyn Any + 'static), )

Delivers an out-of-band string payload from crate::app::UserEvent::External (e.g. a worker thread streaming output into a status log). Default no-op; the App redraws and re-syncs after dispatch, so mutating state here is enough.
§

fn on_nav_gesture( &mut self, dir: NavDirection, state: &(dyn Any + 'static), path: &(dyn Any + 'static), ) -> bool

Global back/forward gesture (swipe/edge-pull), recognised by crate::gesture::NavGestureRecognizer and delivered to the whole tree; return true once consumed. Default forwards to children, so a widget that owns history becomes swipe-navigable for free.
§

fn nav_availability(&self) -> NavAvailability

Which directions Self::on_nav_gesture would consume now. A widget that owns history overrides this beside on_nav_gesture.
§

fn take_focus_reset(&mut self) -> bool

One-shot (reading MUST clear it) signal to move focus to this subtree’s first focusable widget after the next rebuild. Only consulted under crate::app::App::autofocus_on_structure_change; a wizard raises it on step transitions.
§

fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>

One-shot (reading MUST clear it) request to change the window’s accessibility preferences, raised by a control the person used. The host applies it before the next frame. Default forwards the first request found among the children.
§

fn dev_route(&self) -> Option<RouteSnapshot>

Route history when this widget, or one it contains, is a Router. Read more
§

fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool

Put route back. Returns whether a router in this subtree accepted it. Read more
§

fn appearance_intent(&self) -> Option<AppearanceIntent>

Theme/high-contrast/reduced-motion/scale, polled under crate::app::App::appearance_reconcile — how a settings pane re-themes the running app live without a back-channel. Level-triggered; the App recurses Self::children itself, so containers need not forward it. First Some wins.
§

fn set_motion_reduced(&mut self, reduced: bool)

Apply the effective reduced-motion preference before the host asks this subtree whether it needs another animation frame. The default forwards recursively, making the preference a framework policy instead of an optional convention that every container has to remember to implement. Read more
§

fn needs_idle_sync(&self) -> bool

Whether sync still needs to run on idle frames without input or collab events — e.g. waiting out a document-adoption grace window.
§

fn take_committed_action(&mut self) -> Option<Vec<ChangeHash>>

The affordance-driven twin of the Ctrl+K palette: when a widget’s own control dispatches the same tilo_actions action its ActionSpec exports, it reports the document heads captured just before here, so the host can record one undo boundary the same way a palette dispatch does. Rising-edge: reading MUST clear it.
§

fn keeps_undo_step_open(&self) -> bool

Whether the undo step this widget’s last reported boundary opened stays open for the actions that continue it — the rest of a word typed a keystroke at a time. A hosted component then closes the step at the widget’s next boundary, or before an undo, a save or a merge, instead of after this event. Answered by the widget itself, never its children.
§

fn set_undo_status(&mut self, _status: &mut dyn FnMut() -> UndoStatus)

Host → widget: the live state of the undo history, published once per frame to every laid-out widget. Read more
§

fn take_undo_request(&mut self) -> Option<UndoRequest>

Widget → host: an undo or redo the user asked for. Read more
§

fn handle_local_undo_request(&mut self, request: UndoRequest) -> bool

Offer a host keyboard undo/redo shortcut to focused widget-local history before the application document consumes it. Read more
§

fn apply_room_action( &mut self, _doc: &mut Edits<'_>, _type_id: &str, _payload: &[u8], ) -> bool

Apply an action another app in this room published, if this app owns the document — lets an app address a document it doesn’t hold by saying what should happen instead of writing bytes directly, keeping each document to one writer. An unrecognised type_id is silently declined, not an error.
§

fn start_operation( &mut self, op: &ResourceOperation<'_>, doc: &mut Edits<'_>, path: &ExId, ) -> Result<Option<ResourceOperationStart>, String>

Admit an exported effect or view operation: the one entry every handler implements. Document operations never enter it. Read more
§

fn semantic_readers(&self) -> &'static [RegisteredSemanticReader]

Inert immutable-reader registrations owned by this actual widget. Registration alone supplies no qualified owner frame or disclosure.
§

fn poll_resource_operation( &mut self, invocation: InvocationId, cancellation_requested: bool, doc: &AutoCommit, path: &ExId, ) -> Option<InvocationUpdate>

Poll one admitted operation without blocking the UI thread. Read more
§

fn take_structure_change(&mut self) -> StructureChange

Self::take_structure_dirty, saying whether the frame’s damage can still describe the rebuild (StructureChange::Described). Reading clears what take_structure_dirty clears; the two must agree on whether there is a change. The default is the flag, as a StructureChange::Rebuild: only a widget that knows every pixel its change touches lands in its own damage says less, and a container forwards a child’s StructureChange::Described only by overriding this.
§

fn has_transient_feedback(&self) -> bool

Temporary feedback currently presented, such as a save acknowledgement. Captures may intentionally include it; scene-invariance checks can wait for it to disappear separately from unfinished placeholder work.
§

fn collect_damage(&self, regions: &mut Vec<Rect>)

Logical-pixel bounds whose visual output differs from the last frame. Read more
§

fn damage_covers_own_box(&self) -> bool

Whether, after this frame’s draw, this widget’s own Self::collect_damage covers every pixel a relayout changed by moving or resizing its layout box: a host that repaints where moved widgets were and are may then leave this widget’s box to it (its children’s boxes still count). A block editor that grew by a paragraph says where its blocks were and are; the default does not claim it.
§

fn release_scene_cache(&mut self)

Release retained encoded-scene storage in this subtree without marking its visual/model state dirty. Outer caches call this after a successful reuse: while the outer display list is authoritative, keeping byte-for-byte descendant encodings only duplicates memory. A later outer rebuild causes descendants to record/cache normally.
§

fn paint_bounds(&self) -> Rect

Everything this widget paints, children included; draw_child skips the draw when it misses the viewport. Override for widgets that paint past their own rect.
§

fn draw_overlay( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )

Top-layer pass, run once after the whole draw recursion, so anything emitted here composites above every sibling regardless of tree order — the toolkit’s overlay mechanism for content that escapes its layout box (an open Dropdown, a popover). Default recurses children_mut.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T> AudiencePresentationWidgetExt for T
where T: Widget + ?Sized,

§

fn audience_presentation_request(&self) -> Option<AudiencePresentationRequest>

§

fn on_audience_presentation_changed(&mut self, active: bool)

§

fn draw_audience_presentation( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, rect: Rect, ) -> bool

§

fn handle_audience_presentation_event( &mut self, event: &WindowEvent, state: &mut Edits<'_>, path: &ExId, ) -> bool

§

fn on_audience_presentation_closed(&mut self)

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CompleteContentWidgetExt for T
where T: Widget + ?Sized,

§

fn complete_content_size(&self) -> Option<Size>

§

fn draw_complete_content( &mut self, scene: &mut Scene, bounds: Rect, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool

§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> FloatingSurfaceWidgetExt for T
where T: Widget + ?Sized,

§

fn on_floating_surface_focus_changed(&mut self, id: Option<&str>, focused: bool)

§

fn on_floating_surface_ime_source_changed(&mut self, id: Option<&str>)

§

fn on_floating_surface_event_source(&mut self, id: Option<&str>)

§

fn floating_surface_accessibility(&self, id: &str) -> Option<AccessNode>

§

fn perform_floating_surface_accessibility_action( &mut self, id: &str, target: &str, action: &Action, state: &mut Edits<'_>, path: &ExId, ) -> bool

§

fn floating_surface_ime(&self, id: &str) -> Option<(ImePurpose, Rect)>

§

fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>

§

fn take_capture_studio_request(&mut self) -> Option<CaptureMode>

§

fn take_floating_surface_source_updates(&mut self) -> Vec<(String, Rect)>

§

fn draw_floating_surfaces( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )

§

fn draw_floating_surface( &mut self, id: &str, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool

§

fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>

§

fn active_floating_surface_ids(&self) -> Vec<String>

§

fn set_floating_surface_bounds(&mut self, bounds: Rect)

§

fn on_floating_surface_host_message( &mut self, message: &FloatingSurfaceHostMessage, )

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FullscreenWidgetExt for T
where T: Widget + ?Sized,

Source§

impl<W> HostDelivery for W
where W: Widget + ?Sized,

Source§

fn start_encoded( &mut self, kind: OperationKind, type_id: &str, payload: &[u8], doc: &mut AutoCommit, path: &ExId, ) -> Result<Option<Effected>, String>

Start the encoded operation (type_id, payload) of kind. Read more
Source§

fn deliver_control( &mut self, kind: OperationKind, control: &str, doc: &mut AutoCommit, path: &ObjId, ) -> Result<Option<Effected>, String>

Hand back the invocation of the toolkit control control (its id, as its tilo.control: resource names it). Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

§

fn simd_from(_simd: S, value: T) -> T

§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

§

fn simd_into(self, simd: S) -> T

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> ErasedDestructor for T
where T: 'static,