2

ユーザーがアイコンをクリックすると、ウィンドウと同じワークスペースにいるときにウィンドウの表示が切り替わります。彼が別のワークスペースにいるとき、ウィンドウはそのワークスペースに移動します。

ここで、アプリケーションとユーザーが同じ画面上にあり、アプリが別のアプリによって完全にオーバーレイされている場合、最初にウィンドウを非表示にして次のトレイ アイコンをクリックしてもう一度表示するのではなく、ウィンドウを上に上げたいと考えています。 .

これまでの私のコード:

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(); true の場合はウィンドウを非表示にし、そうでない場合はそれを呼び出しますgtk.Window.present()。これにより、ウィンドウが表示され、アイコンが解除され、現在のデスクトップに一度に移動されます。

于 2010-02-24T13:42:14.690 に答える