On Wed, Nov 15, 2006 at 23:10:44 +0100, Eric Y. Kow wrote:
> I've attached your example as a small .lhs file and makefile.  For
> Debian Linux, uncomment the -lwx_gtk2u_gl-2.6 line or otherwise,
> modify to taste.

Here are the files, really attached this time.

-- 
Eric Kow                     http://www.loria.fr/~kow
PGP Key ID: 08AC04F9         Merci de corriger mon français.
Dear all,

The following code doesn't seem to work properly. Either the main entry
(m1/mp1) or it's sub menu entry (ms1/mps1) do not seem to propagate the
event when pressed. It is possible to make it working by uncomments the
lines where the menu commands are registered in the frame.

I have the following two questions:
1. Why doesn't the plain code work. Am I missing something or doing
something wrong?
2. Doesn't registering eventhandlers in the frame introduce a
memory/resource leak, especially in the case of popups?

Any suggestions or comments appreciated. Thanks.
Kind regards,

Maarten

> module Main where

> import Graphics.UI.WX

> main :: IO ()
> main = start gui

> gui :: IO ()
> gui = do
>   f <- frame [ text := "Hello world!" ]
>
>   m   <- menuPane [ text := "&Menu" ]
>   m1 <- menuItem m [ text := "Menu m1"
>                    , on command := putStrLn "menu m1"]
> --  set f [ on (menu m1) := putStrLn "menu m1" ]
>   menuLine m
>   sub <- menuPane [text := "Sub menu"]
>   ms1 <- menuItem sub [ text := "submenu ms1"
>                       , on command := putStrLn "submenu ms1" ]
> --  set f [ on (menu ms1) := putStrLn "submenu ms1" ]
>   menuSub m sub [ text := "Sub" ]
>   menuItem m [text := "E&xit", on command := close f]
>
>   set f [menuBar := [m], on mouse := mouseEvent f, clientSize := sz 200 200 ]
>   return ()
>
> mouseEvent f eventMouse = do
>   case eventMouse of
>     MouseRightDown mousePoint _ -> doPopup f mousePoint
>     _ -> return ()
>
> doPopup f mousePoint = do
>   m <- makePopupMenu f "&Popup" "Doesnt' work..."
>   menuPopup m mousePoint f
>   objectDelete m
>
> makePopupMenu f c t = do
>   mp   <- menuPane [ text := c ]
>   mp1 <- menuItem mp [ text := "Popup mp1"
>                      , on command := putStrLn "popup mp1"]
> --  set f [ on (menu mp1) := putStrLn "popup mp1" ]
>   menuLine mp
>   sub <- menuPane [text := "more text"]
>   mps1 <- menuItem sub [ text := "Popup mps1"
>                        , on command := putStrLn "popup mps1"]
>   menuSub mp sub [ text := "Sub" ]
> --  set f [ on (menu mps1) := putStrLn "popup mps1" ]
>   return mp
COMPILE=ghc -package wx
#COMPILE+=-lwx_gtk2u_gl-2.6

ifeq ($(shell uname),Darwin)
PREP=macosx-app
else
PREP=\#
endif

APPS= MenuProblems\

.PHONY: clean

all: $(APPS)

%: %.lhs
        $(COMPILE) -o $@ $<
        $(PREP) $@

clean:
        rm -rf $(APPS) *.o *.hi *.app

Attachment: pgpEw1kdUHxM2.pgp
Description: PGP signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to