2

我有一个带有托盘图标的 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

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

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

4

1 回答 1

1

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

你想要的一个很好的替代品可能是检查gtk.Window.is_active();如果为真,则隐藏窗口,否则调用gtk.Window.present()它。这会显示窗口,对其进行去图标化,然后一次性将其移动到当前桌面。

于 2010-02-24T13:42:14.690 回答