slint-ui / slint

Slint is a declarative GUI toolkit to build native user interfaces for Rust, C++, or JavaScript apps.
https://slint.dev
Other
16.93k stars 568 forks source link

Panic when pressing End key in LineEdit using software renderer #3058

Closed kivimango closed 1 year ago

kivimango commented 1 year ago

Platform:

Manjaro Linux KDE, Redox OS

Steps to reproduce:

Run the following code snippet with

SLINT_BACKEND=winit-software cargo run

and type something into the LineEdit. Press the End key. The app panic with the

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/euclid-0.22.9/src/point.rs:429:25

error message.

// Minimal, Reproducible Example 
slint::slint! {
    import { LineEdit, HorizontalBox, VerticalBox} from "std-widgets.slint";
    export component Example {
        width: 640px;
        height: 320px;

        HorizontalBox {
            VerticalBox {
                LineEdit {
                height: 32px;
                input-type: text;
                }
            }   
        }
    }
}

fn main() {
    Example::new().unwrap().run().unwrap();
}

My Cargo.toml:

[package]
name = "textinput"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
slint = { git = "https://github.com/slint-ui/slint", default-features = false, features = ["compat-1-0", "backend-winit", "renderer-winit-software"] }

[build-dependencies]
slint-build = { git = "https://github.com/slint-ui/slint" }

Expected behavior:

The LineEdit should not panic and the cursor should be moved to the end of the LineEdit's input string.

kivimango commented 1 year ago

Backtrace:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/euclid-0.22.9/src/point.rs:429:25
stack backtrace:
   0: rust_begin_unwind
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/panicking.rs:579:5
   1: core::panicking::panic_fmt
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/panicking.rs:64:14
   2: core::panicking::panic
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/panicking.rs:114:5
   3: core::option::Option<T>::unwrap
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/option.rs:942:21
   4: euclid::point::Point2D<T,U>::cast
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/euclid-0.22.9/src/point.rs:429:9
   5: <i_slint_core::software_renderer::SoftwareRenderer as i_slint_core::renderer::RendererSealed>::text_input_byte_offset_for_position
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/software_renderer.rs:377:19
   6: i_slint_core::items::text::TextInput::byte_offset_for_position
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/items/text.rs:1179:9
   7: i_slint_core::items::text::TextInput::move_cursor
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/items/text.rs:830:17
   8: <i_slint_core::items::text::TextInput as i_slint_core::items::Item_vtable_mod::Item>::key_event
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/items/text.rs:413:29
   9: i_slint_core::items::TextInputVTable::key_event
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/items.rs:104:1
  10: i_slint_core::items::Item_vtable_mod::ItemTO::key_event
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/items.rs:104:1
  11: i_slint_core::window::WindowInner::process_key_input
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/window.rs:501:23
  12: i_slint_core::api::Window::dispatch_event
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/api.rs:473:17
  13: i_slint_backend_winit::event_loop::process_window_event
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/event_loop.rs:333:17
  14: i_slint_backend_winit::event_loop::run::{{closure}}
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/event_loop.rs:512:29
  15: i_slint_backend_winit::event_loop::run::{{closure}}::{{closure}}
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/event_loop.rs:656:65
  16: i_slint_backend_winit::event_loop::CURRENT_WINDOW_TARGET::<impl i_slint_backend_winit::event_loop::CURRENT_WINDOW_TARGET>::set
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-hkt-0.1.2/src/lib.rs:264:25
  17: i_slint_backend_winit::event_loop::run::{{closure}}
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/event_loop.rs:656:17
  18: winit::platform_impl::platform::x11::EventLoop<T>::drain_events::{{closure}}::{{closure}}
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/mod.rs:522:29
  19: winit::platform_impl::platform::sticky_exit_callback
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/mod.rs:884:9
  20: winit::platform_impl::platform::x11::EventLoop<T>::drain_events::{{closure}}
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/mod.rs:513:17
  21: winit::platform_impl::platform::x11::event_processor::EventProcessor<T>::process_event
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/event_processor.rs:616:21
  22: winit::platform_impl::platform::x11::EventLoop<T>::drain_events
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/mod.rs:512:13
  23: winit::platform_impl::platform::x11::EventLoop<T>::run_return::single_iteration
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/mod.rs:343:13
  24: winit::platform_impl::platform::x11::EventLoop<T>::run_return
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/x11/mod.rs:483:27
  25: winit::platform_impl::platform::EventLoop<T>::run_return
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform_impl/linux/mod.rs:785:56
  26: <winit::event_loop::EventLoop<T> as winit::platform::run_return::EventLoopExtRunReturn>::run_return
             at /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/winit-0.28.6/src/platform/run_return.rs:51:9
  27: i_slint_backend_winit::event_loop::run
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/event_loop.rs:647:9
  28: <i_slint_backend_winit::Backend as i_slint_core::platform::Platform>::run_event_loop
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/winit/lib.rs:230:9
  29: slint::run_event_loop::{{closure}}
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/api/rs/slint/lib.rs:288:49
  30: i_slint_core::with_platform::{{closure}}
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/lib.rs:98:20
  31: std::thread::local::LocalKey<T>::try_with
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/thread/local.rs:446:16
  32: std::thread::local::LocalKey<T>::with
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/std/src/thread/local.rs:422:9
  33: i_slint_core::with_platform
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/core/lib.rs:97:5
  34: i_slint_backend_selector::with_platform
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/internal/backends/selector/lib.rs:82:5
  35: slint::run_event_loop
             at /home/user/.cargo/git/checkouts/slint-8153123e5dffa129/eb25777/api/rs/slint/lib.rs:288:5
  36: <lineedit::slint_generatedExample::Example as i_slint_core::api::ComponentHandle>::run
             at ./src/main.rs:1:1
  37: lineedit::main
             at ./src/main.rs:19:5
  38: core::ops::function::FnOnce::call_once
             at /rustc/84c898d65adf2f39a5a98507f1fe0ce10a2b8dbc/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
ogoffart commented 1 year ago

Thanks for the bug report.

I did see that before https://github.com/slint-ui/slint/issues/2957#issuecomment-1609445441

ogoffart commented 1 year ago

(This was actually unrelated to crashes seen in #2957)

kivimango commented 1 year ago

Thank you.