From: Duncan C. <dun...@us...> - 2005-02-27 19:42:15
|
Update of /cvsroot/gtk2hs/gtk2hs/tools/callbackGen In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32363/tools/callbackGen Modified Files: Signal.chs-boot2 HookGenerator.hs Log Message: GObject.chs.pp: change mkDestructor into mkFunPtrDestructor which is a tad more abstract (hiding the use of IORefs). General.chs: change use of mkDestructor to mkFunPtrDestructor and no longer export mkDestructor. EntryCompletion.chs.pp, TreeSelection.chs.pp, TreeView.chs.pp: change use of mkDestructor to mkFunPtrDestructor. Signal.chs-boot2: Following the same pattern for GClosureNotify as for GDestroyNotify above define a local copy of mkFunPtrDestructor for use in signal connection functions. HookGenerator.hs: change use of mkDestructor to mkFunPtrDestructor following the same pattern as before. This reduces code duplication a bit (saves about 350 lines of code). Index: HookGenerator.hs =================================================================== RCS file: /cvsroot/gtk2hs/gtk2hs/tools/callbackGen/HookGenerator.hs,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- HookGenerator.hs 20 Dec 2004 03:25:55 -0000 1.3 +++ HookGenerator.hs 27 Feb 2005 19:42:07 -0000 1.4 @@ -463,12 +463,7 @@ indent 4.ss "liftM ".mkMarshRet sig.ss " $". indent 5.ss "user".mkFuncArgs sig. indent 3.sc ')'. - indent 2.ss "dRef <- newIORef nullFunPtr". - indent 2.ss "dPtr <- mkDestructor $ do". - indent 3.ss "freeHaskellFunPtr hPtr". - indent 3.ss "dPtr <- readIORef dRef". - indent 3.ss "freeHaskellFunPtr dPtr". - indent 2.ss "writeIORef dRef dPtr". + indent 2.ss "dPtr <- mkFunPtrDestructor hPtr". indent 2.ss "sigId <- withCString signal $ \\nPtr ->". indent 3.ss "withForeignPtr ((unGObject.toGObject) obj) $ \\objPtr ->". indent 4.ss "{#call unsafe g_signal_connect_data#} (castPtr objPtr)". Index: Signal.chs-boot2 =================================================================== RCS file: /cvsroot/gtk2hs/gtk2hs/tools/callbackGen/Signal.chs-boot2,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- Signal.chs-boot2 8 Jan 2005 17:27:26 -0000 1.5 +++ Signal.chs-boot2 27 Feb 2005 19:42:07 -0000 1.6 @@ -9,7 +9,7 @@ import System.Glib.FFI import System.Glib.GError (failOnGError) -{#import System.Glib.GObject#} hiding (mkDestructor) +{#import System.Glib.GObject#} hiding (mkFunPtrDestructor) {#context lib="gtk" prefix="gtk" #} @@ -27,6 +27,16 @@ foreign import ccall "wrapper" mkDestructor :: IO () -> IO GClosureNotify +mkFunPtrDestructor :: FunPtr a -> IO GClosureNotify +mkFunPtrDestructor hPtr = do + dRef <- newIORef nullFunPtr + dPtr <- mkDestructor $ do + freeHaskellFunPtr hPtr + dPtr <- readIORef dRef + freeHaskellFunPtr dPtr + writeIORef dRef dPtr + return dPtr + disconnect :: GObjectClass obj => ConnectId obj -> IO () disconnect (ConnectID handler obj) = withForeignPtr ((unGObject.toGObject) obj) $ \objPtr -> |