2017-02-23 90 views
-1

不确定是否正确标记了字幕。但基本上我试图在gtk3中编写一个小程序,运行在xubuntu和xfce上,将gif设置为桌面背景。我可以使用gtk_window_set_keep_below()将窗口保持在所有其他窗口的下方。但桌面启动器/图标仍然在它下面。我也希望窗口的行为像墙纸,所以当我右键点击它,你会得到正常的桌面右键菜单。这些事情甚至可以使用gtk?我查看了api,但什么都没发现。有任何想法吗?GTK窗口作为桌面背景,如何降低堆叠顺序

到目前为止,除了我描述的两种行为之外,我拥有一切。 这里是我用来创建窗口的代码。

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); 
} 
+0

你为不相关语言添加标签的原因是什么? – Olaf

+0

不是。固定。 – Cey

+0

你不明白我的意见。要清楚:不要发送垃圾邮件标签! C和C++是不同的语言! – Olaf

回答

0

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

Xfce必须以相同的方式进行操作。因此,启动程序和桌面背景在同一个应用程序中,位于同一个小部件树中。我认为你不能在两者之间插入一些东西。因此,无论是使用现有的文件管理器更改墙纸,还是实施完全替代它的自己的视图(但是,除非重新实施,否则很可能会失去启动器功能,如果您没有经验,这可能需要很长时间) 。

如果你真的想大量自定义桌面视图,在最后的手段,你可能只是餐桌处理它的程序,并添加定制的存在。

+0

感谢您的信息。现在有道理,似乎更麻烦,那么它的价值。 – Cey