mirror of
https://github.com/JakeStanger/ironbar.git
synced 2024-10-26 09:38:51 +03:00
fix(tray): submenus not working
Fixes a regression from previous tray fixes that caused submenus within the main tray menu to never show. Fixes #455
This commit is contained in:
parent
0675b917f2
commit
c62d47555e
@ -188,8 +188,23 @@ enum TrayMenuWidget {
|
||||
|
||||
impl TrayMenuItem {
|
||||
fn new(info: &MenuItemInfo, tx: mpsc::Sender<i32>) -> Self {
|
||||
let mut submenu = HashMap::new();
|
||||
let menu = Menu::new();
|
||||
|
||||
macro_rules! add_submenu {
|
||||
($menu:expr, $widget:expr) => {
|
||||
if !info.submenu.is_empty() {
|
||||
for sub_item in &info.submenu {
|
||||
let sub_item = TrayMenuItem::new(sub_item, tx.clone());
|
||||
call!($menu, add, sub_item.widget);
|
||||
submenu.insert(sub_item.id, sub_item);
|
||||
}
|
||||
|
||||
$widget.set_submenu(Some(&menu));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
let widget = match (info.menu_type, info.toggle_type) {
|
||||
(MenuType::Separator, _) => TrayMenuWidget::Separator(SeparatorMenuItem::new()),
|
||||
(MenuType::Standard, ToggleType::Checkmark) => {
|
||||
@ -200,6 +215,8 @@ impl TrayMenuItem {
|
||||
.active(info.toggle_state == ToggleState::On)
|
||||
.build();
|
||||
|
||||
add_submenu!(menu, widget);
|
||||
|
||||
{
|
||||
let tx = tx.clone();
|
||||
let id = info.id;
|
||||
@ -212,12 +229,13 @@ impl TrayMenuItem {
|
||||
TrayMenuWidget::Checkbox(widget)
|
||||
}
|
||||
(MenuType::Standard, _) => {
|
||||
let builder = MenuItem::builder()
|
||||
let widget = MenuItem::builder()
|
||||
.label(&info.label)
|
||||
.visible(info.visible)
|
||||
.sensitive(info.enabled);
|
||||
.sensitive(info.enabled)
|
||||
.build();
|
||||
|
||||
let widget = builder.build();
|
||||
add_submenu!(menu, widget);
|
||||
|
||||
{
|
||||
let tx = tx.clone();
|
||||
@ -236,7 +254,7 @@ impl TrayMenuItem {
|
||||
id: info.id,
|
||||
widget,
|
||||
menu_widget: menu,
|
||||
submenu: HashMap::new(),
|
||||
submenu,
|
||||
tx,
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user