This method performs a GetRawObject, but also increases the refcount.
This is (at least) needed in cases where you wish to have a class inherting a widget,
and use a builder in the constructor : base (builder.GetRawObject("name"))
Because no ref is taken the eventual freeing of the builder will cause the our object (this)
to have a refcount 0.
This is an issue since the freeing of our ToggleRef (which should happen later) performs an unref.
The API contract between GObject-Introspection and bindings is that
functions returning transfer-none floating references pass a reference
to the bindings that should be taken ownership of by sinking it. Not
doing so is wrong and will lead to memory leaks or double frees.
Previously we would not distinguish this case and simply increment the
reference count. In addition we would then sink the floating reference
when the Object.Raw field is set later for InitiallyUnowned subclasses.
Remove that last part and instead check directly in Object.Raw.set if we
get a floating reference and if so simply sink it here and take
ownership of it. The general assumption of Object.Raw.set is that it
gets passed a reference that it should take ownership of.
So in summary:
1) GetObject() would only increase the reference count of unowned,
non-floating references so that we own it. For unowned, floating
references it assumes ownership of the reference.
2) Raw.set assumes ownership of the reference passed to it and if it
happens to be a floating reference then it will first sink it.
Also warn if we get a floating, owned reference passed to GetObject() as
that case is not allowed by GObject-Introspection and would cause the
reference to be leaked.
This fixes a memory leak with functions returning unowned, floating
references and with functions returning owned, non-floating references
of InitiallyUnowned subclasses. And at the same time keeps constructors
for InitiallyUnowned subclasses working correctly without leaks.
See https://gitlab.freedesktop.org/gstreamer/gstreamer-sharp/issues/31
This is similar to the fix for FontFamily in #35, and adds metadata for the parent class.
Without this, I found that the conversion to GObject failed in GLib.Object.GetObject and the pointer was deleted, corrupting memory for the next call.
Fixes: #159
This needs to be explicitly specified since 3a67da38 relocated these methods into Gdk.Pixbuf, which is underneath an element that specified `library="Library.GdkPixbuf"`
This fixes runtime errors when calling this method (similar for gdk_pixbuf_get_from_window)
Changed NativeDialog to inherit from GLib.Object, as it does in the C API.
FileChooserNative seems to inherit multiple base classes in the C API,
which isn't possible in C#, but this solution is to mimic multiple
inheritance via a proxy FileChooserAdapter.
This exposes gdk_pixbuf_get_from_window and gdk_pixbuf_get_from_surface via Gdk.Pixbuf constructors. Previously they were in a hidden GdkPixbuf_ class.
Fixes: #174