diff --git a/src/popover.rs b/src/popover.rs index 5f0f735f6460022857254b272ac5cfd02daf152a..ce1543baad330d098a257be5c821469b56cb6457 100644 --- a/src/popover.rs +++ b/src/popover.rs @@ -91,6 +91,11 @@ mod variants { unsafe { let ret = glib_sys::g_variant_builder_end(builder); glib_sys::g_variant_builder_unref(builder); + // HACK: This is to prevent C taking ownership + // of "floating" Variants, + // where Rust gets to keep a stale reference + // and crash when trying to drop it. + glib_sys::g_variant_ref_sink(ret); glib::Variant::from_glib_full(ret) } } @@ -141,7 +146,7 @@ fn set_layout(kind: String, name: String) { .chain(inputs).collect(); settings.set_value( "sources", - &variants::ArrayPairString(inputs).to_variant() + &variants::ArrayPairString(inputs).to_variant(), ); settings.apply(); }