fix(menu): panic when right-clicking a submenu

This commit is contained in:
Alex Klepov 2026-08-20 01:18:04 +03:00 • committed by GitHub
parent a5267e623f
commit 3a8ebf9197
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 56 additions and 43 deletions

View file

@ -30,6 +30,7 @@ pub enum Message {
WindowClose,
Surface(cosmic::surface::Action),
ToggleHideContent,
ToggleSomeAction,
WindowNew,
}
@ -82,6 +83,7 @@ impl cosmic::Application for App {
/// Handle application events here.
fn update(&mut self, message: Self::Message) -> Task<Self::Message> {
tracing::error!("Clicked {message:?}");
match message {
Message::Clicked => {
self.button_label = format!("Clicked {message:?}");
@ -91,9 +93,10 @@ impl cosmic::Application for App {
cosmic::app::Action::Surface(action),
));
}
Message::WindowClose => {}
Message::ToggleHideContent => {}
Message::WindowNew => {}
Message::WindowClose |
Message::ToggleHideContent |
Message::ToggleSomeAction |
Message::WindowNew=> {}
}
Task::none()
@ -102,7 +105,7 @@ impl cosmic::Application for App {
/// Creates a view after each update.
fn view(&self) -> Element<'_, Self::Message> {
let widget = cosmic::widget::context_menu(
cosmic::widget::button::text(self.button_label.to_string()).on_press(Message::Clicked),
cosmic::widget::button::text(self.button_label.clone()).on_press(Message::Clicked),
self.context_menu(),
)
.on_surface_action(Message::Surface);
@ -131,7 +134,14 @@ impl App {
None,
self.hide_content,
ContextMenuAction::ToggleHideContent,
)],
),
menu::Item::CheckBox(
"Test content",
None,
self.hide_content,
ContextMenuAction::ToggleSomeAction,
)
],
),
menu::Item::Divider,
menu::Item::Button("Quit", None, ContextMenuAction::WindowClose),
@ -144,6 +154,7 @@ impl App {
pub enum ContextMenuAction {
WindowClose,
ToggleHideContent,
ToggleSomeAction,
WindowNew,
}
@ -153,6 +164,7 @@ impl menu::Action for ContextMenuAction {
match self {
ContextMenuAction::WindowClose => Message::WindowClose,
ContextMenuAction::ToggleHideContent => Message::ToggleHideContent,
ContextMenuAction::ToggleSomeAction => Message::ToggleSomeAction,
ContextMenuAction::WindowNew => Message::WindowNew,
}
}