slint/tests/cases/focus/keyboard_focus_capture.slint
Olivier Goffart e172ed504f
Some checks are pending
autofix.ci / format_fix (push) Waiting to run
CI / files-changed (push) Waiting to run
autofix.ci / lint_typecheck (push) Waiting to run
CI / docs (push) Blocked by required conditions
CI / wasm (push) Blocked by required conditions
CI / wasm_demo (push) Blocked by required conditions
CI / tree-sitter (push) Blocked by required conditions
CI / python_test (macos-14) (push) Blocked by required conditions
CI / build_and_test (--exclude bevy-example, ubuntu-22.04, 1.85) (push) Blocked by required conditions
CI / build_and_test (--exclude ffmpeg --exclude gstreamer-player, --exclude bevy-example, windows-2022, 1.85) (push) Blocked by required conditions
CI / build_and_test (--exclude ffmpeg --exclude gstreamer-player, macos-14, stable) (push) Blocked by required conditions
CI / build_and_test (--exclude ffmpeg --exclude gstreamer-player, windows-2022, beta) (push) Blocked by required conditions
CI / build_and_test (--exclude ffmpeg --exclude gstreamer-player, windows-2022, stable) (push) Blocked by required conditions
CI / build_and_test (ubuntu-22.04, nightly) (push) Blocked by required conditions
CI / node_test (macos-14) (push) Blocked by required conditions
CI / node_test (ubuntu-22.04) (push) Blocked by required conditions
CI / node_test (windows-2022) (push) Blocked by required conditions
CI / python_test (ubuntu-22.04) (push) Blocked by required conditions
CI / python_test (windows-2022) (push) Blocked by required conditions
CI / cpp_test_driver (macos-13) (push) Blocked by required conditions
CI / cpp_test_driver (ubuntu-22.04) (push) Blocked by required conditions
CI / mcu-embassy (push) Blocked by required conditions
CI / cpp_test_driver (windows-2022) (push) Blocked by required conditions
CI / cpp_cmake (macos-14, 1.85) (push) Blocked by required conditions
CI / cpp_cmake (ubuntu-22.04, stable) (push) Blocked by required conditions
CI / cpp_cmake (windows-2022, nightly) (push) Blocked by required conditions
CI / ffi_32bit_build (push) Blocked by required conditions
CI / cpp_package_test (push) Blocked by required conditions
CI / vsce_build_test (push) Blocked by required conditions
CI / mcu (pico-st7789, thumbv6m-none-eabi) (push) Blocked by required conditions
CI / mcu (pico2-st7789, thumbv8m.main-none-eabihf) (push) Blocked by required conditions
CI / mcu (stm32h735g, thumbv7em-none-eabihf) (push) Blocked by required conditions
CI / updater_test (0.3.0) (push) Blocked by required conditions
CI / fmt_test (push) Blocked by required conditions
CI / esp-idf-quick (push) Blocked by required conditions
CI / android (push) Blocked by required conditions
CI / miri (push) Blocked by required conditions
CI / test-figma-inspector (push) Blocked by required conditions
FocusScope: Remove FocusPolicy and adds two bool state instead (#9263)
As discussed in API review, we thought that as we don't have bitflag,
it makes more sense to have two boolean properties.

Also change the behavior as the focus out event should always be
forwarded regardless of the policy.
2025-08-26 21:42:40 +02:00

114 lines
3.7 KiB
Text

// Copyright © SixtyFPS GmbH <info@slint.dev>
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
// Use lowercase letters to avoid extra key events due to virtually pressing "Shift"
import { VerticalBox, ListView } from "std-widgets.slint";
export component TestCase inherits Window {
width: 500px;
height: 400px;
property <[string]> features : [ "f" ];
in-out property <string> result;
FocusScope {
focus-on-tab-navigation: false;
capture-key-pressed(event) => {
if (event.text == "x") {
result += "Or:";
}
return reject;
}
VerticalBox {
VerticalBox {
if true: ListView {
for f in features: FocusScope {
capture-key-pressed(event) => {
if (event.text == "x") {
result += "I1r:";
}
return reject;
}
key-pressed(event) => {
if (event.text == "x") {
result += "1:";
return accept;
}
return reject;
}
}
}
if false: Rectangle { }
}
FocusScope {
capture-key-pressed(event) => {
if (event.text == "x") {
result += "I2a:";
return accept;
}
return reject;
}
key-pressed(event) => {
if (event.text == "x") {
result += "2:";
return accept;
}
return reject;
}
}
}
}
}
/*
```rust
let instance = TestCase::new().unwrap();
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq!(instance.get_result(), "");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq!(instance.get_result(), "Or:I1r:1:", "one tab");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq!(instance.get_result(), "Or:I1r:1:Or:I2a:", "two tab");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq!(instance.get_result(), "Or:I1r:1:Or:I2a:Or:I1r:1:", "three tab");
```
```cpp
auto handle = TestCase::create();
const TestCase &instance = *handle;
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq(instance.get_result(), "");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq(instance.get_result(), "Or:I1r:1:");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq(instance.get_result(), "Or:I1r:1:Or:I2a:");
slint_testing::send_keyboard_string_sequence(&instance, "\t");
slint_testing::send_keyboard_string_sequence(&instance, "x");
assert_eq(instance.get_result(), "Or:I1r:1:Or:I2a:Or:I1r:1:");
```
```js
var instance = new slint.TestCase();
slintlib.private_api.send_keyboard_string_sequence(instance, "x");
assert.equal(instance.result, "");
slintlib.private_api.send_keyboard_string_sequence(instance, "\t");
slintlib.private_api.send_keyboard_string_sequence(instance, "x");
assert.equal(instance.result, "Or:I1r:1:");
slintlib.private_api.send_keyboard_string_sequence(instance, "\t");
slintlib.private_api.send_keyboard_string_sequence(instance, "x");
assert.equal(instance.result, "Or:I1r:1:Or:I2a:");
slintlib.private_api.send_keyboard_string_sequence(instance, "\t");
slintlib.private_api.send_keyboard_string_sequence(instance, "x");
assert.equal(instance.result, "Or:I1r:1:Or:I2a:Or:I1r:1:");
```
*/