{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) Represents a generic object in a repository. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Ggit.Objects.Object ( -- * Exported types Object(..) , IsObject , toObject , noObject , -- * Methods -- ** getId #method:getId# #if ENABLE_OVERLOADING ObjectGetIdMethodInfo , #endif objectGetId , -- ** getOwner #method:getOwner# #if ENABLE_OVERLOADING ObjectGetOwnerMethodInfo , #endif objectGetOwner , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.GObject.Objects.Object as GObject.Object import {-# SOURCE #-} qualified GI.Ggit.Objects.Native as Ggit.Native import {-# SOURCE #-} qualified GI.Ggit.Objects.ObjectFactoryBase as Ggit.ObjectFactoryBase import {-# SOURCE #-} qualified GI.Ggit.Objects.Repository as Ggit.Repository import {-# SOURCE #-} qualified GI.Ggit.Structs.OId as Ggit.OId -- | Memory-managed wrapper type. newtype Object = Object (ManagedPtr Object) foreign import ccall "ggit_object_get_type" c_ggit_object_get_type :: IO GType instance GObject Object where gobjectType = c_ggit_object_get_type -- | Type class for types which can be safely cast to `Object`, for instance with `toObject`. class (GObject o, O.IsDescendantOf Object o) => IsObject o instance (GObject o, O.IsDescendantOf Object o) => IsObject o instance O.HasParentTypes Object type instance O.ParentTypes Object = '[Ggit.Native.Native, Ggit.ObjectFactoryBase.ObjectFactoryBase, GObject.Object.Object] -- | Cast to `Object`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`. toObject :: (MonadIO m, IsObject o) => o -> m Object toObject = liftIO . unsafeCastTo Object -- | A convenience alias for `Nothing` :: `Maybe` `Object`. noObject :: Maybe Object noObject = Nothing #if ENABLE_OVERLOADING type family ResolveObjectMethod (t :: Symbol) (o :: *) :: * where ResolveObjectMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo ResolveObjectMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo ResolveObjectMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo ResolveObjectMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo ResolveObjectMethod "getv" o = GObject.Object.ObjectGetvMethodInfo ResolveObjectMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo ResolveObjectMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo ResolveObjectMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo ResolveObjectMethod "ref" o = GObject.Object.ObjectRefMethodInfo ResolveObjectMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo ResolveObjectMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo ResolveObjectMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo ResolveObjectMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo ResolveObjectMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo ResolveObjectMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo ResolveObjectMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo ResolveObjectMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo ResolveObjectMethod "getId" o = ObjectGetIdMethodInfo ResolveObjectMethod "getOwner" o = ObjectGetOwnerMethodInfo ResolveObjectMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo ResolveObjectMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo ResolveObjectMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo ResolveObjectMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo ResolveObjectMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveObjectMethod t Object, O.MethodInfo info Object p) => OL.IsLabel t (Object -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif #if ENABLE_OVERLOADING instance O.HasAttributeList Object type instance O.AttributeList Object = ObjectAttributeList type ObjectAttributeList = ('[ '("native", Ggit.Native.NativeNativePropertyInfo)] :: [(Symbol, *)]) #endif #if ENABLE_OVERLOADING #endif #if ENABLE_OVERLOADING type instance O.SignalList Object = ObjectSignalList type ObjectSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)]) #endif -- method Object::get_id -- method type : OrdinaryMethod -- Args : [Arg {argCName = "object", argType = TInterface (Name {namespace = "Ggit", name = "Object"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitObject.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "OId"})) -- throws : False -- Skip return : False foreign import ccall "ggit_object_get_id" ggit_object_get_id :: Ptr Object -> -- object : TInterface (Name {namespace = "Ggit", name = "Object"}) IO (Ptr Ggit.OId.OId) {- | Gets the 'GI.Ggit.Structs.OId.OId' of /@object@/. -} objectGetId :: (B.CallStack.HasCallStack, MonadIO m, IsObject a) => a {- ^ /@object@/: a 'GI.Ggit.Objects.Object.Object'. -} -> m (Maybe Ggit.OId.OId) {- ^ __Returns:__ the 'GI.Ggit.Structs.OId.OId' of the object or 'Nothing'. -} objectGetId object = liftIO $ do object' <- unsafeManagedPtrCastPtr object result <- ggit_object_get_id object' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapBoxed Ggit.OId.OId) result' return result'' touchManagedPtr object return maybeResult #if ENABLE_OVERLOADING data ObjectGetIdMethodInfo instance (signature ~ (m (Maybe Ggit.OId.OId)), MonadIO m, IsObject a) => O.MethodInfo ObjectGetIdMethodInfo a signature where overloadedMethod _ = objectGetId #endif -- method Object::get_owner -- method type : OrdinaryMethod -- Args : [Arg {argCName = "object", argType = TInterface (Name {namespace = "Ggit", name = "Object"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GgitObject.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Ggit", name = "Repository"})) -- throws : False -- Skip return : False foreign import ccall "ggit_object_get_owner" ggit_object_get_owner :: Ptr Object -> -- object : TInterface (Name {namespace = "Ggit", name = "Object"}) IO (Ptr Ggit.Repository.Repository) {- | Gets the 'GI.Ggit.Objects.Repository.Repository' that owns /@object@/. -} objectGetOwner :: (B.CallStack.HasCallStack, MonadIO m, IsObject a) => a {- ^ /@object@/: a 'GI.Ggit.Objects.Object.Object'. -} -> m (Maybe Ggit.Repository.Repository) {- ^ __Returns:__ the 'GI.Ggit.Objects.Repository.Repository' that owns this object or 'Nothing'. The returned value must be free\'d calling 'GI.GObject.Objects.Object.objectUnref'. -} objectGetOwner object = liftIO $ do object' <- unsafeManagedPtrCastPtr object result <- ggit_object_get_owner object' maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (wrapObject Ggit.Repository.Repository) result' return result'' touchManagedPtr object return maybeResult #if ENABLE_OVERLOADING data ObjectGetOwnerMethodInfo instance (signature ~ (m (Maybe Ggit.Repository.Repository)), MonadIO m, IsObject a) => O.MethodInfo ObjectGetOwnerMethodInfo a signature where overloadedMethod _ = objectGetOwner #endif