如何在gtk4中获得属于GtkDrawingArea的X Window?

问题描述

我试图将 gstreamer(https://gstreamer.freedesktop.org/documentation/tutorials/basic/toolkit-integration.html?gi-language=c) 的 GUI 集成教程从 gtk3 移植到 gtk4。我遇到了获取属于 GtkDrawingArea 的 X 窗口的问题。在 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 中没有直接函数获取类似于 gtk_widget_get_window 的指向 GdkSurface 的指针在 Gtk3 中。

我尝试使用 GtkDrawingArea 的 gtk_widget_get_native 获取 GtkNative 并将 GdkSurface 附加到它,但这会返回 GtkWindow 的表面。

我正在寻找一种方法让 XID 传递给 gst_video_overlay_set_window_handle 以便能够在小部件中播放视频。

我对 Gtk 和 Gstreamer 都很陌生,因此对于我的理解上的差距,我深表歉意。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)