jeremyletang / rgtk

GTK+ bindings and wrappers for Rust (DEPRECATED SEE https://github.com/rust-gnome )
GNU Lesser General Public License v3.0
121 stars 22 forks source link

Casting using `as` syntax is wrong(buggy) #120

Open osa1 opened 9 years ago

osa1 commented 9 years ago

I just found a bug in my app caused by casting GLib/GTK pointer types using as. GTK has macros/functions like G_OBJECT, GTK_WIDGET, GTK_BOX etc. for casting and we need to use those. (also see the warning messages printed to console, those indicates errors in the wrappers)

I think we need to change traits to something like this:

(not tested)

pub trait FFIWidget<Ctype> {
    fn get_widget(&self) -> *mut Ctype;
    fn wrap(widget: *mut Ctype) -> Self;
}

We also need to remove as syntax used in macros like impl_TraitWidget! and use proper casting instead. Unfortunately this means adding whole lot of wrappers(like the ones in gtk_glue.c) from every widget type to GObject etc. I'm wondering if there's a better way to do this without using as at all.

jeremyletang commented 9 years ago

I don't think we should change the trait FFIWidget. But I agree with you, we should not use as style cast, but call ::gtk::ffi::cast_GtkObject().