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

标签 gtk

我正在将一个大型(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/

相关文章:

c++ - OpenCV 阻塞了我的 GTK 接口(interface)

eclipse - 在Eclipse中编译C/GTK

linux - 在 Centos 7 上运行 Perl 5 并尝试安装和使用 gtk/gtk2

python - 将 Gtk.DrawingArea 或 Cairo 图案的内容保存到磁盘上的图像

Python + GTK - 如何抑制警告

python : How can two GTK widgets interact with each other?

c - 如何在 gtk 中打开和保存文件?

c - gnome-builder 找不到我的空地文件

c - 如何使用 Poppler 缩放

haskell - GTK 中的小部件间距