GTK / GDK如何确定窗口是否被另一个窗口覆盖?

时间:2010-02-24 12:11:07

标签: gtk pygtk gdk

我有一个带有托盘图标的gtk应用程序,如果用户点击该图标,当窗口与窗口位于同一工作区时,窗口的可见性就会切换。当他在另一个工作区时,窗口移动到那个工作区。

现在,如果应用程序和用户在同一个屏幕上并且应用程序完全被另一个应用程序覆盖,我想提升窗口以使其位于顶部,而不是先隐藏它并在下一个托盘图标上单击再次展示它。

到目前为止我的代码:

def inOverlayed(self):
    windows = self.window.get_screen().get_toplevel_windows()
    win = self.window.get_window()
    x, y, w, h, b = win.get_geometry()
    for i in windows:
        if win != i:
            x2, y2, w2, h2, b2 = i.get_geometry()
            if x >= x2 and x + w <= x2 + w2:
                if y >= y2 and y + h <= y2 + h2:
                    return True

    return False

最大的问题似乎是没有办法确定一个Windows z级别,但没有人无法区分窗口是否只是在另一个窗口内部,或者它是否被一个人实际覆盖。

所以我的问题是,我如何找到一个Windows z级别(文档没有说明这一点)或者是否有一个更简单的解决方案来解决这个问题

1 个答案:

答案 0 :(得分:1)

你不能,因为z级完全由窗口管理器决定。 GDK可​​以向窗口管理器发送有关提升或降低堆栈窗口的提示,但窗口管理器可以自由忽略它们。

替代你想要的东西可能是检查gtk.Window.is_active();如果为true,则隐藏窗口,否则在其上调用gtk.Window.present()。这将显示窗口,对其进行去图标处理,并将其一次性移动到当前桌面。