2010-02-24 3 views
2

У меня есть приложение gtk, в котором есть значок в трее, если пользователь нажимает на значок, видимость окна переключается, когда он находится в том же рабочем пространстве, что и окно. Когда он находится в другом рабочем пространстве, окно переходит к этому.GTK/GDK Как узнать, накладывается ли окно другим?

Теперь, если приложение и пользователь находятся на одном экране, и приложение полностью наложено другим, я хочу поднять окно, чтобы оно было сверху, вместо того, чтобы сначала спрятать его и на следующем значке в трее щелкните его снова.

Мой код до сих пор:

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-уровень, но не один не может различить, если окно только внутри другого или если он накладывается на один.

Так что мой вопрос, как я могу выяснить окна Z-уровень (документы об этом ничего не говорят) или есть более простое решение этой проблемы

ответ

1

Вы не можете, так как Уровень z полностью зависит от менеджера окон. GDK может отправлять подсказки диспетчеру окна о том, как поднимать или опускать окно в стеке, но диспетчер окон может игнорировать их.

Хорошей заменой тому, что вы хотите, может быть, проверить gtk.Window.is_active(); если true, скройте окно, иначе наберите gtk.Window.present(). Это показывает окно, де-знакомит его и одновременно перемещает его на текущий рабочий стол.