2022-10-02 23:06:56 +02:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
|
|
|
|
|
|
#include "defines.h"
|
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
|
|
#include "generated_headers/android_view_Window.h"
|
|
|
|
|
|
|
|
|
|
JNIEXPORT void JNICALL Java_android_view_Window_set_1widget_1as_1root(JNIEnv *env, jobject this, jlong window, jlong widget)
|
|
|
|
|
{
|
2023-10-28 09:21:04 +02:00
|
|
|
GtkWindow *gtk_window = GTK_WINDOW(_PTR(window));
|
|
|
|
|
GtkWidget *gtk_widget = gtk_widget_get_parent(GTK_WIDGET(_PTR(widget)));
|
|
|
|
|
if (gtk_widget != gtk_window_get_child(gtk_window)) {
|
|
|
|
|
gtk_window_set_child(gtk_window, gtk_widget);
|
|
|
|
|
}
|
2022-10-02 23:06:56 +02:00
|
|
|
}
|
2022-11-11 19:18:21 +01:00
|
|
|
|
2022-11-24 18:44:50 +01:00
|
|
|
// FIXME put this in a header file
|
|
|
|
|
struct input_queue {
|
|
|
|
|
int fd;
|
|
|
|
|
GtkEventController *controller;
|
|
|
|
|
};
|
|
|
|
|
|
2022-11-11 19:18:21 +01:00
|
|
|
JNIEXPORT void JNICALL Java_android_view_Window_take_1input_1queue(JNIEnv *env, jobject this, jlong native_window, jobject callback, jobject queue)
|
|
|
|
|
{
|
|
|
|
|
GtkWidget *window = _PTR(native_window);
|
|
|
|
|
printf("in Java_android_view_Window_take_1input_1queue\n");
|
|
|
|
|
|
|
|
|
|
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_event_controller_legacy_new());
|
|
|
|
|
gtk_widget_add_controller(window, controller);
|
|
|
|
|
|
2022-11-24 18:44:50 +01:00
|
|
|
struct input_queue *input_queue = malloc(sizeof(struct input_queue));
|
|
|
|
|
input_queue->fd = -1;
|
|
|
|
|
input_queue->controller = controller;
|
|
|
|
|
|
|
|
|
|
_SET_LONG_FIELD(queue, "native_ptr", _INTPTR(input_queue));
|
2022-11-11 19:18:21 +01:00
|
|
|
|
|
|
|
|
// we need to keep these for later, so they can be called after OnCreate finishes
|
|
|
|
|
g_object_set_data(G_OBJECT(window), "input_queue_callback", (gpointer)_REF(callback));
|
|
|
|
|
g_object_set_data(G_OBJECT(window), "input_queue", (gpointer)_REF(queue));
|
|
|
|
|
}
|