diff --git a/gst-plugin/src/base_sink.rs b/gst-plugin/src/base_sink.rs index 675ff380..3f64d1f2 100644 --- a/gst-plugin/src/base_sink.rs +++ b/gst-plugin/src/base_sink.rs @@ -75,7 +75,7 @@ pub unsafe trait BaseSinkClass where T::ImplType: BaseSinkImpl, { - fn override_vfuncs(&mut self) { + fn override_vfuncs(&mut self, _: &ClassInitToken) { unsafe { let klass = &mut *(self as *const Self as *mut gst_base_ffi::GstBaseSinkClass); klass.start = Some(base_sink_start::); @@ -149,9 +149,9 @@ impl ObjectType for RsBaseSink { unsafe { from_glib(gst_base_ffi::gst_base_sink_get_type()) } } - fn class_init(klass: &mut RsBaseSinkClass) { - ElementClass::override_vfuncs(klass); - BaseSinkClass::override_vfuncs(klass); + fn class_init(token: &ClassInitToken, klass: &mut RsBaseSinkClass) { + ElementClass::override_vfuncs(klass, token); + BaseSinkClass::override_vfuncs(klass, token); } object_type_fns!(); diff --git a/gst-plugin/src/base_src.rs b/gst-plugin/src/base_src.rs index 6f24f532..258f36ba 100644 --- a/gst-plugin/src/base_src.rs +++ b/gst-plugin/src/base_src.rs @@ -103,7 +103,7 @@ pub unsafe trait BaseSrcClass where T::ImplType: BaseSrcImpl, { - fn override_vfuncs(&mut self) { + fn override_vfuncs(&mut self, _: &ClassInitToken) { unsafe { let klass = &mut *(self as *const Self as *mut gst_base_ffi::GstBaseSrcClass); klass.start = Some(base_src_start::); @@ -201,9 +201,9 @@ impl ObjectType for RsBaseSrc { unsafe { from_glib(gst_base_ffi::gst_base_src_get_type()) } } - fn class_init(klass: &mut RsBaseSrcClass) { - ElementClass::override_vfuncs(klass); - BaseSrcClass::override_vfuncs(klass); + fn class_init(token: &ClassInitToken, klass: &mut RsBaseSrcClass) { + ElementClass::override_vfuncs(klass, token); + BaseSrcClass::override_vfuncs(klass, token); } object_type_fns!(); diff --git a/gst-plugin/src/element.rs b/gst-plugin/src/element.rs index cedc5017..7cd71790 100644 --- a/gst-plugin/src/element.rs +++ b/gst-plugin/src/element.rs @@ -76,7 +76,7 @@ where } } - fn override_vfuncs(&mut self) { + fn override_vfuncs(&mut self, _: &ClassInitToken) { unsafe { let klass = &mut *(self as *const Self as *mut gst_ffi::GstElementClass); klass.change_state = Some(element_change_state::); @@ -129,8 +129,8 @@ impl ObjectType for RsElement { unsafe { from_glib(gst_ffi::gst_element_get_type()) } } - fn class_init(klass: &mut RsElementClass) { - klass.override_vfuncs(); + fn class_init(token: &ClassInitToken, klass: &mut RsElementClass) { + klass.override_vfuncs(token); } object_type_fns!(); diff --git a/gst-plugin/src/object.rs b/gst-plugin/src/object.rs index 2ba14448..cb49f4c0 100644 --- a/gst-plugin/src/object.rs +++ b/gst-plugin/src/object.rs @@ -56,12 +56,11 @@ macro_rules! box_object_impl( pub trait ImplTypeStatic: Send + Sync + 'static { fn get_name(&self) -> &str; fn new(&self, &T) -> T::ImplType; - // FIXME: Needs token, needs to become override_vfuncs() - // override_vfuncs() functions need to take token fn class_init(&self, &mut ClassStruct); fn type_init(&self, _: &TypeInitToken, _type_: glib::Type) {} } +pub struct ClassInitToken(()); pub struct TypeInitToken(()); pub trait ObjectType: FromGlibPtrBorrow<*mut InstanceStruct> + 'static @@ -75,7 +74,7 @@ where fn glib_type() -> glib::Type; - fn class_init(klass: &mut ClassStruct); + fn class_init(token: &ClassInitToken, klass: &mut ClassStruct); fn set_property(_obj: &Self, _id: u32, _value: &glib::Value) { unimplemented!() @@ -381,7 +380,7 @@ unsafe extern "C" fn class_init( klass.parent_class = gobject_ffi::g_type_class_peek_parent( klass as *mut _ as glib_ffi::gpointer, ) as *const T::GlibClassType; - T::class_init(klass); + T::class_init(&ClassInitToken(()), klass); } }