web-dev-qa-db-ja.com

WM_CLASS vs WM_INSTANCE?

xpropを実行すると、2つの値を持つクラス文字列が取得されます。1つはi [3]がinstanceを呼び出し、もう1つはclasschromium-browserなどで呼び出します。 xpropユーティリティは次のようなものを返します、

WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

ウィンドウとこれら2つのフィールドに関する公式のガイダンスは何ですか?このため、それらはかなり似ています。彼らは今までとは違うのですか?もしそうなら、私は何を選ぶべきですか、そしてなぜですか? GUI作成者は、自分の名前をどのようにクラス化してインスタンス化するのですか?

3
Evan Carroll

実際の動作は Inter-Client Communication Conventions Manual(ICCM))というタイトルの仕様 で定義されています。基本的にクラス名はアプリを作った人が指定します。インスタンス名はユーザーが指定でき、存在する場合はクラス名をオーバーライドする必要があります。

X11r6のICCMv2がWM_CLASS

4.1.2.5。 WM_CLASSプロパティ

WM_CLASSプロパティ(制御文字なしのタイプSTRINGの)には、2つの連続したヌル終了ストリングが含まれています。これらは、アプリケーションのリソースを検索するため、または識別情報として、クライアントとウィンドウマネージャーの両方が使用するインスタンス名とクラス名を指定します。このプロパティは、ウィンドウがWithdrawed状態を終了するときに存在する必要があり、ウィンドウがWithdrawn状態にあるときにのみ変更できます。ウィンドウマネージャーは、起動時とウィンドウがWithdrawn状態を離れたときにのみプロパティを調べることができますが、クライアントがその状態を動的に変更する必要はありません。

それぞれ2つの文字列は次のとおりです。

  • このウィンドウを所有するクライアントが属するアプリケーションの特定のインスタンスを指定する文字列。インスタンス名で指定されたリソースは、クラス名で指定されたリソースをオーバーライドします。インスタンス名は、オペレーティングシステム固有の方法でユーザーによって指定できます。 POSIX準拠のシステムでは、次の規則が使用されます。

    • -name NAMEはコマンドラインで指定され、NAMEはインスタンス名として使用されます。
    • それ以外の場合、環境変数RESOURCE_NAMEが設定されている場合、その値がインスタンス名として使用されます。
    • それ以外の場合、プログラムの呼び出しに使用される名前の末尾部分(argv[0]すべてのディレクトリ名を取り除いたもの)がインスタンス名として使用されます。
  • このウィンドウを所有するクライアントが属するアプリケーションの一般的なクラスを指定する文字列。クラスで指定されたリソースは、同じクラス名を持つすべてのアプリケーションに適用されます。 クラス名はアプリケーション作成者によって指定されます。一般的に使用されるクラス名の例には、「Emacs」、「XTerm」、「XClock」、「XLoad」があります。 、 等々。

ご了承ください WM_CLASS文字列はnullで終了するため、STRINGプロパティがnullで区切られているという一般的な規則とは異なります。この不整合は、下位互換性のために必要です。

(私が追加した太字の強調)

1
Evan Carroll