Как получить 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, поэтому извиняюсь за пробелы в моем понимании.

0 ответов

Другие вопросы по тегам