Skip to content

FocusScope

export component Example inherits Window {
width: 100px;
height: 100px;
forward-focus: my-key-handler;
my-key-handler := FocusScope {
key-pressed(event) => {
debug(event.text);
if (event.modifiers.control) {
debug("control was pressed during this event");
}
if (event.text == Key.Escape) {
debug("Esc key was pressed")
}
accept
}
}
}
slint

The FocusScope exposes callbacks to handle key events. Note that FocusScope will only invoke them when it has-focus.

The KeyEvent has a text property, which is a character of the key entered. When a non-printable key is pressed, the character will be either a control character, or it will be mapped to a private unicode character. The mapping of these non-printable, special characters is available in the KeyEvent namespace

Key events are delivered to the element that has-focus.

Before attempting to deliver the KeyEvent, it is checked whether some other element wants to intercept the KeyEvent. Visiting all the elements starting at the Window, going down toward the focused element, capture_key_pressed or capture_key_released is called. If any of these returns EventResult::accept, then key event processing stops at this point. If EventResult::reject is returned, then event delivery continues.

If no element captures the KeyEvent, then the KeyEvent is delivered to the focused element by calling key-pressed or key-released. If these callbacks return EventResult::accept, then event delivery is finished and the event has been handled. Otherwise, (recursively) try to deliver the key event to the parent element.

bool (out) default: false

Is true when the element has keyboard focus.

bool default: true

When false, the FocusScope will not accept focus, neither via click nor via tab focus traversal, not even programmatically.

A parent FocusScope will still receive key events from child FocusScopes that were rejected, even if enabled is set to false.

bool default: true

When true, the FocusScope will make itself the focused element when clicked.

This property has no effect if the enabled property is set to false.

bool default: true

When true, the FocusScope will accept focus as part of the tab focus traversal.

This property has no effect if the enabled property is set to false.

Call this function to transfer keyboard focus to this FocusScope, to receive future KeyEvents.

Call this function to remove keyboard focus from this FocusScope if it currently has the focus. See also FocusHandling.

capture-key-pressed(KeyEvent) -> EventResult

Section titled “capture-key-pressed(KeyEvent) -> EventResult”

This function is called during key event handling, before key-pressed is called. Use this to intercept key press events. The returned EventResult indicates whether to accept or reject the event. Rejected events are forwarded to the parent element.

capture-key-released(KeyEvent) -> EventResult

Section titled “capture-key-released(KeyEvent) -> EventResult”

This function is called during key event handling, before key-released is called. Use this to intercept key release events. The returned EventResult indicates whether to accept or reject the event. Rejected events are forwarded to the parent element.

Invoked when a key is pressed, the argument is a KeyEvent struct. The returned EventResult indicates whether to accept or reject the event. Rejected events are forwarded to the parent element.

Invoked when a key is released, the argument is a KeyEvent struct. The returned EventResult indicates whether to accept or reject the event. Rejected events are forwarded to the parent element.

Invoked when the focus on the FocusScope has changed. The argument is a a FocusReason enum containing the reason for focus change.

Invoked when the FocusScope gains focus. The argument is a a FocusReason enum containing the reason for focus gain.

Invoked when the FocusScope loses focus. The argument is a a FocusReason enum containing the reason for focus loss.


© 2025 SixtyFPS GmbH