From: Axel S. <si...@co...> - 2009-10-30 17:02:14
|
Mon Oct 26 11:53:28 EDT 2009 Axe...@en... * Fix the Gst hierarchy. The gstreamer modules used a different hierarchy for their objects which meant that they were not interchangeable with the GObject-rooted hierarchy. There still exists a MiniHierarchy for the light-weight objects of gstreamer but they are now created using the same utility in tools/hierarchyGen. hunk ./Makefile.am 35 - gstreamer/hierarchy.list \ hunk ./Makefile.am 36 - gstreamer/gobject-hierarchy.list \ - gstreamer/Media/Streaming/GStreamer/Hierarchy.chs.template \ - gstreamer/Media/Streaming/GStreamer/MiniHierarchy.chs.template \ hunk ./Makefile.am 466 - --parentname=System.Glib.GObject) + --import=*System.Glib.GObject) hunk ./Makefile.am 879 - --parentname=System.Glib.GObject) + --forward=*System.Glib.GObject) hunk ./Makefile.am 1023 - --parentname=Graphics.UI.Gtk.Types) + --import=*Graphics.UI.Gtk.Types) hunk ./Makefile.am 1289 - --modname=System.Gnome.GConf.Types --parentname=System.Glib.GObject) + --modname=System.Gnome.GConf.Types --import=*System.Glib.GObject) hunk ./Makefile.am 1435 - $@ --tag=sourceview --parentname=Graphics.UI.Gtk.Types \ + $@ --tag=sourceview --import=*Graphics.UI.Gtk.Types \ hunk ./Makefile.am 1576 - --parentname=Graphics.UI.Gtk.Types \ + --import=*Graphics.UI.Gtk.Types \ hunk ./Makefile.am 1708 - $@ --tag=mozembed --parentname=Graphics.UI.Gtk.Types \ + $@ --tag=mozembed --import=*Graphics.UI.Gtk.Types \ hunk ./Makefile.am 2095 - $@ --tag=gtkglext --parentname=Graphics.UI.Gtk.Types \ + $@ --tag=gtkglext --import=*Graphics.UI.Gtk.Types \ hunk ./Makefile.am 2354 - --modname=System.Gnome.VFS.Hierarchy --parentname=System.Glib.GObject) + --modname=System.Gnome.VFS.Hierarchy --import=*System.Glib.GObject) hunk ./Makefile.am 2498 + gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs \ hunk ./Makefile.am 2572 - --parentname=System.Glib.GObject) + --import=*System.Glib.GObject) hunk ./Makefile.am 2582 - --parentname=Media.Streaming.GStreamer.Core.MiniHierarchyBase \ - --modname=Media.Streaming.GStreamer.Core.MiniHierarchy) + --import=*Media.Streaming.GStreamer.Core.MiniHierarchyBase \ + --modname=Media.Streaming.GStreamer.Core.MiniHierarchy \ + --destructor=miniObjectUnref) hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 33 - module System.Glib.GObject, + miniObjectUnref, hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 40 - mkCastToMiniObject, - mkIsMiniObject, hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 44 -import System.Glib.GObject hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 49 -mkMiniObject = MiniObject +mkMiniObject = (MiniObject, miniObjectUnref) hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 52 + hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 69 -castToMiniObject = mkMiniObject . castForeignPtr . unMiniObject . toMiniObject +castToMiniObject = toMiniObject hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 71 --- The usage of foreignPtrToPtr should be safe as the evaluation will only be --- forced if the object is used afterwards +-- | Decrease the reference counter of an object hunk ./gstreamer/Media/Streaming/GStreamer/Core/MiniHierarchyBase.chs 73 -mkCastToMiniObject :: (MiniObjectClass obj, MiniObjectClass obj') - => GType - -> String - -> (obj -> obj') -mkCastToMiniObject gtype objTypeName obj = - case toMiniObject obj of - gobj@(MiniObject objFPtr) - | typeInstanceIsA ((unsafeForeignPtrToPtr.castForeignPtr) objFPtr) gtype - -> unsafeCastMiniObject gobj - | otherwise -> error $ "Cannot cast object to " ++ objTypeName - -mkIsMiniObject :: MiniObjectClass obj - => GType - -> obj - -> Bool -mkIsMiniObject gType obj = - unsafePerformIO $ - withForeignPtr (unMiniObject $ toMiniObject obj) $ \objPtr -> - return $ typeInstanceIsA (castPtr objPtr) gType +foreign import ccall unsafe "&gst_mini_object_unref" + miniObjectUnref :: FinalizerPtr a hunk ./tools/hierarchyGen/Hierarchy.chs.template 36 -@MODULE_EXPORTS@@FORWARD_EXPORTS@ +@MODULE_EXPORTS@ hunk ./tools/hierarchyGen/Hierarchy.chs.template 42 -@IMPORT_PARENT@ -@FORWARD_IMPORTS@ +@MODULE_IMPORTS@ hunk ./tools/hierarchyGen/TypeGen.hs 55 + pFL ps all@('G':'s':'t':rem)= pGetObject ps all rem hunk ./tools/hierarchyGen/TypeGen.hs 127 - let parentName = case map (drop 13) (filter ("--parentname=" `isPrefixOf`) rem) of - [] -> "" - (parentName:_) -> parentName + let extraNames = map (drop 9) (filter ("--import=" `isPrefixOf`) rem) hunk ./tools/hierarchyGen/TypeGen.hs 149 - + let showImport ('*':m ) = ss "{#import " .ss m .ss "#}" . indent 0 + showImport m = ss "import " . ss m . indent 0 hunk ./tools/hierarchyGen/TypeGen.hs 158 - "MODULE_EXPORTS" -> generateExports rootObject parentName forwardNames objs - "IMPORT_PARENT" -> if null parentName - then id - else ss "{#import " .ss parentName .ss "#}" - "FORWARD_IMPORTS"-> - foldl (.) id [ ss "import " . ss m . indent 0 | m <- forwardNames ] + "MODULE_EXPORTS" -> generateExports rootObject (map (dropWhile ((==) '*')) forwardNames) objs + "MODULE_IMPORTS" -> foldl (.) id (map showImport (extraNames++forwardNames)) hunk ./tools/hierarchyGen/TypeGen.hs 171 - \ {--lib=<lib>} {--prefix=<prefix>}\n\ - \ {--modname=<modName>} {--parentname=<parentName>}\n\ - \ {--forward=<fwdName>} {--destructor=<destrName>}\n\ + \ [--lib=<lib>] [--prefix=<prefix>]\n\ + \ [--modname=<modName>] {--import=<*><importName>}\n\ + \ {--forward=<*><fwdName>} [--destructor=<destrName>]\n\ hunk ./tools/hierarchyGen/TypeGen.hs 187 - \ <parentName> specify the name of the module that defines any\n\ - \ parent classes eg Hierarchy (default is none)\n\ + \ <importName> additionally import this module without\n\ + \ re-exporting it\n\ hunk ./tools/hierarchyGen/TypeGen.hs 190 + \ <*> use an asterix as prefix if the import should\n\ + \ be a .chs import statement\n\ hunk ./tools/hierarchyGen/TypeGen.hs 203 -generateExports :: String -> String -> [String] -> [[String]] -> ShowS -generateExports rootObject parent forwardNames objs = - (if null parent - then ss "" - else ss " module " .ss parent. ss ","). +generateExports :: String -> [String] -> [[String]] -> ShowS +generateExports rootObject forwardNames objs = |