Sun Jul 13 05:35:09 EDT 2008 ha...@fi...
* Add `isA` function to GObjectClass and gType* functions for each type
You can use this function to test the type of an object. For instance..
when (obj `isA` gTypeNotebook)
doSomething $ castToNotebook obj
hunk ./glib/System/Glib/GObject.chs.pp 44
+ -- ** GType queries
+ isA,
+
hunk ./glib/System/Glib/GObject.chs.pp 71
-import System.Glib.GType (GType)
+import System.Glib.GType (GType, typeInstanceIsA)
hunk ./glib/System/Glib/GObject.chs.pp 237
+-- | Determine if this is an instance of a particular GTK type
+--
+isA :: GObjectClass o => o -> GType -> Bool
+isA obj gType = [_$_]
+ typeInstanceIsA ((unsafeForeignPtrToPtr.castForeignPtr.unGObject.toGObject) obj) gType
+
+
hunk ./tools/hierarchyGen/TypeGen.hs 190
- indent 1.ss "castTo".ss n
+ indent 1.ss "castTo".ss n.ss ", gType".ss n
hunk ./tools/hierarchyGen/TypeGen.hs 198
- . makeUpcast typeTable obj
+ . makeUpcast obj
+ . makeGType typeTable obj
hunk ./tools/hierarchyGen/TypeGen.hs 202
-makeUpcast :: TypeTable -> [String] -> ShowS
-makeUpcast table [obj] = id -- no casting for GObject
-makeUpcast table (obj:_:_) = [_$_]
+makeUpcast :: [String] -> ShowS
+makeUpcast [obj] = id -- no casting for GObject
+makeUpcast (obj:_:_) = [_$_]
hunk ./tools/hierarchyGen/TypeGen.hs 206
- indent 0.ss "castTo".ss obj.ss " = castTo".
+ indent 0.ss "castTo".ss obj.ss " = castTo gType".ss obj.ss " \"".ss obj.ss "\"".
+ indent 0
+
+makeGType :: TypeTable -> [String] -> ShowS
+makeGType table [obj] = id -- no GType for GObject
+makeGType table (obj:_:_) = [_$_]
+ indent 0.ss "gType".ss obj.ss " :: GType".
+ indent 0.ss "gType".ss obj.ss " =".
hunk ./tools/hierarchyGen/TypeGen.hs 218
- ss " #} \"".ss obj.ss "\"".
+ ss " #}".
|