DioxusLabs / DioxusLabs/dioxus

use_tray_menu_event_handler no longer works

Open
#4,495 1 comment 1 reaction 0 assignees View on GitHub
bug
Dominant language
Rust
Stars
39.1k
Forks
1.9k
Avg merge
4d 10h
Merged PRs (30d)
4

Description

I modified the multiwindow with tray example:
```
//! Multiwindow with tray icon example
//!
//! This example shows how to implement a simple multiwindow application and tray icon using dioxus.
//! This works by spawning a new window when the user clicks a button. We have to build a new virtualdom which has its
//! own context, root elements, etc.
//!
//! This is useful for apps that incorporate settings panels or persistent windows like Raycast.

use dioxus::{
desktop::{
tao::event::Event,
trayicon::{
menu::{Menu, MenuItem}, Icon, TrayIcon, TrayIconBuilder
},
use_tray_menu_event_handler, use_wry_event_handler, WindowEvent,
window, WindowCloseBehaviour,
},
prelude::*,
};

fn main() {
dioxus::launch(app);
}

fn app() -> Element {
use_hook(|| {
// Set the close behavior for the main window
// This will hide the window instead of closing it when the user clicks the close button
window().set_close_behavior(WindowCloseBehaviour::WindowHides);

let menu = Menu::new();

let quit_item = MenuItem::with_id("quit", "Quit", true, None);
let _ = menu.append_items(&[&quit_item]).unwrap();

// Building the tray icon itself
let builder = TrayIconBuilder::new()
.with_menu(Box::new(menu))
.with_menu_on_left_click(false);

// Providing the context to the dioxus app
// Basically we just did the exact same thing as the default `init_tray_icon` function would do
// https://github.com/DioxusLabs/dioxus/blob/a729968ee47b066e6d55dd9e0f8c2a1f1aef79e0/packages/desktop/src/trayicon.rs#L31
// We do it manually to have more control over the tray icon
provide_context(builder.build().expect("tray icon builder failed"))
});

use_tray_menu_event_handler(move |event| {
dioxus::logger::tracing::info!("Tray event happened: {:?}", event);
// Potentially there is a better way to do this.
// The `0` is the id of the menu item
match event.id.0.as_str() {
"quit" => {
std::process::exit(0);
}
_ => {}
}
});

rsx! {
button {
onclick: move |_| {
window().new_window(VirtualDom::new(popup), Default::default());
},
"New Window"
}
}
}

fn popup() -> Element {
rsx! {
div { "This is a popup window!" }
}
}
```

I tested on both main and 0.7.0-alpha.3. In my `use_tray_menu_event_handler` closure, I don't get prints nor does my Quit button do anything. This worked in 0.6

Windows 11

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.