GTK / GDK Как узнать, перекрыто ли окно другим? - PullRequest
2 голосов
/ 24 февраля 2010

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

Итак, мой вопрос: как мне узнать z-уровень Windows (в документах об этом ничего не сказано) или есть более простое решение для этой проблемы

1 Ответ

1 голос
/ 24 февраля 2010

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

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

...