GTK window 作为桌面背景,如何降低堆叠顺序

GTK window as desktop background, how to lower the stacking order

不确定标题的措辞是否正确。但基本上我正在尝试在 gtk3 中编写一个小的 c 程序,运行 在 xubuntu 和 xfce 上,将 gif 设置为桌面背景。我可以使用 gtk_window_set_keep_below() 将 window 保持在所有其他 windows 之下。但是桌面 launcher/icons 仍然低于它。我还希望 window 表现得像墙纸,所以当我右键单击它时,您会看到正常的桌面右键单击菜单。这些东西甚至可以使用 gtk 吗?我查看了 api 但一无所获。有什么想法吗?

到目前为止,除了我描述的两种行为外,我什么都知道了。 这是我用来创建 window.

的代码
static void activate (GtkApplication* app, gpointer user_data)
{
  GtkWidget *window;
  GtkWidget *layout;
  GtkWidget *image;

  window = gtk_application_window_new (app);
  layout = gtk_layout_new(NULL, NULL);
  image = gtk_image_new_from_file("/some/path/pic.gif");

  gtk_container_add(GTK_CONTAINER (window), layout);
  gtk_widget_show(layout);
  gtk_layout_put(GTK_LAYOUT(layout), image, 0, 0);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 500, 340);

  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_widget_set_app_paintable(window, TRUE);
  gtk_window_set_type_hint((GtkWindow*)window, (GdkWindowTypeHint)GDK_WINDOW_TYPE_HINT_DESKTOP);
  gtk_window_set_decorated((GtkWindow*)window, 0);
  gtk_window_set_keep_below((GtkWindow*)window, 1);
  gtk_window_set_accept_focus((GtkWindow*)window, 0);

  gtk_widget_show_all (window);
}

您不能只创建一个新的 window 并希望它能神奇地取代桌面。你说你已经有一个带有启动器的桌面,所以你不能只添加一些东西,你必须替换它。我知道的例子是 nautilus(又名 GNOME 文件)处理桌面。它是一个文件管理器,桌面只是一个特殊的目录最大化视图。

Xfce 也必须这样做。所以启动器和桌面背景在同一个应用程序中,在同一个小部件树中。我不认为你可以在两者之间添加一些东西。因此,您要么使用现有的文件管理器更改墙纸,要么实现自己的视图以完全取代它(但是除非您重新实现它们,否则您很可能会失去启动器功能,如果您没有经验,这可能需要很长时间) .

如果您真的想大量自定义该桌面视图,最后一招,您可能只需分叉处理它的程序并在其中添加您的自定义项。