Struct SecretPrompt
pub struct SecretPrompt { /* private fields */ }Expand description
The password prompt. See the module documentation.
Implementations§
§impl SecretPrompt
impl SecretPrompt
pub fn new(kind: SecretKind) -> SecretPrompt
pub fn new(kind: SecretKind) -> SecretPrompt
A prompt for kind; name it with the with_* builders.
pub fn with_fields(specs: Vec<FieldSpec>) -> SecretPrompt
pub fn with_fields(specs: Vec<FieldSpec>) -> SecretPrompt
A prompt for the fields the asker names, in order; focus starts in the first required one still empty.
pub fn with_title(self, title: impl Into<String>) -> SecretPrompt
pub fn with_title(self, title: impl Into<String>) -> SecretPrompt
Who asks and for what: “Connect to TruffleBoys2026”.
pub fn with_icon(self, icon: Icon) -> SecretPrompt
pub fn with_icon(self, icon: Icon) -> SecretPrompt
The glyph before the title; a lock unless set.
pub fn with_resource(self, resource: impl Into<String>) -> SecretPrompt
pub fn with_resource(self, resource: impl Into<String>) -> SecretPrompt
The resource the secret is for, under the title: the network’s security, the action polkit authorises, the VPN’s server.
pub fn with_primary_label(self, label: impl Into<String>) -> SecretPrompt
pub fn with_primary_label(self, label: impl Into<String>) -> SecretPrompt
The primary button’s label: the action (Connect, Unlock, Allow).
pub fn with_cancel_label(self, label: impl Into<String>) -> SecretPrompt
pub fn with_label(
self,
role: FieldRole,
label: impl Into<String>,
) -> SecretPrompt
pub fn with_label( self, role: FieldRole, label: impl Into<String>, ) -> SecretPrompt
The label of the field holding role, in the asker’s words (PAM’s
“Password:”, NetworkManager’s “Private key password”).
pub fn with_username(self, username: &str) -> SecretPrompt
pub fn with_username(self, username: &str) -> SecretPrompt
The user name the prompt starts with; focus starts in the secret then.
pub fn with_presentation(self, presentation: Presentation) -> SecretPrompt
pub fn with_max_width(self, max_width: f64) -> SecretPrompt
pub fn with_max_width(self, max_width: f64) -> SecretPrompt
Widest the sheet is drawn, in design pixels.
pub fn with_id(self, id: &str) -> SecretPrompt
pub fn with_id(self, id: &str) -> SecretPrompt
The stable address of the prompt and its fields (<id>-secret, …)
for inspection and tests.
pub fn with_choices(
self,
label: impl Into<String>,
choices: Vec<String>,
selected: usize,
) -> SecretPrompt
pub fn with_choices( self, label: impl Into<String>, choices: Vec<String>, selected: usize, ) -> SecretPrompt
Who of several the secret is for, as a row of buttons above the
fields called label; selected starts picked. One choice or none
shows no row.
pub fn with_secret_buffer(self, buffer: Arc<Mutex<String>>) -> SecretPrompt
pub fn with_secret_buffer(self, buffer: Arc<Mutex<String>>) -> SecretPrompt
Keep the secret (the password, the PIN or the PUK) in buffer, and
start from what it holds: for a host that builds its widget tree
afresh, so what was typed outlives the prompt that took it. The host
owns the buffer and zeroes it when the secret is used or dropped.
pub fn with_field_buffers(
self,
buffers: Vec<Arc<Mutex<String>>>,
) -> SecretPrompt
pub fn with_field_buffers( self, buffers: Vec<Arc<Mutex<String>>>, ) -> SecretPrompt
Keep each field’s value in the buffer at its index, and start from
what they hold: Self::with_secret_buffer for a prompt of several
fields (a network’s identity and password, a PUK and its new PIN),
so a host that builds its tree afresh loses none of them. The host
owns the buffers and zeroes them when the answer is used or dropped.
pub fn with_error_at(self, index: usize, error: Option<String>) -> SecretPrompt
pub fn with_error_at(self, index: usize, error: Option<String>) -> SecretPrompt
Show error under the field at index from the start, as
Self::with_error does for the secret field.
pub fn with_error(self, error: Option<String>) -> SecretPrompt
pub fn with_error(self, error: Option<String>) -> SecretPrompt
Show error under the field it is about from the start, as
Self::reject does but leaving the caret where it is: for a host
that builds its tree afresh and keeps the last refusal itself.
pub fn with_caps_lock(self, caps: CapsLockEstimate) -> SecretPrompt
pub fn with_caps_lock(self, caps: CapsLockEstimate) -> SecretPrompt
What the host already knows of Caps Lock, for a prompt built afresh while the person types: the notice stays up across the rebuild.
pub fn with_busy(self, busy: Option<String>) -> SecretPrompt
pub fn with_busy(self, busy: Option<String>) -> SecretPrompt
What the asker is doing with the answer, from the start
(Self::set_busy).
pub fn with_notice(self, notice: Option<String>) -> SecretPrompt
pub fn with_notice(self, notice: Option<String>) -> SecretPrompt
Informational text from the asker, from the start
(Self::set_notice).
pub fn on_enter_default(self, submit: impl Fn() + 'static) -> SecretPrompt
pub fn on_enter_default(self, submit: impl Fn() + 'static) -> SecretPrompt
Run submit when Enter is pressed in a dialog body’s last field: for
a host with no dialog around the body whose default action would
take that Enter. This is the surrounding dialog’s default action
reaching the host, not a control of the prompt’s own: the prompt’s
own answer stays the published one.
pub fn with_option(
self,
label: impl Into<String>,
checked: bool,
) -> SecretPrompt
pub fn with_option( self, label: impl Into<String>, checked: bool, ) -> SecretPrompt
A check row under the fields, ticked or not to start with.
pub fn set_choice(&mut self, index: usize)
pub fn set_choice(&mut self, index: usize)
Pick the choice at index, as the arrow keys on the choice row do.
pub fn option_checked(&self) -> Option<bool>
pub fn option_checked(&self) -> Option<bool>
Whether the option is ticked.
pub fn into_dialog(self) -> ModalDialog<SecretPrompt>
pub fn into_dialog(self) -> ModalDialog<SecretPrompt>
This prompt as the body of a ModalDialog titled by it, its
actions Cancel and the primary button; Enter answers and Escape
cancels as in every dialog. Read the answer with
dialog.content_mut().take_outcome().
pub fn kind(&self) -> SecretKind
pub fn presentation(&self) -> Presentation
pub fn set_presentation(&mut self, presentation: Presentation)
pub fn title(&self) -> &str
pub fn resource(&self) -> &str
pub fn field_mut(&mut self, role: FieldRole) -> Option<&mut TextInput>
pub fn field_mut(&mut self, role: FieldRole) -> Option<&mut TextInput>
The field holding role, to seed it in tests and captures.
pub fn edit_field(
&mut self,
role: FieldRole,
edit: impl FnOnce(&mut TextInput),
) -> bool
pub fn edit_field( &mut self, role: FieldRole, edit: impl FnOnce(&mut TextInput), ) -> bool
Edit the field holding role as typing into it does: an on-screen
keyboard of the host’s own types this way. What is typed reaches the
host’s buffer (Self::with_secret_buffer), clears the error and
keeps a PIN to its longest. false when there is no such field or
the prompt is busy.
pub fn fields(&self) -> impl Iterator<Item = (FieldRole, &TextInput)>
pub fn fields(&self) -> impl Iterator<Item = (FieldRole, &TextInput)>
Every field, in order, with what it holds.
pub fn focused_field(&self) -> Option<FieldRole>
pub fn focused_field(&self) -> Option<FieldRole>
The role of the field keyboard focus is in, if it is in one.
pub fn shows_keypad(&self) -> bool
pub fn shows_keypad(&self) -> bool
Whether the numeric keypad shows.
pub fn caps_lock_on(&self) -> bool
pub fn caps_lock_on(&self) -> bool
Whether Caps Lock seems on while a secret is being typed.
pub fn notice_line(&self) -> Option<(String, NoticeTone)>
pub fn notice_line(&self) -> Option<(String, NoticeTone)>
The line under the fields: the error, else the asker’s activity, else Caps Lock, else the asker’s notice, else the PIN length or attempts. With whether it is an error.
pub fn set_notice(&mut self, notice: Option<String>)
pub fn set_notice(&mut self, notice: Option<String>)
Informational text from the asker, shown on the notice line when nothing more urgent is.
pub fn set_busy(&mut self, busy: Option<String>)
pub fn set_busy(&mut self, busy: Option<String>)
The asker is using the answer (“Connecting…”): the prompt says so and
takes no input but Escape until Self::reject or set_busy(None).
pub fn reject(&mut self, message: impl Into<String>)
pub fn reject(&mut self, message: impl Into<String>)
The answer was wrong: say why under the field, keep focus in it and select what it holds, so the next keystroke replaces it.
pub fn reject_at(&mut self, index: usize, message: impl Into<String>)
pub fn reject_at(&mut self, index: usize, message: impl Into<String>)
The value of the field at index (in the order the fields stand)
was wrong; as Self::reject for that field.
pub fn refuse_at(&mut self, index: usize, message: impl Into<String>)
pub fn refuse_at(&mut self, index: usize, message: impl Into<String>)
The value of the field at index cannot be used as it stands (too
short, missing): say why and put the caret back at its end, so the
person completes it rather than retyping it.
pub fn clear_error(&mut self)
pub fn clear_error(&mut self)
Take the error down, as typing does: the asker edited the field itself.
pub fn can_submit(&self) -> bool
pub fn can_submit(&self) -> bool
Whether every field holds something and nothing is in flight: the primary button is enabled.
pub fn submit(&mut self)
pub fn submit(&mut self)
Answer with what the fields hold, as the primary button does.
pub fn answer_pending(&self) -> bool
pub fn answer_pending(&self) -> bool
Whether the person answered or backed out and
Self::take_outcome has not been asked yet.
pub fn cancel(&mut self)
pub fn cancel(&mut self)
Back out, as Cancel and Escape do.
pub fn take_outcome(&mut self) -> Option<PromptOutcome>
pub fn take_outcome(&mut self) -> Option<PromptOutcome>
The person’s answer, once: the secrets read out of the fields into
zeroizing buffers, or the cancellation. An answer the prompt itself
can tell is wrong (a short PIN, PINs that differ) is refused in place
and yields nothing. The fields keep what they hold until the prompt
is dropped or Self::wiped, so a rejection can select it.
pub fn wipe(&mut self)
pub fn wipe(&mut self)
Empty every field, overwriting what they held.
pub fn set_keyboard_inset(&mut self, inset: f64)
pub fn set_keyboard_inset(&mut self, inset: f64)
The part of the window an on-screen keyboard covers, from its bottom edge: a sheet stays above it so the field remains visible.
pub fn set_touch_mode(&mut self, touch: bool)
pub fn set_touch_mode(&mut self, touch: bool)
Touch is (or is no longer) the input in use.
pub fn layout(&self) -> &PromptLayout
pub fn layout(&self) -> &PromptLayout
Where everything landed in the last layout.
pub fn field_height(theme: &Theme) -> f64
pub fn field_height(theme: &Theme) -> f64
How tall a field of the prompt stands under theme: a host lines a
control up beside it with this.
pub fn current_field_height(&self, theme: &Theme) -> f64
pub fn current_field_height(&self, theme: &Theme) -> f64
How tall this prompt’s fields stand under theme as it is now: a
touch target once a finger is in play, Self::field_height
otherwise.
pub fn place(&mut self, window: Rect, text: &mut TextRenderer, theme: &Theme)
pub fn place(&mut self, window: Rect, text: &mut TextRenderer, theme: &Theme)
Lay the prompt out: a sheet in window (the display or the app’s
window); an inline prompt or a dialog body in window as its rect.
pub fn preferred_height(
&mut self,
width: f64,
text: &mut TextRenderer,
theme: &Theme,
) -> f64
pub fn preferred_height( &mut self, width: f64, text: &mut TextRenderer, theme: &Theme, ) -> f64
The height an inline prompt or dialog body width wide needs.
pub fn apply_layout_external(&mut self, rect: Rect)
pub fn apply_layout_external(&mut self, rect: Rect)
Take rect as a dialog body’s or an inline prompt’s, measured
already (Self::preferred_height or the layout pass).
pub fn move_focus(&mut self, forward: bool) -> bool
pub fn move_focus(&mut self, forward: bool) -> bool
Move the keyboard focus to the next (or previous) part, as Tab and
Shift+Tab do. false when a dialog body’s focus leaves it.
pub fn contains(&self, point: Point) -> bool
pub fn contains(&self, point: Point) -> bool
Whether point is on the prompt: the sheet’s card, or the body.
pub fn paint(
&mut self,
scene: &mut Scene,
transform: Affine,
text: &mut TextRenderer,
theme: &Theme,
)
pub fn paint( &mut self, scene: &mut Scene, transform: Affine, text: &mut TextRenderer, theme: &Theme, )
Paint the prompt where Self::place laid it out, its answer at
the frame’s instant.
pub fn paint_at(
&mut self,
scene: &mut Scene,
transform: Affine,
text: &mut TextRenderer,
theme: &Theme,
now: Instant,
)
pub fn paint_at( &mut self, scene: &mut Scene, transform: Affine, text: &mut TextRenderer, theme: &Theme, now: Instant, )
Paint the prompt with its answer at now: a host that draws outside
the widget tree and keeps its own frame clock passes its instant, so
a still or a retained frame shows the same pose as a full one.
pub fn answer_deadline(&self) -> Option<Instant>
pub fn answer_deadline(&self) -> Option<Instant>
When the answer under the fields comes to rest; None once its
resting frame has been painted. A host drawing outside the widget
tree asks for frames until then.
pub fn access_node(&self) -> AccessNode
pub fn access_node(&self) -> AccessNode
The prompt’s accessible node: a dialog named by the title (a group inline or inside a dialog that names itself), described by the resource line, its fields named by their labels and masked.
Trait Implementations§
§impl Drop for SecretPrompt
impl Drop for SecretPrompt
§impl Widget for SecretPrompt
impl Widget for SecretPrompt
§fn collect_damage(&self, regions: &mut Vec<Rect>)
fn collect_damage(&self, regions: &mut Vec<Rect>)
A keystroke repaints its field; the whole prompt only when what is around the fields (the line under them, focus, a button) changed.
§fn layout_needs_measure(&self) -> bool
fn layout_needs_measure(&self) -> bool
The keypad comes and goes with touch, which changes the height.
§fn is_focusable(&self) -> bool
fn is_focusable(&self) -> bool
A sheet keeps focus while its answer is checked; in a host’s form the inert prompt leaves the tab order until it can be typed in.
§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 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 build_layout( &mut self, taffy: &mut TaffyTree, theme: &Theme, node_map: &mut HashMap<NodeId, *mut dyn Widget>, ) -> NodeId
fn measure( &mut self, known: Size<Option<f32>>, available: Size<AvailableSpace>, text_renderer: &mut TextRenderer, ) -> Size<f32>
§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,
text_renderer: &mut TextRenderer,
theme: &Theme,
_presence: &PresenceCtx,
)
fn draw( &mut self, scene: &mut Scene, transform: Affine, text_renderer: &mut TextRenderer, theme: &Theme, _presence: &PresenceCtx, )
scene. The default paints nothing.§fn is_layout_dirty(&self) -> bool
fn is_layout_dirty(&self) -> bool
true; widgets with a fixed intrinsic size should override
to false unless a size-affecting mutation landed. Containers MUST
forward: layout-dirty iff any descendant is.§fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
fn set_interaction_environment(&mut self, environment: InteractionEnvironment)
§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 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 get_rect(&self) -> Rect
fn get_rect(&self) -> Rect
§fn is_default_keyboard_focus(&self) -> bool
fn is_default_keyboard_focus(&self) -> bool
fn set_focus(&mut self, focused: bool)
fn is_focused(&self) -> bool
§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 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 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_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
fn ime_edit_fingerprint(&self, key: &[u8; 32]) -> Option<[u8; 32]>
§fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
fn cursor_shape(&self, point: Point) -> Option<CursorIcon>
point is logical coords, same space as Widget::get_rect;
None defers to the default arrow. The host hit-tests the whole
tree via node_map and picks the smallest-area claim, so containers
need not override this.§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.§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 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 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 primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn primary_vertical_scroll(&self) -> Option<PrimaryScrollRegion>
fn apply_primary_vertical_scroll( &mut self, _action: PrimaryScrollAction, ) -> PrimaryScrollResult
§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 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 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 set_platform_conventions(&mut self, conventions: PlatformConventions)
fn set_platform_conventions(&mut self, conventions: PlatformConventions)
§fn set_window_bar_control(&mut self, in_bar: bool)
fn set_window_bar_control(&mut self, in_bar: bool)
§fn sync(&mut self, state: &(dyn Any + 'static), path: &(dyn Any + 'static))
fn sync(&mut self, state: &(dyn Any + 'static), path: &(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,
state: &(dyn Any + 'static),
path: &(dyn Any + 'static),
) -> bool
fn update( &mut self, state: &(dyn Any + 'static), path: &(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 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 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 children(&self) -> Vec<&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 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 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
Self::build_layout gives a layout node,
also those Self::for_each_child keeps from routing (a hidden
pane, a title, a spacer). A retained layout is checked against this
walk before it is called through again, so a widget that replaced a
child without reporting it gets a new layout instead of a call into
freed memory. A child missing here cannot be checked, so debug builds
stop on it. A wrapper that stands for its inner widget’s node visits
the inner widget itself. Read morefn children_mut(&mut self) -> Vec<&mut dyn Widget>
§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 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 tooltip_target_at(&self, point: Point) -> Option<(Rect, String)>
§fn keyboard_input_scope(&self) -> Option<u64>
fn keyboard_input_scope(&self) -> Option<u64>
§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)
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 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>
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 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_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
target is the opaque stable value supplied through
AccessNode::with_action_target. 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_multiline(&self) -> bool
fn ime_multiline(&self) -> bool
§fn presented(&self) -> bool
fn presented(&self) -> bool
true; false only for a widget standing in for a window’s
content whose first frame has not drawn. Must latch: once true,
never false again for the same content.§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 wants_pointer_capture(&self) -> bool
§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 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 next_wake_deadline(&self) -> Option<Instant>
fn next_wake_deadline(&self) -> Option<Instant>
§fn holds_frame_until(&self, now: Instant) -> Option<Instant>
fn holds_frame_until(&self, now: Instant) -> Option<Instant>
crate::arriving): a local read that has
not answered and is still inside its frame budget. The host keeps
the frame on screen until then, or until the data lands, so the
person never sees the space empty and then filled. Containers
forward (the default does).§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 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 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 take_structure_dirty(&mut self) -> bool
fn take_structure_dirty(&mut self) -> bool
§fn take_structure_change(&mut self) -> StructureChange
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 remount_children(&mut self, remount: &mut Remount<'_>) -> bool
fn remount_children(&mut self, remount: &mut Remount<'_>) -> bool
StructureChange::Children this widget or one under it
reported, in the retained layout tree, through remount (see
remount). Returns false when it cannot be
carried out in place: the host then rebuilds its tree, and the change
is carried out by Self::build_layout. A widget reports such a
change until either has carried it out. The default carries out its
children’s.§fn has_pending_visual_work(&self) -> bool
fn has_pending_visual_work(&self) -> bool
§fn has_transient_feedback(&self) -> bool
fn has_transient_feedback(&self) -> bool
§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.§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, )
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§
impl Freeze for SecretPrompt
impl !RefUnwindSafe for SecretPrompt
impl !Send for SecretPrompt
impl !Sync for SecretPrompt
impl Unpin for SecretPrompt
impl UnsafeUnpin for SecretPrompt
impl !UnwindSafe for SecretPrompt
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