From: Duncan C. <dun...@us...> - 2004-05-07 16:40:41
|
Update of /cvsroot/gtk2hs/gtk2hs/gtk/glib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9637/gtk/glib Modified Files: GObject.chs Added Files: GParameter.hsc Log Message: add GObject.objectNew, required for FileChooserDialog and re-enable building FileChooserDialog and the associated demo --- NEW FILE: GParameter.hsc --- -- -*-haskell-*- -- GIMP Toolkit (GTK) @entry GParameter@ -- -- Author : Duncan Coutts -- -- Created: 29 March 2004 -- -- Version $Revision: 1.1 $ from $Date: 2004/05/07 16:40:00 $ -- -- Copyright (c) 2004 Duncan Coutts -- -- This file is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This file is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- @description@ -------------------------------------------------------------- -- -- Storable instance for GParameter, used by objectNew -- module GParameter ( GParameter(..) ) where import FFI import GValue --import StoreValue #include <glib-object.h> --newtype GParameter = GParameter (String, GenericValue) newtype GParameter = GParameter (String, GValue) instance Storable GParameter where sizeOf _ = #const sizeof(GParameter) alignment _ = #{const __alignof__(GParameter)} poke ptr (GParameter (name, value)) = do strPtr <- newCString name #{poke GParameter, name} ptr strPtr -- poke (#{ptr GParameter, value} ptr) value #{poke GParameter, value} ptr value Index: GObject.chs =================================================================== RCS file: /cvsroot/gtk2hs/gtk2hs/gtk/glib/GObject.chs,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- GObject.chs 9 Jul 2003 22:42:44 -0000 1.6 +++ GObject.chs 7 May 2004 16:40:00 -0000 1.7 @@ -29,6 +29,7 @@ -- -- @todo@ --------------------------------------------------------------------- module GObject( + objectNew, objectRef, objectUnref, makeNewGObject, @@ -39,13 +40,29 @@ ) where +import Monad (liftM) import FFI -import LocalData(newIORef, readIORef, writeIORef) -import Hierarchy(GObjectClass, toGObject, unGObject) -{#import GValue#} +import LocalData (newIORef, readIORef, writeIORef) +import Hierarchy (GObjectClass, GObject(..), + mkGObject, toGObject, unGObject) +import GValue (GValue) +import GType (GType) +import GParameter {# context lib="glib" prefix="g" #} +{# pointer *GParameter as GParm -> GParameter #} + +-- construct a new object (should rairly be used directly) +-- +objectNew :: GType -> [(String, GValue)] -> IO (Ptr GObject) +objectNew objType parameters = + liftM castPtr $ --caller must makeNewGObject as we don't know + --if it this a GObject or a GtkObject + withArray (map GParameter parameters) $ \paramArrayPtr -> + {# call g_object_newv #} objType + (fromIntegral $ length parameters) paramArrayPtr + -- increase the reference counter of an object -- objectRef :: GObjectClass obj => Ptr obj -> IO () |