You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
fix reference counting for GtkWidgets created from java
GtkWidgets extend GInitiallyUnowned and are automatically freed when removing from parent widget. We need to add an extra reference, to make sure the object keeps alive as long as the java widget has a reference to it
This commit is contained in:
@@ -56,7 +56,7 @@ extern int FIXME__HEIGHT;
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_android_opengl_GLSurfaceView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
||||
{
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
gtk_widget_set_vexpand(wrapper, TRUE);
|
||||
GtkWidget *gl_area = gtk_gl_area_new();
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), gl_area);
|
||||
|
||||
@@ -85,7 +85,7 @@ static void on_resize(GtkWidget* self, gint width, gint height, struct jni_callb
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_android_view_SurfaceView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
||||
{
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *dummy = surface_view_widget_new();
|
||||
gtk_widget_set_name(dummy, "dummy widget for SurfaceView");
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), dummy);
|
||||
|
||||
@@ -77,7 +77,7 @@ void frame_layout_widget_insert_child_at_index(FrameLayoutWidget *parent, GtkWid
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_android_widget_FrameLayout_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
||||
{
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *frame_layout = frame_layout_widget_new();
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), frame_layout);
|
||||
gtk_widget_set_name(GTK_WIDGET(frame_layout), "FrameLayout");
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
JNIEXPORT jlong JNICALL Java_android_widget_ImageView_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
|
||||
{
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *image = gtk_picture_new_for_resource("/org/gtk/libgtk/icons/16x16/status/image-missing.png"); // show "broken image" icon
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), image);
|
||||
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
|
||||
|
||||
@@ -14,7 +14,7 @@ JNIEXPORT jlong JNICALL Java_android_widget_LinearLayout_native_1constructor(JNI
|
||||
{
|
||||
int orientation = attribute_set_get_int(env, attrs, "orientation", NULL, 1);
|
||||
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *box = gtk_box_new(orientation ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL, 1); // spacing of 1
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box);
|
||||
gtk_widget_set_name(GTK_WIDGET(box), "LinearLayout");
|
||||
|
||||
@@ -14,7 +14,7 @@ JNIEXPORT jlong JNICALL Java_android_widget_RelativeLayout_native_1constructor(J
|
||||
{
|
||||
int orientation = attribute_set_get_int(env, attrs, "orientation", NULL, 1);
|
||||
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *box = gtk_box_new(orientation ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL, 1); // spacing of 1
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box);
|
||||
gtk_widget_set_name(GTK_WIDGET(box), "RelativeLayout");
|
||||
|
||||
@@ -14,7 +14,7 @@ JNIEXPORT jlong JNICALL Java_android_widget_ScrollView_native_1constructor(JNIEn
|
||||
{
|
||||
int orientation = attribute_set_get_int(env, attrs, "orientation", NULL, 0);
|
||||
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *box = gtk_box_new(orientation ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL, 1); // spacing of 1
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box);
|
||||
gtk_widget_set_name(GTK_WIDGET(box), "ScrollView");
|
||||
|
||||
@@ -13,7 +13,7 @@ JNIEXPORT jlong JNICALL Java_android_widget_TextView_native_1constructor(JNIEnv
|
||||
|
||||
// _SET_OBJ_FIELD(this, "text", "Ljava/lang/String;", _JSTRING(text)); //TODO: sadly this might be needed, but it's not atm
|
||||
|
||||
GtkWidget *wrapper = wrapper_widget_new();
|
||||
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
|
||||
GtkWidget *label = gtk_label_new(text);
|
||||
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), label);
|
||||
return _INTPTR(label);
|
||||
|
||||
Reference in New Issue
Block a user