Hi Andy,
I think your peekGdkPoint function and the mkIconInfo functions are
fine. Could you search for 'array' in the docs and replace it with
'list'? Also all file paths should be of type FilePath, not String.
On May 6, 2010, at 17:15, Andy Stewart wrote:
> +iconInfoGetAttachPoints :: IconInfo -> IO (Maybe ([Point], Int))
> +iconInfoGetAttachPoints self =
> + allocaArray 0 $ \pointPtr ->
This is not right. You're passing an array of size 0. What you want to
pass in is a pointer into which the function can write a pointer to a
heap-allocated array. I.e.
alloca $ \arrPtrPtr -> do
> + alloca $ \nPointsPtr -> do
> + success <- liftM toBool $
> + {# call gtk_icon_info_get_attach_points #}
> + self
arrPtrPtr
> + (castPtr pointPtr)
> + nPointsPtr
> + if success
> + then do
arrPtr <- peek arrPtrPtr
nPoints <- peek nPointsPtr
pointList <- peekArray nPoints arrPtr
return (Just pointList)
> + pointListPtrs <- peekArray 0 pointPtr
> + pointList <- mapM peekPoint pointListPtrs
> + {#call unsafe g_free#} (castPtr pointPtr)
> + nPoints <- peek nPointsPtr
> + return (Just (pointList, (fromIntegral nPoints)))
> + else return Nothing
You would need to create an instance of Storable for Point for this
code to work.
Cheers,
Axel
------------------------------------------------------------------------------
_______________________________________________
Gtk2hs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel