implement smarter reloading for custom menus
Mark Tiefenbruck mark@fluxbox.org
3 files changed,
17 insertions(+),
6 deletions(-)
M
src/FbCommands.cc
→
src/FbCommands.cc
@@ -343,14 +343,21 @@ BScreen *screen = Fluxbox::instance()->mouseScreen();
if (screen == 0) return; - if (m_menu.get()) { - m_menu->removeAll(); - m_menu->setLabel(""); + if (!m_menu.get() || screen->screenNumber() != m_menu->screenNumber()) { + m_menu.reset(screen->createMenu("")); + m_menu->setReloadHelper(new FbTk::AutoReloadHelper()); + m_menu->reloadHelper()->setReloadCmd(FbTk::RefCount<FbTk::Command<void> >(new FbTk::SimpleCommand<ShowCustomMenuCmd>(*this, &ShowCustomMenuCmd::reload))); + m_menu->reloadHelper()->setMainFile(custom_menu_file); } else - m_menu.reset(screen->createMenu("")); + m_menu->reloadHelper()->checkReload(); - MenuCreator::createFromFile(custom_menu_file, *m_menu.get()); ::showMenu(*screen, *m_menu.get()); +} + +void ShowCustomMenuCmd::reload() { + m_menu->removeAll(); + m_menu->setLabel(""); + MenuCreator::createFromFile(custom_menu_file, *m_menu.get(), m_menu->reloadHelper()); } REGISTER_COMMAND(rootmenu, FbCommands::ShowRootMenuCmd, void);
M
src/FbCommands.hh
→
src/FbCommands.hh
@@ -132,9 +132,10 @@ class ShowCustomMenuCmd: public FbTk::Command<void> {
public: explicit ShowCustomMenuCmd(const std::string &arguments); void execute(); + void reload(); private: std::string custom_menu_file; - std::auto_ptr<FbTk::Menu> m_menu; + std::auto_ptr<FbMenu> m_menu; }; class ShowRootMenuCmd: public FbTk::Command<void> {