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");
 | 
					    GVariant *inputs = g_settings_get_value(settings, "sources");
 | 
				
			||||||
    // current layout is always first
 | 
					    // current layout is always first
 | 
				
			||||||
    g_variant_get_child(inputs, 0, "(ss)", type, layout);
 | 
					    g_variant_get_child(inputs, 0, "(ss)", type, layout);
 | 
				
			||||||
 | 
					    g_variant_unref(inputs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@ -139,9 +140,11 @@ eekboard_context_service_update_layout(EekboardContextService *context, enum squ
 | 
				
			|||||||
    switch (priv->purpose) {
 | 
					    switch (priv->purpose) {
 | 
				
			||||||
    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NUMBER:
 | 
					    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_NUMBER:
 | 
				
			||||||
    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PHONE:
 | 
					    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_PHONE:
 | 
				
			||||||
 | 
					        g_free(keyboard_layout);
 | 
				
			||||||
        keyboard_layout = g_strdup("number");
 | 
					        keyboard_layout = g_strdup("number");
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL:
 | 
					    case ZWP_TEXT_INPUT_V3_CONTENT_PURPOSE_TERMINAL:
 | 
				
			||||||
 | 
					        g_free(keyboard_layout);
 | 
				
			||||||
        keyboard_layout = g_strdup("terminal");
 | 
					        keyboard_layout = g_strdup("terminal");
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
 | 
				
			|||||||
@ -91,6 +91,11 @@ mod variants {
 | 
				
			|||||||
            unsafe {
 | 
					            unsafe {
 | 
				
			||||||
                let ret = glib_sys::g_variant_builder_end(builder);
 | 
					                let ret = glib_sys::g_variant_builder_end(builder);
 | 
				
			||||||
                glib_sys::g_variant_builder_unref(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)
 | 
					                glib::Variant::from_glib_full(ret)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -141,7 +146,7 @@ fn set_layout(kind: String, name: String) {
 | 
				
			|||||||
        .chain(inputs).collect();
 | 
					        .chain(inputs).collect();
 | 
				
			||||||
    settings.set_value(
 | 
					    settings.set_value(
 | 
				
			||||||
        "sources",
 | 
					        "sources",
 | 
				
			||||||
        &variants::ArrayPairString(inputs).to_variant()
 | 
					        &variants::ArrayPairString(inputs).to_variant(),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    settings.apply();
 | 
					    settings.apply();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user