Struct WindowGroup
pub struct WindowGroup {
pub id: u64,
pub maximized: bool,
pub search_active: bool,
pub focused: bool,
/* private fields */
}Fields§
§id: u64§maximized: bool§search_active: bool§focused: boolThe 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
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
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 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 start_spawn_animation(&mut self)
The window was asked for: its slot opens from nothing. What shows
inside it meanwhile is its content’s arrival (TileHost).
pub fn stands(&self) -> bool
pub fn stands(&self) -> bool
Whether the window stands on screen: something in it has drawn, or its place is reserved for content still on its way. Only a first frame from this device, inside its frame budget, keeps it off.
pub fn layout_width_px(&self) -> f64
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
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 start_closing(&mut self)
pub fn close_was_requested(&self) -> bool
pub fn close_was_requested(&self) -> bool
Whether a close was requested of the client and abandoned visually because the client has not exited.
pub fn frame_presented(&mut self)
pub fn frame_presented(&mut self)
A frame was presented by a host that never marks this group drawn
(super::GroupRow::frame_presented), so the next frame may step the width spring. If a
rebuild skipped its step because the token was still spent, nothing has asked for the
rebuild that would step it, and the spring would stay where it stopped while the group kept
asking for animation frames.
pub fn next_frame(&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, so an off-screen transition still ends. A step skipped since the last frame asks for the rebuild that takes it, or the spring would stay where it stopped.
pub fn is_closing(&self) -> bool
pub fn close_complete(&self) -> bool
pub fn close_complete(&self) -> bool
The close has run its course: the window has faded out and its slot has closed. Pruned before the slot is shut, the windows beside it would jump across what was left of it.
pub fn set_fills_display(&mut self, fills: bool)
pub fn set_fills_display(&mut self, fills: bool)
Tell the group how much of its top edge something overlays now (the desktop’s top bar while it shows over a window reaching under an auto-hiding one), so the window’s bar stands below it. Zero while the desktop’s bar stands above the window; whether a maximized window here fills its display: nothing of the desktop’s stands beside it.
pub fn set_top_overlay_inset(&mut self, inset: f64)
pub fn strip_usable_px(&self) -> f64
pub fn set_strip_usable_px(&mut self, px: 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 set_alone(&mut self, alone: bool)
pub fn set_alone(&mut self, alone: bool)
Whether this window has its run of the strip to itself. Called by
crate::widget::GroupRow::build_layout with
Self::set_strip_usable_px; a placed window springs to the width
that follows, as when its width is set.
pub fn resolved_width_px(&self) -> f64
pub fn set_edge_highlight(&mut self, edge: Option<WindowEdge>)
pub fn set_edge_highlight(&mut self, edge: Option<WindowEdge>)
Light up (or, with None, put out) the edge of this window a press
would resize, once the pointer has rested there for
EDGE_HOVER_DWELL. Set by the parent row from
super::edge_resize::seam_owner; the window itself never decides.
pub fn edge_highlight(&self) -> Option<WindowEdge>
pub fn edge_highlight(&self) -> Option<WindowEdge>
The edge a drag is moving, else the one a press would resize.
pub fn width_limits(&self) -> WidthLimits
pub fn width_limits(&self) -> WidthLimits
The widths this window may be resized to: the strictest minimum and
maximum any of its tabs’ apps states (crate::widget::AppWidget::min_window_width),
never below the strip’s floor. Every tab shares the window’s width, so
a background tab’s minimum binds as much as the shown one’s.
pub fn begin_edge_drag(&mut self, moving: WindowEdge)
pub fn begin_edge_drag(&mut self, moving: WindowEdge)
Start an edge drag on this window that moves its moving edge; the
other edge holds still on screen. The width is then set live, in
whole pixels, by Self::set_live_width until
Self::end_edge_drag. Apps learn which edge holds, so a client
that has not caught up with a new size yet is drawn against it.
pub fn set_live_width(&mut self, px: f64)
pub fn set_live_width(&mut self, px: f64)
The width an edge drag puts this window at, this frame: whole pixels, as a client’s geometry is, and exactly where the pointer is rather than on the stored fraction’s grid.
pub fn edge_drag_origin_px(&self) -> Option<f64>
pub fn edge_drag_origin_px(&self) -> Option<f64>
The width this window had when its edge drag began.
pub fn end_edge_drag(&mut self, commit: bool) -> f64
pub fn end_edge_drag(&mut self, commit: bool) -> f64
End an edge drag. Committed, the width is stored as the share of the strip it landed on and handed to the shell to persist; cancelled (an Escape, focus loss), the window goes back to the width it had. Returns the change in laid-out width the commit itself makes, since the stored share resolves to whole pixels on its own grid.
Narrow (or widen) this window to w to share the screen with a
window opened beside it, remembering the width it had so that it
gets it back once it is alone on the strip again.
pub fn set_width(&mut self, w: WindowWidth)
pub fn set_width(&mut self, w: WindowWidth)
A committed width: springs from where the window is drawn. Edge
drags set widths live instead (Self::begin_edge_drag).
pub fn stamp_pending_width_change(&mut self)
pub fn has_pending_width_change(&self) -> bool
pub fn has_pending_width_change(&self) -> bool
A width change the host has not yet persisted: until it does, its saved width is the old one and must not be reapplied over it.
pub fn take_pending_width_change(&mut self) -> Option<WindowWidth>
pub fn take_pending_width_change(&mut self) -> Option<WindowWidth>
The width to persist, as the window holds it: a default width stays the default (so it keeps taking the strip while alone), not the fraction it resolves to.
pub fn take_pending_tab_reorder(&mut self) -> Option<(usize, usize)>
pub fn take_pending_search_open(&mut self) -> Option<SearchHandoff>
pub fn window_search(&self) -> &WindowSearch
pub fn open_search(&mut self, source: MotionSource)
pub fn open_search(&mut self, source: MotionSource)
Open the window’s search on the active tab: in place where its app offers a document or a list, else the platform search narrowed to the app (what the control always did).
pub fn open_search_as(&mut self, source: MotionSource, opening: SearchOpening)
pub fn open_search_as(&mut self, source: MotionSource, opening: SearchOpening)
Self::open_search as opening asks: for the replace chord, with
the replacement holding the keyboard.
pub fn set_tab_window_offer(
&mut self,
id: u64,
offer: Option<WindowOffer>,
) -> bool
pub fn set_tab_window_offer( &mut self, id: u64, offer: Option<WindowOffer>, ) -> bool
What the app of tab id, running in a process of its own, offers the
bar’s search and History control, or None (no such app, or it went
away). Returns whether that changed.
pub fn open_search_for_app(&mut self, id: u64, opening: SearchOpening) -> bool
pub fn open_search_for_app(&mut self, id: u64, opening: SearchOpening) -> bool
The app of tab id, in a process of its own, asked for the window’s
search (its Ctrl+F, or its Ctrl+H for SearchOpening::Replace): open
it, or give the open one the keyboard. Only the tab the window shows
searches. Returns whether it did.
pub fn close_search(&mut self, source: MotionSource)
pub fn close_search(&mut self, source: MotionSource)
Close the window’s search: its app stops highlighting or narrowing.
pub fn take_pending_new_tab(&mut self) -> Option<u64>
pub fn take_pending_close_commits(&mut self) -> Vec<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 any_tile_arriving(&self) -> bool
pub fn any_tile_arriving(&self) -> bool
Whether any tab still stands for content whose first frame is not shown, even when another tab of the window has drawn.
pub fn active_host_mut(&mut self) -> Option<&mut TileHost>
pub fn active_host(&self) -> Option<&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 draw_complete_capture(
&mut self,
scene: &mut Scene,
transform: Affine,
tr: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
) -> Option<Rect>
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
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)>
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)
pub fn toggle_maximized(&mut self)
Keyboard/accessibility twin of the frame maximize button.
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,
)
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. The new tab is shown at
once; until it has drawn, the window keeps showing the tab it showed before, and then
cross-fades to it.
pub fn reorder_tab(&mut self, from: usize, to: usize) -> bool
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
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 carry_grab_hit(&self, p: Point) -> bool
pub fn carry_grab_hit(&self, p: Point) -> bool
Where the window can be carried by its bar while it stands on a canvas: anywhere on the bar that is not a control, its title and location included. The resize edge and the search control are not.
pub fn set_carriable(&mut self, carriable: bool)
pub fn set_carriable(&mut self, carriable: bool)
Whether the window can be carried by its bar from its title and
location (Self::carry_grab_hit): it stands on a canvas.
pub fn cancel_press_for_carry(&mut self)
pub fn cancel_press_for_carry(&mut self)
The press on the bar became a carry of the window.
pub fn touch_grab_hit(&self, p: Point) -> bool
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
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 handle_edge_input(
&mut self,
event: &WindowEvent,
scale_factor: f64,
modifiers: Modifiers,
) -> bool
pub fn handle_edge_input( &mut self, event: &WindowEvent, scale_factor: f64, modifiers: Modifiers, ) -> bool
The group’s own pointer chrome (maximized controls, pin shortcut), ahead of its tab bar and tile. The row offers every group this before any group’s tile sees the event: a tile that swallows pointer events (one still loading, or whose record is gone) must not leave another group’s chrome stale.
pub fn resize_grab_rects(&self) -> Vec<Rect>
pub fn resize_grab_rects(&self) -> Vec<Rect>
Both edge zones, leading first: where a press resizes a window rather
than reaching its app. Which window it resizes is the row’s to say
(super::edge_resize::seam_owner). Empty while maximized or
fullscreen.
pub fn leading_resize_grab_rect(&self) -> Option<Rect>
pub fn leading_resize_grab_rect(&self) -> Option<Rect>
Leading-edge zone, the mirror of Self::resize_grab_rect: the same
width, inside the window.
pub fn resize_grab_rect(&self) -> Option<Rect>
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
pub fn update_tab_descriptor(&mut self, descriptor: TabDescriptor) -> bool
Update chrome metadata without replacing the document/component owner.
pub fn set_tab_toolbar(
&mut self,
id: u64,
toolbar: Option<WindowToolbar>,
) -> bool
pub fn set_tab_toolbar( &mut self, id: u64, toolbar: Option<WindowToolbar>, ) -> bool
Show the slots tab id’s app declared for the window’s bar
(crate::window_toolbar), or none. Returns whether that changed.
pub fn tab_toolbar(&self, id: u64) -> Option<&WindowToolbar>
pub fn tab_toolbar(&self, id: u64) -> Option<&WindowToolbar>
The slots tab id shows in the bar.
pub fn take_toolbar_events(&mut self) -> Vec<(u64, ToolbarEvent)>
pub fn take_toolbar_events(&mut self) -> Vec<(u64, ToolbarEvent)>
What the person did with the apps’ slots in the bar, by tab.
pub fn take_location_drafts(&mut self) -> Vec<(u64, ToolbarEvent)>
pub fn take_location_drafts(&mut self) -> Vec<(u64, ToolbarEvent)>
What the edited location held since the last call, by tab, for the app’s suggestions.
pub fn editing_location(&self) -> bool
pub fn editing_location(&self) -> bool
Whether the active tab’s location is being edited in the bar.
pub fn location_event(
&mut self,
event: &WindowEvent,
ctx: &mut EventCtx<'_>,
) -> bool
pub fn location_event( &mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
Hand a keyboard or text event to the location field while it is
edited; the shell routes the keyboard here while
Self::editing_location. Returns whether the field took it.
pub fn bar_tooltip_at(&self, p: Point) -> Option<(Rect, String)>
pub fn bar_tooltip_at(&self, p: Point) -> Option<(Rect, String)>
What the button of the window’s bar at p does, for its tooltip.
pub fn draw_bar_popups(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
pub fn draw_bar_popups( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
Paint the bar’s top layer (its slots’ menus, the overflow’s and the suggestions, and the search’s options), for a host that draws the windows’ top layer itself.
pub fn location_hit(&self, p: Point) -> bool
pub fn location_hit(&self, p: Point) -> bool
Whether p is on the edited location or the suggestions under it:
a press there keeps the edit.
pub fn cancel_location_edit(&mut self) -> bool
pub fn cancel_location_edit(&mut self) -> bool
End the location’s edit, putting it back. Returns whether it was being edited.
pub fn location_rect(&self) -> Rect
pub fn location_rect(&self) -> Rect
Where the active tab’s location stands in the bar.
pub fn edit_location(&mut self) -> bool
pub fn edit_location(&mut self) -> bool
Turn the active tab’s editable location into a field (Ctrl+L).
pub fn begin_tab_rename(&mut self, id: u64, name: &str) -> bool
pub fn begin_tab_rename(&mut self, id: u64, name: &str) -> bool
Name tab id in place: its title becomes a field in its pill
(crate::widget::TabBar::begin_rename); name is what a reader
announces the field as. Returns whether the edit is open.
pub fn renaming_tab(&self) -> Option<u64>
pub fn renaming_tab(&self) -> Option<u64>
The tab being named in place, if any.
pub fn tab_rename_hit(&self, p: Point) -> bool
pub fn tab_rename_hit(&self, p: Point) -> bool
Whether p is on the name field of a tab being named.
pub fn tab_rename_event(
&mut self,
event: &WindowEvent,
ctx: &mut EventCtx<'_>,
) -> bool
pub fn tab_rename_event( &mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
Hand a keyboard or text event to the name field while a tab is being
named; the shell routes the keyboard here while
Self::renaming_tab. Returns whether the field took it.
pub fn commit_tab_rename(&mut self) -> bool
pub fn commit_tab_rename(&mut self) -> bool
Commit the name being edited, as Enter does. Returns whether a tab was being named.
pub fn cancel_tab_rename(&mut self) -> bool
pub fn cancel_tab_rename(&mut self) -> bool
Put the title back, as Escape does. Returns whether a tab was being named.
pub fn take_tab_rename(&mut self) -> Option<(u64, String)>
pub fn take_tab_rename(&mut self) -> Option<(u64, String)>
A name committed in place since the last call: the tab, and the name (empty when the person cleared it).
pub fn tabs(&self) -> &[TabDescriptor]
pub fn set_tab_holder(&mut self, id: u64, holder: Option<TabHolder>) -> bool
pub fn set_tab_holder(&mut self, id: u64, holder: Option<TabHolder>) -> bool
Mark tab id as held by someone else (crate::widget::TabHolder),
or clear the mark: such a tab offers no close and resists a drag.
true when that changed what the window offers.
pub fn set_new_tab(&mut self, on: bool) -> bool
pub fn set_new_tab(&mut self, on: bool) -> bool
Offer the new-tab control, or not, for someone who opens nothing
here. true when that changed what the window offers.
pub fn activate_desktop_control(&mut self) -> bool
pub fn activate_desktop_control(&mut self) -> bool
Press the bar’s “Controls your desktop” chip without a pointer, as an assistive technology does. Whether the bar shows it.
pub fn take_desktop_control_press(&mut self) -> Option<(u64, Rect)>
pub fn take_desktop_control_press(&mut self) -> Option<(u64, Rect)>
A press on the bar’s “Controls your desktop” chip, once: the tab and where the chip stands, for the host’s menu.
pub fn is_held(&self) -> bool
pub fn is_held(&self) -> bool
Whether someone else holds any of the window’s tabs, so it does not move as a whole.
pub fn set_tab_attention(&mut self, id: u64, attention: bool) -> bool
pub fn set_tab_attention(&mut self, id: u64, attention: bool) -> bool
Mark tab id as waiting for the person, or not. true when that
changed what it paints.
pub fn set_tab_icon(&mut self, id: u64, icon: Option<AppImage>) -> bool
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
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>
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 take_tab_activation(&mut self) -> Option<u64>
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
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 request_close_tab(&mut self, tab_id: u64) -> bool
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
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 dragged_tab(&self) -> Option<u64>
pub fn dragged_tab(&self) -> Option<u64>
The tab this group’s bar is dragging, while it drags one.
pub fn edge_resize_in_flight(&self) -> bool
pub fn edge_resize_in_flight(&self) -> bool
Whether one of this group’s edges is being dragged to resize it.
pub fn set_external_drag_hover(&mut self, cursor: Option<Point>)
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
pub fn bar_mut_for_tests(&mut self) -> &mut TabBar
crates/session/session/tests/ integration tests need this from outside
the crate, as do its unit tests in an optimised profile.
pub fn close_rect_for_tests(&self, tab_id: u64) -> Option<Rect>
pub fn bar_for_tests(&self) -> &TabBar
pub fn host_for_tab_mut(&mut self, tab_id: u64) -> Option<&mut TileHost>
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>
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.
§impl WindowGroup
impl WindowGroup
pub fn set_fullscreen_bar_revealed(
&mut self,
revealed: bool,
source: MotionSource,
)
pub fn set_fullscreen_bar_revealed( &mut self, revealed: bool, source: MotionSource, )
Show or hide a fullscreen window’s bar over it (the host reads the
top edge for it, top_edge_reveal); nothing while not fullscreen.
source is what showed or hid it: the pointer’s reach fades it, a
key or an action (entering fullscreen by Super+F, Super alone) lands
it at once.
Trait Implementations§
§impl ActionControls for WindowGroup
impl ActionControls for WindowGroup
§fn has_pending_control_invocation(&self) -> bool
fn has_pending_control_invocation(&self) -> bool
§fn install_control_custody(
&mut self,
domain: &ControlDomain,
attachment: CustodyAttachment,
)
fn install_control_custody( &mut self, domain: &ControlDomain, attachment: CustodyAttachment, )
§fn take_control_invocation(&mut self) -> Option<ControlInvocation>
fn take_control_invocation(&mut self) -> Option<ControlInvocation>
§fn take_attributed_control_invocation(
&mut self,
) -> Option<(ControlInvocation, Option<InvocationId>)>
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>,
)
fn on_control_invocation_result( &mut self, address: &ActionAddress, result: &Result<ResourceOperationStart, DoorError>, )
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>
fn control_action_bindings(&self) -> Vec<ControlBindingMetadata>
metadata
to its descendants’ inventory.§fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
fn action_control_bindings(&self) -> Vec<ControlBindingMetadata>
§fn has_action_control_bindings(&self) -> bool
fn has_action_control_bindings(&self) -> bool
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>,
)
fn refresh_control_action_availability( &mut self, allowed: &HashSet<ActionAddress>, )
§impl CollaborationTopology for WindowGroup
impl CollaborationTopology for WindowGroup
fn collaboration_children_mut(&mut self) -> Vec<&mut dyn Widget>
§impl ComponentLifecycle for WindowGroup
impl ComponentLifecycle for WindowGroup
§fn unsaved_documents(&self, doc: &AutoCommit) -> Vec<UnsavedDocument>
fn unsaved_documents(&self, doc: &AutoCommit) -> Vec<UnsavedDocument>
§fn checkpoint_components(&mut self) -> Vec<String>
fn checkpoint_components(&mut self) -> Vec<String>
§fn finish_admitted_close(&mut self) -> Vec<ComponentCloseReport>
fn finish_admitted_close(&mut self) -> Vec<ComponentCloseReport>
§fn close_components(&mut self) -> Vec<ComponentCloseReport>
fn close_components(&mut self) -> Vec<ComponentCloseReport>
§fn take_component_close_reports(&mut self) -> Vec<ComponentCloseReport>
fn take_component_close_reports(&mut self) -> Vec<ComponentCloseReport>
§fn on_window_close_requested(&mut self) -> WindowCloseAdmission
fn on_window_close_requested(&mut self) -> WindowCloseAdmission
§fn take_window_close_intent(&mut self) -> bool
fn take_window_close_intent(&mut self) -> bool
§fn take_replacement(&mut self) -> Option<ComponentReplacement>
fn take_replacement(&mut self) -> Option<ComponentReplacement>
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
fn take_save_status_presentation(&mut self) -> bool
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
impl FloatingSurfaceProvider for WindowGroup
§fn on_floating_surface_focus_changed(&mut self, id: Option<&str>, focused: bool)
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_ime_source_changed(&mut self, id: Option<&str>)
§fn on_floating_surface_event_source(&mut self, id: Option<&str>)
fn on_floating_surface_event_source(&mut self, id: Option<&str>)
§fn floating_surface_event(
&mut self,
id: &str,
event: &WindowEvent,
ctx: &mut EventCtx<'_>,
) -> bool
fn floating_surface_event( &mut self, id: &str, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
id, in the desk’s
coordinates: the frame the card’s hits were recorded in. Answers
whether the card took the event.§fn floating_surface_accessibility(&self, id: &str) -> Option<AccessNode>
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<(InputContent, Rect)>
fn floating_surface_ime(&self, id: &str) -> Option<(InputContent, Rect)>
§fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>
fn take_floating_surface_request(&mut self) -> Option<FloatingSurfaceRequest>
PiP does
not require a second rendering/widget API.§fn take_capture_studio_request(&mut self) -> Option<CaptureMode>
fn take_capture_studio_request(&mut self) -> Option<CaptureMode>
PiP chooser.§fn take_floating_surface_source_updates(&mut self) -> Vec<(String, Rect)>
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_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 draw_floating_surface( &mut self, id: &str, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, ) -> bool
§fn set_floating_surface_bounds(&mut self, bounds: Rect)
fn set_floating_surface_bounds(&mut self, bounds: Rect)
§fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>
fn floating_surface_presentations(&self) -> Vec<FloatingSurfacePresentation>
§fn active_floating_surface_ids(&self) -> Vec<String>
fn active_floating_surface_ids(&self) -> Vec<String>
§fn on_floating_surface_host_message(
&mut self,
message: &FloatingSurfaceHostMessage,
)
fn on_floating_surface_host_message( &mut self, message: &FloatingSurfaceHostMessage, )
§impl Widget for WindowGroup
impl Widget for WindowGroup
§fn perform_semantic_action(
&mut self,
target: &str,
action: &Action,
state: &mut Edits<'_>,
path: &(dyn Any + 'static),
) -> bool
fn perform_semantic_action( &mut self, target: &str, action: &Action, state: &mut Edits<'_>, path: &(dyn Any + 'static), ) -> bool
A node of the bar’s, activated: a tab’s pill switches to that tab, a window control does what it shows.
§fn draw_overlay(
&mut self,
scene: &mut Scene,
transform: Affine,
text_renderer: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw_overlay( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
The window’s top layer: its app’s, then its bar’s menus over it, maximized or not.
§fn for_each_layout_child(&self, visitor: &mut dyn FnMut(&dyn Widget)) -> bool
fn for_each_layout_child(&self, visitor: &mut dyn FnMut(&dyn Widget)) -> bool
The bar and its search as well as every tab’s host.
§fn holds_frame_until(&self, now: Instant) -> Option<Instant>
fn holds_frame_until(&self, now: Instant) -> Option<Instant>
Only what the active tab shows holds the frame: a tab beside it, still starting, never does.
§fn presented(&self) -> bool
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 tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
fn tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
The window’s bar is part of the window: what a person rests the pointer on there names itself, its tabs as the whole of their titles where the pill cuts them.
§fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
Mirrors the inter-group crate::widget::ResizeHandle so both
affordances give the same feedback.
§fn take_structure_change(&mut self) -> StructureChange
fn take_structure_change(&mut self) -> StructureChange
A change the active tab’s content carries out in place stays in place; the window’s own changes rebuild.
§fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
Carry out a change in place outside a row: as in one, and the window sets its own node’s style.
§fn is_layout_dirty(&self) -> bool
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, '_>)
fn provide<'a>(&'a self, request: &mut Request<'a, '_>)
capability). Declare capabilities with crate::provides!.§fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
fn provide_mut<'a>(&'a mut self, request: &mut RequestMut<'a, '_>)
Widget::provide.§fn keyboard_input_scope(&self) -> Option<u64>
fn keyboard_input_scope(&self) -> Option<u64>
§fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn apply_primary_vertical_scroll( &mut self, action: PrimaryScrollAction, ) -> PrimaryScrollResult
§fn modal_capture(&self) -> Option<Rect>
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>
fn next_wake_deadline(&self) -> Option<Instant>
§fn set_platform_conventions(&mut self, conventions: PlatformConventions)
fn set_platform_conventions(&mut self, conventions: PlatformConventions)
§fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
§fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
fn mount_native_views(&mut self, host: &NativeViewHost<'_>)
§fn unmount_native_views(&mut self)
fn unmount_native_views(&mut self)
§fn native_view_frame_start(&mut self)
fn native_view_frame_start(&mut self)
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))
fn for_each_child(&self, visitor: &mut dyn FnMut(&dyn Widget))
Self::children; toolkit
containers override this to walk their retained storage directly.§fn sync(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static))
fn sync(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static))
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
fn update(&mut self, s: &(dyn Any + 'static), p: &(dyn Any + 'static)) -> bool
Widget::children_mut returns without short-circuiting, so a container never freezes its
descendants; an override checks state of its own and forwards.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)
fn apply_layout(&mut self, taffy: &TaffyTree, node: NodeId, origin: Point)
§fn draw(
&mut self,
scene: &mut Scene,
transform: Affine,
tr: &mut TextRenderer,
theme: &Theme,
presence: &PresenceCtx,
)
fn draw( &mut self, scene: &mut Scene, transform: Affine, tr: &mut TextRenderer, theme: &Theme, presence: &PresenceCtx, )
scene. The default paints nothing.§fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn handle_event(&mut self, event: &WindowEvent, ctx: &mut EventCtx<'_>)
fn name(&self) -> &'static str
§fn get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
fn wants_pointer_capture(&self) -> bool
§fn take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
§fn needs_redraw(&self) -> bool
fn needs_redraw(&self) -> bool
false (clean). A widget is clean until something it reads
changes: a leaf that keeps state says so by tracking a dirty: bool
(set in handle_event/sync, cleared in mark_drawn()), and one
that paints from the people on the document reads the frame’s
presence (crate::presence::frame::frame). Containers MUST
forward: dirty iff any descendant is.§fn mark_drawn(&mut self)
fn mark_drawn(&mut self)
dirty flag. Default forwards to children.§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
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
fn has_pending_visual_work(&self) -> bool
§fn animation_detail(&self) -> Option<String>
fn animation_detail(&self) -> Option<String>
None when it has nothing
to add to its name and geometry.§fn needs_animation_frame(&self) -> bool
fn needs_animation_frame(&self) -> bool
App polls this in Event::AboutToWait; without it a curve would
freeze until an unrelated event woke it.§fn native_input_snapshot(
&self,
_state: &(dyn Any + 'static),
_path: &(dyn Any + 'static),
) -> Option<Value>
fn native_input_snapshot( &self, _state: &(dyn Any + 'static), _path: &(dyn Any + 'static), ) -> Option<Value>
§fn view_only_scroll(&self, _event: &WindowEvent) -> bool
fn view_only_scroll(&self, _event: &WindowEvent) -> bool
sync. The runner still lays out, paints and refreshes accessibility
geometry; unknown handlers stay on the full path.§fn callback_binding(&self) -> Option<CallbackBinding>
fn callback_binding(&self) -> Option<CallbackBinding>
§fn has_separate_document_owner(&self) -> bool
fn has_separate_document_owner(&self) -> bool
§fn history_owner(&self) -> Option<HistoryOwner>
fn history_owner(&self) -> Option<HistoryOwner>
§fn record_owners(&self) -> Vec<HistoryOwner>
fn record_owners(&self) -> Vec<HistoryOwner>
crate::record::person). They take no part in this
widget’s history or controls.§fn set_window_bar_control(&mut self, in_bar: bool)
fn set_window_bar_control(&mut self, in_bar: bool)
§fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
fn settle(&mut self, edits: &mut Edits<'_>, path: &ExId)
edits;
the host syncs again when the document changed. The default settles the returned children.fn measure( &mut self, _known: Size<Option<f32>>, _available: Size<AvailableSpace>, _text_renderer: &mut TextRenderer, ) -> Size<f32>
§fn layout_info(&self) -> Option<LayoutInfo>
fn layout_info(&self) -> Option<LayoutInfo>
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
fn adjust_layout_style( &mut self, _taffy: &mut TaffyTree, _node: NodeId, _text: &mut TextRenderer, ) -> bool
§fn observe_physical_input(&mut self, _input: PhysicalInput)
fn observe_physical_input(&mut self, _input: PhysicalInput)
§fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_child_in_clip(&self, visitor: &mut dyn FnMut(&dyn Widget))
Self::for_each_child that may paint inside the layout_clip in
effect: what a scroll view’s damage and copy plan need. Every child by default; a long
column visits only those near the clip, so a frame costs what is shown, not what the column
holds.§fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
fn for_each_hosted_child(&self, _visitor: &mut dyn FnMut(&dyn Widget))
Self::children lists, so what is walked
there keeps the paths, sibling indices and registry entries it had.§fn test_id(&self) -> Option<&str>
fn test_id(&self) -> Option<&str>
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 window_slot(&self, _id: String) -> Option<ToolbarAction>
fn window_slot(&self, _id: String) -> Option<ToolbarAction>
id
(crate::window_toolbar::ToolbarAction): a button’s icon and name.
None for anything that is not a button.§fn as_any(&self) -> Option<&(dyn Any + 'static)>
fn as_any(&self) -> Option<&(dyn Any + 'static)>
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 stands_for(&self, address: *const ()) -> bool
fn stands_for(&self, address: *const ()) -> bool
address, or stands in the tree
for it: a Decorator stands for every widget it wraps, so a
scroller drawn inside one is found where the decorator is
(crate::scroll_copy::offer).§fn focus_reveal_context(&self) -> Option<Rect>
fn focus_reveal_context(&self) -> Option<Rect>
§fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
fn reveal_descendant(&mut self, target: *const dyn Widget) -> bool
§fn test_rects(&self) -> Vec<(String, Rect)>
fn test_rects(&self) -> Vec<(String, Rect)>
Widget::get_rect; zero-area entries are dropped.§fn child_clip_rect(&self) -> Option<Rect>
fn child_clip_rect(&self) -> Option<Rect>
§fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
fn snap_points(&self, axis: ScrollAxis, out: &mut Vec<f32>)
axis that this widget, as a scroll view’s content,
offers it to settle on, measured from its own leading edge: a board’s
lanes (crate::widget::Board). None leaves a scroller stopping
wherever the hand left it.§fn take_action_palette_request(&mut self) -> Option<ActionAddress>
fn take_action_palette_request(&mut self) -> Option<ActionAddress>
resources().§fn take_search_request(&mut self) -> bool
fn take_search_request(&mut self) -> bool
§fn claims_raw_touch(&self, _point: Point) -> bool
fn claims_raw_touch(&self, _point: Point) -> bool
point (logical coords, same space as Widget::get_rect). Read more§fn touch_claim(&self, _point: Point) -> TouchClaim
fn touch_claim(&self, _point: Point) -> TouchClaim
point (logical coords)
means here, when a drag moves something rather than scrolling. Read more§fn tooltip(&self) -> Option<&str>
fn tooltip(&self) -> Option<&str>
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
fn tooltip_side(&self) -> TooltipSide
fn is_focusable(&self) -> bool
§fn is_default_keyboard_focus(&self) -> bool
fn is_default_keyboard_focus(&self) -> bool
fn set_focus(&mut self, _focused: bool)
§fn set_full_bleed(&mut self, _full_bleed: bool)
fn set_full_bleed(&mut self, _full_bleed: bool)
§fn set_invalid(&mut self, _invalid: bool)
fn set_invalid(&mut self, _invalid: bool)
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)
fn focus_requested(&mut self, target: Option<NodeId>, tree: &TaffyTree)
fn is_focused(&self) -> bool
None leaves the menu to stand under
the focused widget’s own box.§fn wants_tab_input(&self) -> bool
fn wants_tab_input(&self) -> bool
§fn ime_cursor_rect(&self) -> Option<Rect>
fn ime_cursor_rect(&self) -> Option<Rect>
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
fn traps_focus(&self) -> bool
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 scopes_keyboard_focus(&self) -> bool
fn scopes_keyboard_focus(&self) -> bool
Self::traps_focus it moves no focus when it starts or ends, and
pointer input is unaffected. Default false.§fn take_app_activation(&mut self) -> Option<u64>
fn take_app_activation(&mut self) -> Option<u64>
§fn take_focus_request(&mut self) -> Option<String>
fn take_focus_request(&mut self) -> Option<String>
§fn accessibility(&self) -> Option<AccessNode>
fn accessibility(&self) -> Option<AccessNode>
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.Self::accessibility with its synthetic children shared, for a
widget that keeps them between frames: each child it did not change
is handed over as the very Arc of the last frame, which the
semantic tree takes as unchanged without copying or comparing it. Read moreSelf::accessibility reports this subtree hidden, for a
host that asks it of every node to prune focus traversal. Widgets
whose node is costly to build (text values, per-block children, a
translated name) answer without building it: the focus walk asks
every widget in the window on every recomputation. Any override must
agree with accessibility(); debug builds check it in the walk.§fn accessibility_root(&self) -> Option<AccessNode>
fn accessibility_root(&self) -> Option<AccessNode>
Self::accessibility’s own node with its children left empty:
its role, identity (semantic_key) and state. Focus capture and focus
order read only these, for every node on every frame, so a widget
whose node carries a large subtree (a document exporting its every
block) answers without building it. An override must equal
accessibility() with children cleared.§fn synthetic_accessibility_rect(&self, _path: &[usize]) -> Option<Rect>
fn synthetic_accessibility_rect(&self, _path: &[usize]) -> Option<Rect>
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
fn focus_synthetic_accessibility(&mut self, _path: &[usize]) -> bool
§fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
fn accessibility_child_parent(&self, _child_index: usize) -> Option<usize>
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>>
fn accessibility_child_path(&self, child_index: usize) -> Option<Vec<usize>>
children entry beneath a
nested path of synthetic children returned by
accessibility. Read more§fn accessibility_represents_child(&self, _child_index: usize) -> bool
fn accessibility_represents_child(&self, _child_index: usize) -> bool
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 lays_out_child(&self, _child_index: usize) -> bool
fn lays_out_child(&self, _child_index: usize) -> bool
§fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
fn accessibility_child_description(&self, _child_index: usize) -> Option<String>
children entry to
assistive technology, when this widget holds the words for it: a
row’s secondary line is its trailing switch’s description. The
bridge sets it as that child’s node’s description unless the child
describes itself.§fn perform_action(
&mut self,
_action: &Action,
_key_path: &[u64],
_state: &mut Edits<'_>,
_path: &(dyn Any + 'static),
) -> bool
fn perform_action( &mut self, _action: &Action, _key_path: &[u64], _state: &mut Edits<'_>, _path: &(dyn Any + 'static), ) -> bool
Action on this
widget, or on one of its synthetic accessibility nodes. May mutate
the CRDT like handle_event. Read more§fn is_enabled(&self) -> bool
fn is_enabled(&self) -> bool
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
fn ime_requires_deferred_ack(&self) -> bool
§fn ime_refuses_ordinary_commits(&self) -> bool
fn ime_refuses_ordinary_commits(&self) -> bool
§fn start_deferred_text(&mut self) -> Option<Receipt>
fn start_deferred_text(&mut self) -> Option<Receipt>
§fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
fn commit_deferred_text(&mut self, text: &str) -> Option<Receipt>
§fn ime_content(&self) -> Option<InputContent>
fn ime_content(&self) -> Option<InputContent>
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
fn ime_multiline(&self) -> bool
§fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
§fn arrives_from(&self) -> Source
fn arrives_from(&self) -> Source
presented: this device (an app starting here),
another device or a host. A frame from this device may hold the
window’s first frame up to one frame budget; any other reserves the
window’s place and says where it comes from after a while.§fn arrival_progress(&self) -> Option<Progress>
fn arrival_progress(&self) -> Option<Progress>
§fn arrival_shape(&self) -> SkeletonShape
fn arrival_shape(&self) -> SkeletonShape
§fn text_review(&self) -> Option<(usize, String)>
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),
)
fn on_external_event( &mut self, _payload: &str, _state: &mut Edits<'_>, _root: &(dyn Any + 'static), )
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.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.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
fn take_focus_reset(&mut self) -> bool
crate::app::App::autofocus_on_structure_change;
a wizard raises it on step transitions.§fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
fn take_accessibility_request(&mut self) -> Option<AccessibilityRequest>
§fn dev_route(&self) -> Option<RouteSnapshot>
fn dev_route(&self) -> Option<RouteSnapshot>
§fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
fn restore_dev_route(&mut self, route: &RouteSnapshot) -> bool
route back. Returns whether a router in this subtree accepted it. Read more§fn appearance_intent(&self) -> Option<AppearanceIntent>
fn appearance_intent(&self) -> Option<AppearanceIntent>
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 minimum_window_width(&self) -> Option<f64>
fn minimum_window_width(&self) -> Option<f64>
NavShell answers with one column
at a time). The host states it to the window system, so the desktop
stops a resize there. None: no opinion. The host walks the tree
itself (minimum_window_width), so containers need not forward
it; the first Some wins.§fn preferred_window_size(&self) -> Option<(f64, f64)>
fn preferred_window_size(&self) -> Option<(f64, f64)>
None: the
window is the user’s and the app lays itself out in whatever it gets.§fn set_motion_reduced(&mut self, reduced: bool)
fn set_motion_reduced(&mut self, reduced: bool)
§fn needs_idle_sync(&self) -> bool
fn needs_idle_sync(&self) -> bool
sync still needs to run on idle frames without input or
collab events — e.g. waiting out a document-adoption grace window.§fn disclosing(&self) -> Option<Disclosing>
fn disclosing(&self) -> Option<Disclosing>
motion::Disclosure: an in-window banner arriving or leaving), or a
content-sized container one moves in, how far what follows it is
drawn from where it is laid out. A moving band stands out of the
layout; its container places it (Self::place_disclosing) and
draws the widgets after it lower by transform, so they move with the
band’s edge instead of being laid out again every frame. None at
rest (the default).§fn place_disclosing(&mut self, _slot: Rect)
fn place_disclosing(&mut self, _slot: Rect)
Disclosing::Band) stands while it is
out of the layout: its slot’s top and width (slot’s height is
zero), set by its container after each layout.§fn is_band(&self) -> bool
fn is_band(&self) -> bool
widget::Disclosing). Its column leaves it out of its identity
across rebuilds.§fn note_placement(&mut self, _placement: Placement)
fn note_placement(&mut self, _placement: Placement)
§fn serve_deadline(&mut self, _now: Instant) -> bool
fn serve_deadline(&mut self, _now: Instant) -> bool
Self::next_wake_deadline) is
due at now: do the work it was for, and say whether anything
changed. The default says it did.§fn dismiss_presented_modal(&mut self) -> bool
fn dismiss_presented_modal(&mut self) -> bool
§fn presents_modal(&self) -> bool
fn presents_modal(&self) -> bool
Widget::dismiss_presented_modal.§fn has_transient_feedback(&self) -> bool
fn has_transient_feedback(&self) -> bool
§fn collect_damage(&self, regions: &mut Vec<Rect>)
fn collect_damage(&self, regions: &mut Vec<Rect>)
§fn damage_covers_own_box(&self) -> bool
fn damage_covers_own_box(&self) -> bool
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 mark_children_drawn(&mut self)
fn mark_children_drawn(&mut self)
§fn release_scene_cache(&mut self)
fn release_scene_cache(&mut self)
§fn composition_follows_allocation(&self) -> bool
fn composition_follows_allocation(&self) -> bool
take_structure_dirty themselves when a new allocation changes what
they show, keep the default: a resize re-solves the retained tree in
place instead of recomposing all of it.§fn paint_bounds(&self) -> Rect
fn paint_bounds(&self) -> Rect
draw_child
skips the draw when it misses the viewport. Override for widgets
that paint past their own rect.Auto Trait Implementations§
impl !Freeze for WindowGroup
impl !RefUnwindSafe for WindowGroup
impl !Send for WindowGroup
impl !Sync for WindowGroup
impl Unpin for WindowGroup
impl UnsafeUnpin for WindowGroup
impl !UnwindSafe for WindowGroup
Blanket Implementations§
§impl<T> AsDynWidget for Twhere
T: Widget,
impl<T> AsDynWidget for Twhere
T: Widget,
§fn as_dyn_widget(&self) -> &dyn Widget
fn as_dyn_widget(&self) -> &dyn Widget
§impl<T> AudiencePresentationWidgetExt for T
impl<T> AudiencePresentationWidgetExt for T
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CompleteContentWidgetExt for T
impl<T> CompleteContentWidgetExt for T
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 for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> FloatingSurfaceWidgetExt for T
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_event( &mut self, id: &str, event: &WindowEvent, ctx: &mut EventCtx<'_>, ) -> bool
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<(InputContent, 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, )
§impl<T> FullscreenWidgetExt for T
impl<T> FullscreenWidgetExt for T
fn fullscreen_intent(&self) -> Option<bool>
fn fullscreen_params(&self) -> FullscreenRequest
fn on_fullscreen_changed(&mut self, active: bool)
Source§impl<W> HostDelivery for W
impl<W> HostDelivery for W
Source§fn start_encoded(
&mut self,
kind: OperationKind,
type_id: &str,
payload: &[u8],
doc: &mut AutoCommit,
path: &ExId,
) -> Result<Option<Effected>, String>
fn start_encoded( &mut self, kind: OperationKind, type_id: &str, payload: &[u8], doc: &mut AutoCommit, path: &ExId, ) -> Result<Option<Effected>, String>
type_id, payload) of kind.Source§fn deliver_control(
&mut self,
kind: OperationKind,
control: &str,
doc: &mut AutoCommit,
path: &ObjId,
) -> Result<Option<Effected>, String>
fn deliver_control( &mut self, kind: OperationKind, control: &str, doc: &mut AutoCommit, path: &ObjId, ) -> Result<Option<Effected>, String>
control (its id,
as its tilo.control: resource names it).§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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