diff --git a/Nasal/canvas/gui/Menu.nas b/Nasal/canvas/gui/Menu.nas index 51a1097e3..b74c95fff 100644 --- a/Nasal/canvas/gui/Menu.nas +++ b/Nasal/canvas/gui/Menu.nas @@ -153,6 +153,10 @@ gui.MenuItem = { return me.update(); }, + text: func { + return me._text; + }, + setShortcut: func(shortcut) { me._shortcut = keyboard.Shortcut.new(shortcut); if (me._parent_menu != nil and me._parent_menu._canvas_item != nil and me._cb != nil) { @@ -165,9 +169,10 @@ gui.MenuItem = { _setParentMenu: func(m) { me._parent_menu = m; if (me._parent_menu != nil and me._parent_menu._canvas_item != nil and me._cb != nil) { - if (me._shortcut != nil) { - me._parent_menu._canvas_item.bindShortcut(me._shortcut, me._cb); - } + # fixme: add window-level shortcurt handling + # if (me._shortcut != nil) { + # me._parent_menu._canvas_item.bindShortcut(me._shortcut, me._cb); + # } if (me._menu != nil) { for (var i = 0; i < me._menu.count(); i += 1) { me._menu.getItem(i).setCanvasItem(me._parent_menu._canvas_item); @@ -178,7 +183,7 @@ gui.MenuItem = { setIcon: func(icon) { me._icon = icon; - me._view.setIcon(icon); + me._view.setIcon(me, icon); return me.update(); }, @@ -190,6 +195,7 @@ gui.MenuItem = { update: func { if (me._view != nil) { me._view.update(me); + me._view._updateLayoutSizes(me); } return me; }, @@ -253,7 +259,7 @@ gui.Menu = { } var item = gui.MenuItem.new(me._root, me.style, {text: text, cb: cb, shortcut: shortcut, icon: icon, enabled: enabled}); me.addItem(item); - return me; + return item; }, # @description Create, insert and return a `canvas.gui.MenuItem with the given text and assign the given submenu to it, diff --git a/Nasal/canvas/gui/dialogs/WidgetsFactoryDialog.nas b/Nasal/canvas/gui/dialogs/WidgetsFactoryDialog.nas index 30a76fdb6..6df559284 100644 --- a/Nasal/canvas/gui/dialogs/WidgetsFactoryDialog.nas +++ b/Nasal/canvas/gui/dialogs/WidgetsFactoryDialog.nas @@ -18,9 +18,10 @@ var WidgetsFactoryDialog = { m.menubar.setCanvasItem(m.root); m.menubar.createMenu("File") .createItem(text: "Quit", cb: func m.del(), shortcut: "+Q"); - m.menubar.createMenu("Tabs") - .createItem(text: "Select first tab", cb: func m.tabs.setCurrentTab("tab-1")) - .createItem(text: "Select second tab", cb: func m.tabs.setCurrentTab("tab-2")); + var tabsMenu = m.menubar.createMenu("Tabs"); + tabsMenu.createItem(text: "Select first tab", cb: func m.tabs.setCurrentTab("tab-1")); + tabsMenu.createItem(text: "Select second tab", cb: func m.tabs.setCurrentTab("tab-2")); + m.menubar.createMenu("Widgets") .createItem(text: "Benchmark label", cb: func { m.benchmark_widget(canvas.gui.widgets.Label, func(w, i) { diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas index 90ff3732a..9a563158f 100644 --- a/Nasal/canvas/gui/styles/DefaultStyle.nas +++ b/Nasal/canvas/gui/styles/DefaultStyle.nas @@ -911,11 +911,13 @@ DefaultStyle.widgets["menu-item"] = { }, setShortcut: func(model, shortcut) { - me._shortcut.setText(shortcut.repr()); + if (shortcut != nil) { + me._shortcut.setText(shortcut.repr()); + } return me._updateLayoutSizes(model); }, - setIcon: func(icon) { + setIcon: func(model, icon) { if (!icon) { me._icon.hide(); } else { diff --git a/Nasal/canvas/gui/widgets/MenuBar.nas b/Nasal/canvas/gui/widgets/MenuBar.nas index 83b42d05c..0807a8784 100644 --- a/Nasal/canvas/gui/widgets/MenuBar.nas +++ b/Nasal/canvas/gui/widgets/MenuBar.nas @@ -44,13 +44,12 @@ gui.widgets.MenuBar = { die("cannot create a submenu item without submenu"); } var item = gui.MenuItem.new(me._view._items, style, - { - text: text, cb: nil, shortcut: nil, icon: nil, enabled: enabled, - menu_position: gui.MenuItem.MenuPosition.Below, - } + { + text: text, cb: nil, shortcut: nil, icon: nil, enabled: enabled, + menu_position: gui.MenuItem.MenuPosition.Below, + } ); item._is_menubar_item = 1; - item._view._updateLayoutSizes(item); item._setParentMenu(me); item.setMenu(menu); me._layout.addItem(item);