Merge branch 'leaks' into 'master'
Allocation problems See merge request Librem5/squeekboard!327
This commit is contained in:
@ -116,6 +116,7 @@ settings_get_layout(GSettings *settings, char **type, char **layout)
|
||||
GVariant *inputs = g_settings_get_value(settings, "sources");
|
||||
// current layout is always first
|
||||
g_variant_get_child(inputs, 0, "(ss)", type, layout);
|
||||
g_variant_unref(inputs);
|
||||
}
|
||||
|
||||
void
|
||||
@ -139,9 +140,11 @@ eekboard_context_service_update_layout(EekboardContextService *context, enum squ
|
||||
switch (priv->purpose) {
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NUMBER:
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PHONE:
|
||||
g_free(keyboard_layout);
|
||||
keyboard_layout = g_strdup("number");
|
||||
break;
|
||||
case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL:
|
||||
g_free(keyboard_layout);
|
||||
keyboard_layout = g_strdup("terminal");
|
||||
break;
|
||||
default:
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user