Update of /cvsroot/gtk2hs/gtk2hs/gtk/Graphics/UI/Gtk/General
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32363/gtk/Graphics/UI/Gtk/General
Modified Files:
General.chs
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: General.chs
===================================================================
RCS file: /cvsroot/gtk2hs/gtk2hs/gtk/Graphics/UI/Gtk/General/General.chs,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- General.chs 12 Feb 2005 17:19:22 -0000 1.3
+++ General.chs 27 Feb 2005 19:42:06 -0000 1.4
@@ -40,8 +40,6 @@
grabAdd,
grabGetCurrent,
grabRemove,
- mkDestructor,
- DestroyNotify,
priorityLow,
priorityDefault,
priorityHigh,
@@ -59,6 +57,7 @@
import System.Glib.FFI
import System.Glib.UTFString
+import System.Glib.GObject (DestroyNotify, mkFunPtrDestructor)
import Graphics.UI.Gtk.Abstract.Object (makeNewObject)
{#import Graphics.UI.Gtk.Types#}
{#import Graphics.UI.Gtk.Signals#}
@@ -183,12 +182,8 @@
{#pointer GSourceFunc as Function#}
-{#pointer GDestroyNotify as DestroyNotify#}
-
foreign import ccall "wrapper" mkHandler :: IO {#type gint#} -> IO Function
-foreign import ccall "wrapper" mkDestructor :: IO () -> IO DestroyNotify
-
type HandlerId = {#type guint#}
-- Turn a function into a function pointer and a destructor pointer.
@@ -196,12 +191,7 @@
makeCallback :: IO {#type gint#} -> IO (Function, DestroyNotify)
makeCallback fun = do
funPtr <- mkHandler fun
- dRef <- newIORef nullFunPtr
- dPtr <- mkDestructor $ do
- freeHaskellFunPtr funPtr
- dPtr <- readIORef dRef
- freeHaskellFunPtr dPtr
- writeIORef dRef dPtr
+ dPtr <- mkFunPtrDestructor funPtr
return (funPtr, dPtr)
-- | Register a function that is to be called after
|