Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[bug] app_handle.tray_handle().set_menu() does not appear to update menu item IDs, leading to a crash when new items are selected #3608

Closed
rscarson opened this issue Mar 3, 2022 · 1 comment
Assignees

Comments

@rscarson
Copy link

rscarson commented Mar 3, 2022

Describe the bug

app_handle.tray_handle().set_menu() does not appear to update menu item IDs, leading to a crash when new items are selected.

Crash occurs at `tauri-1.0.0-rc.3\src\app.rs:1257:33', on unwrap() - since the ID being looked up is not in the ids HashMap

Menu appears updated, but new items to the menu cause a panic when selected

Reproduction

Add a system tray to app:

[....]
let tray = SystemTray::new().with_menu(
    SystemTrayMenu::new()
        .add_item(CustomMenuItem::new("exit".to_string(), "Exit"))
);
let mut app  = tauri::Builder::default()
    .system_tray(tray)
[....]

Update the menu later:

[....]
app.run(move |app_handle, e| match e {
    RunEvent::Ready => {
        let app_handle = app_handle.clone();
        app_handle.tray_handle().set_menu(
            SystemTrayMenu::new()
                .add_item(CustomMenuItem::new("test".to_string(), "Test"))
                .add_item(CustomMenuItem::new("exit".to_string(), "Exit"))
        );
[....]

Then start the application, and select 'Test' from the tray icon's context menu.

Panic will occur at tauri-1.0.0-rc.3\src\app.rs:1257:33

Expected behavior

Updated menu will work as displayed, with new items being selectable when changing the context menu

Platform and versions

Operating System - Windows, version 10.0.19042 X64
Webview2 - 98.0.1108.62
Visual Studio Build Tools:
   - Visual Studio Community 2022
   - Visual Studio Enterprise 2019

Node.js environment
  Node.js - 16.13.0
  @tauri-apps/cli - 1.0.0-rc.5
  @tauri-apps/api - 1.0.0-rc.1

Global packages
  npm - 8.1.0
  pnpm - Not installed
  yarn - Not installed

Rust environment
  rustup - 1.24.3
  rustc - 1.58.1
  cargo - 1.58.0
  toolchain - stable-x86_64-pc-windows-msvc

App directory structure
/.git
/.vscode
/build
/node_modules
/public
/src
/src-tauri

App
  tauri - 1.0.0-rc.3
  tauri-build - 1.0.0-rc.3
  tao - 0.6.2
  wry - 0.13.2
  build-type - bundle
  CSP - unset
  distDir - ../build
  devPath - http://localhost:3000/
  framework - React

Stack trace

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-1.0.0-rc.3\src\app.rs:1257:33
stack backtrace:
   0: std::panicking::begin_panic_handler
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\/library\std\src\panicking.rs:498
   1: core::panicking::panic_fmt
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\/library\core\src\panicking.rs:107
   2: core::panicking::panic
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\/library\core\src\panicking.rs:48
   3: enum$<core::option::Option<ref$<alloc::string::String> >, 1, 18446744073709551615, Some>::unwrap<ref$<alloc::string::String> >
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\core\src\option.rs:746
   4: tauri::app::impl$15::build::closure$0<tauri_runtime_wry::Wry,tauri_utils::assets::EmbeddedAssets>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-1.0.0-rc.3\src\app.rs:1257
   5: alloc::boxed::impl$46::call<tuple$<ref$<enum$<tauri_runtime::SystemTrayEvent> > >,dyn$<core::ops::function::Fn<tuple$<ref$<enum$<tauri_runtime::SystemTrayEvent> > >,assoc$<Output,tuple$<> > >,core::marker::Send>,alloc::alloc::Global>
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\alloc\src\boxed.rs:1708
   6: tauri_runtime_wry::handle_event_loop
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-runtime-wry-0.3.2\src\lib.rs:2343
   7: tauri_runtime_wry::impl$45::run::closure$0<tauri::app::impl$14::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-runtime-wry-0.3.2\src\lib.rs:1894
   8: tao::platform_impl::platform::event_loop::impl$2::run_return::closure$0<enum$<tauri_runtime_wry::Message>,tauri_runtime_wry::impl$45::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop.rs:225
   9: alloc::boxed::impl$45::call_mut<tuple$<enum$<tao::event::Event<enum$<tauri_runtime_wry::Message> > >,ref_mut$<enum$<tao::event_loop::ControlFlow> > >,dyn$<core::ops::function::FnMut<tuple$<enum$<tao::event::Event<enum$<tauri_runtime_wry::Message> > >,ref_
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\alloc\src\boxed.rs:1701
  10: tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0<enum$<tauri_runtime_wry::Message> >
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop\runner.rs:249
  11: core::panic::unwind_safe::impl$23::call_once<tuple$<>,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0>
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\core\src\panic\unwind_safe.rs:271
  12: std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0>,tuple$<> >
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\std\src\panicking.rs:406
  13: tauri_runtime_wry::impl$24::from<f64>
  14: std::panicking::try<tuple$<>,core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0> >
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\std\src\panicking.rs:370
  15: std::panic::catch_unwind<core::panic::unwind_safe::AssertUnwindSafe<tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0>,tuple$<> >
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\std\src\panic.rs:133
  16: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum$<tauri_runtime_wry::Message> >::catch_unwind<enum$<tauri_runtime_wry::Message>,tuple$<>,tao::platform_impl::platform::event_loop::runner::impl$3::call_event_handler::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop\runner.rs:155
  17: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum$<tauri_runtime_wry::Message> >::call_event_handler<enum$<tauri_runtime_wry::Message> >
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop\runner.rs:241
  18: tao::platform_impl::platform::event_loop::runner::EventLoopRunner<enum$<tauri_runtime_wry::Message> >::send_event<enum$<tauri_runtime_wry::Message> >
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop\runner.rs:223
  19: tao::platform_impl::platform::system_tray::impl$0::build::closure$2<enum$<tauri_runtime_wry::Message> >
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\system_tray.rs:127
  20: alloc::boxed::impl$46::call<tuple$<enum$<tao::event::Event<tuple$<> > > >,dyn$<core::ops::function::Fn<tuple$<enum$<tao::event::Event<tuple$<> > > >,assoc$<Output,tuple$<> > > >,alloc::alloc::Global>
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\alloc\src\boxed.rs:1708
  21: tao::platform_impl::platform::menu::MenuHandler::send_menu_event
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\menu.rs:65
  22: tao::platform_impl::platform::menu::subclass_proc
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\menu.rs:352
  23: DefSubclassProc
  24: DefSubclassProc
  25: CallWindowProcW
  26: DispatchMessageW
  27: windows::Windows::Win32::UI::WindowsAndMessaging::DispatchMessageW
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\windows-0.30.0\src\Windows\Win32\UI\WindowsAndMessaging\mod.rs:2637
  28: tao::platform_impl::platform::event_loop::EventLoop<enum$<tauri_runtime_wry::Message> >::run_return<enum$<tauri_runtime_wry::Message>,tauri_runtime_wry::impl$45::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop.rs:255
  29: tao::platform_impl::platform::event_loop::EventLoop<enum$<tauri_runtime_wry::Message> >::run<enum$<tauri_runtime_wry::Message>,tauri_runtime_wry::impl$45::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\platform_impl\windows\event_loop.rs:209
  30: tao::event_loop::EventLoop<enum$<tauri_runtime_wry::Message> >::run<enum$<tauri_runtime_wry::Message>,tauri_runtime_wry::impl$45::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tao-0.6.2\src\event_loop.rs:177
  31: tauri_runtime_wry::impl$45::run<tauri::app::impl$14::run::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-runtime-wry-0.3.2\src\lib.rs:1893
  32: tauri::app::App<tauri_runtime_wry::Wry>::run<tauri_runtime_wry::Wry,app::main::closure$0>
             at C:\Users\redacted\.cargo\registry\src\github.com-1ecc6299db9ec823\tauri-1.0.0-rc.3\src\app.rs:486
  33: app::main
             at .\src\main.rs:65
  34: core::ops::function::FnOnce::call_once<void (*)(),tuple$<> >
             at /rustc/db9d1b20bba1968c1ec1fc49616d4742c1725b4b\library\core\src\ops\function.rs:227
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
[0303/143840.008:ERROR:window_impl.cc(114)] Failed to unregister class Chrome_WidgetWin_0. Error = 0
error: process didn't exit successfully: `target\debug\app.exe` (exit code: 101)

Additional context

No response

@rscarson rscarson changed the title [bug] [bug] app_handle.tray_handle().set_menu() does not appear to update menu item IDs, leading to a crash when new items are selected Mar 3, 2022
@lucasfernog lucasfernog self-assigned this Mar 4, 2022
@rscarson
Copy link
Author

rscarson commented Mar 4, 2022

thanks for the quick work @lucasfernog! Looking forward to the next RC with the patch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants