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

GTK/GDK如何确定一个窗口是否被另一个窗口覆盖?,gtk,pygtk,gdk,Gtk,Pygtk,Gdk,我有一个gtk应用程序,它有一个托盘图标,如果用户点击图标,当他在与窗口相同的工作区时,窗口的可见性就会切换。当他在另一个工作区时,窗口移动到该工作区 现在,如果应用程序和用户在同一个屏幕上,并且应用程序完全被另一个应用程序覆盖,我希望提升窗口使其位于顶部,而不是首先隐藏它,然后单击下一个托盘图标再次显示它 到目前为止,我的代码是: def inOverlayed(self): windows = self.window.get_screen().get_toplevel_windows

我有一个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
def inOverlayed(自):
windows=self.window.get\u screen().get\u top level\u windows()
win=self.window.get\u window()
x、 y,w,h,b=win.get_geometry()
对于windows中的i:
如果赢了!=一:
x2,y2,w2,h2,b2=i.获取_几何体()

如果x>=x2,x+w=y2,y+h,则不能这样做,因为z级别完全由窗口管理器决定。GDK可以向窗口管理器发送关于提升或降低堆栈中窗口的提示,但窗口管理器可以随意忽略这些提示

一个很好的替代方法是检查
gtk.Window.is_active()
;如果为true,则隐藏窗口,否则对其调用
gtk.window.present()
。这将一次显示窗口、将其取消图标化并将其移动到当前桌面