mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-04-28 12:17:57 +03:00
native_window: fix using the embedded Wayland server when the system is X11
This commit is contained in:
parent
44d922baea
commit
09176cade8
2 changed files with 16 additions and 14 deletions
|
@ -123,13 +123,11 @@ void ANativeWindow_release(struct ANativeWindow *native_window)
|
|||
{
|
||||
native_window->refcount--;
|
||||
if(native_window->refcount == 0) {
|
||||
GdkDisplay *display = gtk_widget_get_display(native_window->surface_view_widget);
|
||||
|
||||
g_clear_signal_handler(&native_window->resize_handler, native_window->surface_view_widget);
|
||||
if (GDK_IS_WAYLAND_DISPLAY (display)) {
|
||||
if (native_window->wayland_display) {
|
||||
wl_egl_window_destroy((struct wl_egl_window *)native_window->egl_window);
|
||||
wl_surface_destroy(native_window->wayland_surface);
|
||||
} else if (GDK_IS_X11_DISPLAY (display)) {
|
||||
} else if (native_window->x11_display) {
|
||||
XDestroyWindow(native_window->x11_display, native_window->egl_window);
|
||||
}
|
||||
free(native_window);
|
||||
|
@ -247,14 +245,12 @@ void wl_registry_global_remove_handler(void *data, struct wl_registry *registry,
|
|||
printf("removed: %u\n", name);
|
||||
}
|
||||
|
||||
static void on_resize(GtkWidget* self, gint width, gint height, EGLNativeWindowType *egl_window)
|
||||
static void on_resize(GtkWidget* self, gint width, gint height, ANativeWindow *native_window)
|
||||
{
|
||||
GdkDisplay *display = gtk_widget_get_display(self);
|
||||
if (GDK_IS_WAYLAND_DISPLAY (display)) {
|
||||
wl_egl_window_resize((struct wl_egl_window *)egl_window, width, height, 0, 0);
|
||||
} else if (GDK_IS_X11_DISPLAY(display)) {
|
||||
Display *x11_display = gdk_x11_display_get_xdisplay(display);
|
||||
XResizeWindow(x11_display, (Window)egl_window, width, height);
|
||||
if (native_window->wayland_display) {
|
||||
wl_egl_window_resize((struct wl_egl_window *)native_window->egl_window, width, height, 0, 0);
|
||||
} else if (native_window->x11_display) {
|
||||
XResizeWindow(native_window->x11_display, (Window)native_window->egl_window, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -406,7 +402,7 @@ ANativeWindow * ANativeWindow_fromSurface(JNIEnv* env, jobject surface)
|
|||
native_window->egl_window = (EGLNativeWindowType)x11_window;
|
||||
}
|
||||
|
||||
native_window->resize_handler = g_signal_connect(surface_view_widget, "resize", G_CALLBACK(on_resize), (void *)native_window->egl_window);
|
||||
native_window->resize_handler = g_signal_connect(surface_view_widget, "resize", G_CALLBACK(on_resize), native_window);
|
||||
|
||||
return native_window;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <EGL/eglext.h>
|
||||
#include <gtk/gtk.h>
|
||||
#include <gdk/wayland/gdkwayland.h>
|
||||
#include <gdk/x11/gdkx.h>
|
||||
|
||||
#include "../api-impl-jni/defines.h"
|
||||
#include "../api-impl-jni/widgets/android_view_SurfaceView.h"
|
||||
|
@ -263,8 +264,13 @@ extern GtkWindow *window;
|
|||
struct wl_display *wayland_server_start()
|
||||
{
|
||||
GdkDisplay *gdk_display = gtk_root_get_display(GTK_ROOT(window));
|
||||
struct wl_display *wl_display_gtk = gdk_wayland_display_get_wl_display(gdk_display);
|
||||
egl_display_gtk = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR, wl_display_gtk, NULL);
|
||||
if (GDK_IS_WAYLAND_DISPLAY(gdk_display)) {
|
||||
struct wl_display *wl_display = gdk_wayland_display_get_wl_display(gdk_display);
|
||||
egl_display_gtk = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_KHR, wl_display, NULL);
|
||||
} else if (GDK_IS_X11_DISPLAY(gdk_display)) {
|
||||
Display *x11_display = gdk_x11_display_get_xdisplay(gdk_display);
|
||||
egl_display_gtk = eglGetPlatformDisplay(EGL_PLATFORM_X11_KHR, x11_display, NULL);
|
||||
}
|
||||
gl_context_gtk = gdk_surface_create_gl_context(gtk_native_get_surface(GTK_NATIVE(window)), NULL);
|
||||
|
||||
wl_display_server = wl_display_create();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue