From: Andrew U. F. <fr...@ge...> - 2009-06-11 07:45:09
|
i encounter a problem possibly related to a problem reported earlier by Mads in 2007 (segmentation fault): when i change the list box items within the event handler, the event handler is called immediately (i.e. inside itself, recursively). it seems that the event is still active in the queue at this moment; i think it should be cleared upon entry (not on exit) of the event handler. any comments? what is the best work-around? andrew the following program demonstrates the error: module Main where -- OnCommandTest where {- test for on command jumping too often -} import Graphics.UI.WX main = start $ do w <- frame [text := "test on command event processing"] f <- panel w [] listVar <- varCreate (["aa"]:: [String]) doButton <- button f [text := "do"] quitButton <- button f [text := "Quit", on command := close w] aEn <- textEntry f [text := "aEn"] bEn <- singleListBox f [items := ["123456789012345678901234567890"] ] set aEn [on enterKey := dox bEn listVar] set bEn [on select ::= dox2 bEn] set doButton [on command := dox bEn listVar] let lay = fill $ column 5 [ row 5 [label "buttons" , widget doButton , widget quitButton ] , row 5 [label "text entry", hfill $ widget aEn] , hfill $ widget bEn ] set w [ layout := minsize (sz 300 300) $ container f lay ] return () dox bEn listVar = do putStrLn "dox start" l <- varGet listVar let l2 = l ++ ["bb"] set bEn [items := l2] varSet listVar l2 repaint bEn putStrLn "dox end" dox2 bEn w = do putStrLn "dox2 start" i <- get w selection set bEn [items := ["xx"]] putStrLn $ "selection " ++ show i putStrLn "dox2 end" |