Save the opened window in the state.
authorMatthijs Kooijman <matthijs@stdin.nl>
Mon, 24 Aug 2009 17:51:16 +0000 (19:51 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Mon, 24 Aug 2009 17:51:16 +0000 (19:51 +0200)
FPPrac.hs

index cfbf0008654ad762246d6af423a85b102bd49130..47b3cad30e0c80c06efa2445adeebc50b9ab7e62 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -98,10 +98,8 @@ testProg = Main
        }
 
 data IState = forall s. IS
-       { {-sFrame    :: Frame    ()
-       , sPanel    :: Panel    ()
-       , buffer    :: MemoryDC ()
-       , -}postponed :: IORef [Request]
+       { window    :: Gtk.Window
+       , postponed :: IORef [Request]
        , usrState  :: IORef s
        , usrProg   :: TinaStep s
        }
@@ -134,7 +132,7 @@ runTina :: TinaProgram -> IO ()
 runTina Main {..} = do
        usrState  <- newIORef initialState
        postponed <- newIORef (GfxText (rgb 0 0 0) (pt 50 50) "foo" : GfxClear :initialRequests)
-       let state = IS { usrProg = eventHandler, .. }
+       let state = IS { window = undefined, usrProg = eventHandler, .. }
        runGUI windowWidth windowHeight state
 
 runGUI :: Int -> Int -> IState -> IO ()
@@ -145,12 +143,16 @@ runGUI w h s = do
        -- Create a window, which will make the mainloop terminated when
        -- it is closed.
        window <- Gtk.windowNew
+               
        Gtk.set window [ Gtk.containerBorderWidth := 10
                       , Gtk.windowTitle := "FP Practicum" 
                       , Gtk.windowDefaultWidth := w
                       , Gtk.windowDefaultHeight := h
                       ]
        Gtk.onDestroy window Gtk.mainQuit
+
+       -- Add the window to the state
+       let state = s { window = window }
        
        -- Show the window and start the Gtk mainloop.
        Gtk.widgetShowAll window