On Fri, 2008-12-12 at 21:03 +0100, Cetin Sert wrote:
> Hi all,
> 
> For a network manager of sorts I'm working on, I want to derive a
> SettingsWindowClass from the WindowClass present in Gtk2Hs:
> 
> I want (the) instance(s) of the SettingsWindowClass to have a field to
> store connection settings:
> 
> 1) Is it safe to do it like this?

You've missed out the unsafe bit where you make SettingsWindow an
instance of class WindowClass. That bit will not work because the upcast
function is not a proper Haskell function just is just a pointer cast.
Currently the assumption is that each gtk2hs type is backed by a C type
held in a ForeignPtr. We should generalise that to allow subclasses
defined in Haskell.

> class WindowClass self ⇒ SettingsWindowClass self where
>   settingsWindowGetSettings :: self → IO [ConnectionSetting]
>   settingsWindowSetSettings :: self → [ConnectionSetting] → IO ()
> 
> newtype SettingsWindow = SettingsWindow (Window,[ConnectionSetting])

So you can use this newtype, you just can't make it an instance of
WindowClass.

> mkSettingsWindow = SettingsWindow
> unSettingsWindow (SettingsWindow o) = o
> 
> settingsWindowNew :: IO SettingsWindow
> settingsWindowNew = do
>   win ← windowNew
>   return $ mkSettingsWindow (win,[])
> 
> 2) Is this a common practice in gtk2hs usage?

Making records of widgets is pretty common.

> 3) And will GC properly free the memory allocated for the Window
> object? How is this ensured, do ForeignPtr's always call delete on the
> underlying C ptr when they get garbage collected?

Right, exactly.

Duncan


------------------------------------------------------------------------------
SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada.
The future of the web can't happen without you.  Join us at MIX09 to help
pave the way to the Next Web now. Learn more and register at
http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to