Как получить X Window, принадлежащий GtkDrawingArea в gtk4?
Я пытался перенести руководство по интеграции GUI для gstreamer(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c ) с gtk3 на gtk4. У меня проблема с получением окна X, принадлежащего GtkDrawingArea. В gtk3 для получения XID и передачи его в GstVideoOverlay используется следующий подход:
static void realize_cb (GtkWidget *widget, CustomData *data) {
GdkWindow *window = gtk_widget_get_window (widget);
guintptr window_handle;
if (!gdk_window_ensure_native (window))
g_error ("Couldn't create native window needed for GstVideoOverlay!");
/* Retrieve window handler from GDK */
window_handle = GDK_WINDOW_XID (window);
/* Pass it to playbin, which implements VideoOverlay and will forward it to the video sink */
gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (data->playbin), window_handle);
}
Я не могу понять, как сделать то же самое в Gtk4. Поскольку Gtk4 использует терминологию Wayland, функция в gdk для получения XID
GDK_SURFACE_XID()
который принимает GdkSurface * в качестве аргумента, и в GtkWidget нет прямой функции для получения указателя на GdkSurface, аналогичной
gtk_widget_get_window
в Gtk3.
Я пробовал получить GtkNative, используя
gtk_widget_get_native
GtkDrawingArea и присоединение к нему GdkSurface, но это возвращает поверхность GtkWindow.
Я ищу способ передать XID в
gst_video_overlay_set_window_handle
чтобы иметь возможность воспроизводить видео в виджете.
Я новичок как в Gtk, так и в Gstreamer, поэтому извиняюсь за пробелы в моем понимании.