Archive file with this example: Example002.tar.gz. Be sure to read the file README.txt for further instructions.
The second example adds the code that is needed to terminate the program after the window was closed. It turns out that one additional event handler is needed.
import "gtk3" Graphics.UI.Gtk -- This function is to be called when the window is destroyed. -- The function has the responsibility to terminate the program -- in an orderly was. It does so in exiting the event loop. destroyEventHandler :: IO () destroyEventHandler = do mainQuit -- main program: create and display the window main :: IO () main = do initGUI window <- windowNew set window [windowDefaultWidth := 250, windowDefaultHeight := 280] on window objectDestroy destroyEventHandler widgetShow window mainGUI
To terminate the program after its window was closed, you have to do two things:
The event handler for the objectDestroy event is required to be a parameterless function with result type
IO ()
It should call the function mainQuit to leave the event-loop of Gtk.
The example program demonstrates an additional feature: The set function which is used to specify certain attributes of the window.
The function set takes two arguments:
An attribute assignment is written as
The statement shown in the example sets the attributes windowDefaultWidth and windowDefaultHeight. Both attributes together specify the initial size of the window.
There are other window attributes you may wish to set:
containerChild
The content of the window
windowTitle
The title shown in the title bar of the window
windowType
The type of the window. The most usual window type is WindowTopLevel. The type WindowPopup is used mainly for dialog windows.
windowResizable
...
windowModal
...
windowWindowPosition
This attribute specifies, how the window will be placed on the screen. Possible values of this attribute are:
WinPosNone
WinPosCenter
WinPosMouse
WinPosCenterAlways
WinPosCenterOnParent
windowDeletable
...
windowIcon
specifies the icon for the window
as well as others, less frequently used ones.
Hints for those who want to know more:
The function set is defined in module System.Glib.Attributes.
Most Gtk elements have some attributes. These attributes can be found in the documentation. Bear in mind that a class inherits all attributes of all its base classes.