From: Etienne L. <et...@at...> - 2008-07-08 08:20:45
|
Hello, I am trying to add dynamic menu support to my program. I would like the menu to be possibly re-generated every time it is shown. I tried using the onSelect hook to acheive this, but when I click on the menu item the same error message repeats thousands of times and X freezes completely: (gui:31135): Gtk-CRITICAL **: gtk_widget_event: assertion `WIDGET_REALIZED_FOR_EVENT (widget, event)' failed Does someone know the cause of this bug or know a cleaner way to have dynamic menus? Here is my working code for regular menus: buildMenu (MenuM name children) = do item <- menuItemNewWithLabel name menu <- menuNew menuItemSetSubmenu item menu populateMenu menu children return item And the code for dynamic menus: buildMenu (DynM name mchildren) = do item <- menuItemNewWithLabel name menuItemSetSubmenu item =<< menuNew onSelect item $ do children <- mchildren if genMenuValue children then do menu <- menuNew menuItemSetSubmenu item menu populateMenu menu $ genMenuItems children widgetShowAll menu else return () return item mainMenu = genMenuItems $ do submenu "File" $ do dynamicMenu "Time:" $ do getClockTime >>= \t -> return $ leaf (show t) (return ()) >> return True leaf "Exit" mainQuit The submenu displays properly with the time, but clicking on "Time:" activates the bug. The full source is available on my website: http://www.neverfear.org/~atnnn/code/casui/src/gui.hs Thank you, Etienne Laurin |