gpt4 book ai didi

gtk - 如何在 GTK+ 中保持 transient 窗口位于顶部

转载 作者:行者123 更新时间:2023-12-04 23:27:31 24 4
gpt4 key购买 nike

我正在将一个大型(100 多个文件)8 岁的 GTK+ 应用程序从 Red Hat 2.4 移植到 Ubuntu Lucid。它是工业控制面板的全屏应用程序,运算符(operator)无法访问底层操作系统。

它有各种弹出窗口(例如触摸键盘),可以出现在主应用程序的前面。但是,当我在 Ubuntu Lucid 上编译和运行它时,弹出窗口仍然隐藏在主屏幕后面。

这个使用与应用程序相同的 GTK+ 调用的程序演示了这个问题:

#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gprintf.h>


int main(int argc, char *argv[])
{
GtkWidget *mainwindow;
GtkWidget *popwindow;
GtkWidget *label;

gtk_init(&argc, &argv);

mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(mainwindow), GTK_WIN_POS_CENTER);
gtk_window_set_decorated(GTK_WINDOW(mainwindow), FALSE);
gtk_window_fullscreen(GTK_WINDOW(mainwindow));
gtk_widget_show_all(mainwindow);

popwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_keep_above(GTK_WINDOW(popwindow), TRUE);
gtk_window_set_modal(GTK_WINDOW(popwindow), TRUE);
gtk_window_set_decorated (GTK_WINDOW (popwindow), FALSE);
gtk_window_set_resizable (GTK_WINDOW(popwindow), FALSE);
gtk_window_set_position( GTK_WINDOW (popwindow), (GtkWindowPosition)GTK_WIN_POS_CENTER);
gtk_window_set_transient_for(GTK_WINDOW(popwindow),GTK_WINDOW(mainwindow));

label = gtk_label_new(g_strdup_printf ("My GTK version is %d.%d.%d", gtk_major_version, gtk_minor_version, gtk_micro_version));
gtk_container_add(GTK_CONTAINER(popwindow), label);
gtk_widget_show(label);
gtk_widget_show(popwindow);

gtk_main();

return 0;
}

弹出窗口保持隐藏状态,只有在 Alt-Tab 到不同窗口(不是主窗口)时才能看到。
如果我删除对 gtk_window_set_transient_for() 的调用,则会出现弹出窗口,但桌面面板也会出现,从而可以访问底层操作系统。

有没有办法获得所需的行为?
Ubuntu Lucid 使用 GTK+ 2.20.1

谢谢你的帮助

理查德

最佳答案

使用gtk_window_present()以堆叠顺序实际提升弹出窗口:

gtk_window_present (GTK_WINDOW (popwindow));

关于gtk - 如何在 GTK+ 中保持 transient 窗口位于顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com