mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-07-01 18:51:04 +02: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
1 changed files with 22 additions and 4 deletions
|
@ -188,8 +188,23 @@ enum TrayMenuWidget {
|
||||||
|
|
||||||
impl TrayMenuItem {
|
impl TrayMenuItem {
|
||||||
fn new(info: &MenuItemInfo, tx: mpsc::Sender<i32>) -> Self {
|
fn new(info: &MenuItemInfo, tx: mpsc::Sender<i32>) -> Self {
|
||||||
|
let mut submenu = HashMap::new();
|
||||||
let menu = Menu::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) {
|
let widget = match (info.menu_type, info.toggle_type) {
|
||||||
(MenuType::Separator, _) => TrayMenuWidget::Separator(SeparatorMenuItem::new()),
|
(MenuType::Separator, _) => TrayMenuWidget::Separator(SeparatorMenuItem::new()),
|
||||||
(MenuType::Standard, ToggleType::Checkmark) => {
|
(MenuType::Standard, ToggleType::Checkmark) => {
|
||||||
|
@ -200,6 +215,8 @@ impl TrayMenuItem {
|
||||||
.active(info.toggle_state == ToggleState::On)
|
.active(info.toggle_state == ToggleState::On)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
add_submenu!(menu, widget);
|
||||||
|
|
||||||
{
|
{
|
||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
let id = info.id;
|
let id = info.id;
|
||||||
|
@ -212,12 +229,13 @@ impl TrayMenuItem {
|
||||||
TrayMenuWidget::Checkbox(widget)
|
TrayMenuWidget::Checkbox(widget)
|
||||||
}
|
}
|
||||||
(MenuType::Standard, _) => {
|
(MenuType::Standard, _) => {
|
||||||
let builder = MenuItem::builder()
|
let widget = MenuItem::builder()
|
||||||
.label(&info.label)
|
.label(&info.label)
|
||||||
.visible(info.visible)
|
.visible(info.visible)
|
||||||
.sensitive(info.enabled);
|
.sensitive(info.enabled)
|
||||||
|
.build();
|
||||||
|
|
||||||
let widget = builder.build();
|
add_submenu!(menu, widget);
|
||||||
|
|
||||||
{
|
{
|
||||||
let tx = tx.clone();
|
let tx = tx.clone();
|
||||||
|
@ -236,7 +254,7 @@ impl TrayMenuItem {
|
||||||
id: info.id,
|
id: info.id,
|
||||||
widget,
|
widget,
|
||||||
menu_widget: menu,
|
menu_widget: menu,
|
||||||
submenu: HashMap::new(),
|
submenu,
|
||||||
tx,
|
tx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue