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();
 }