サイズヒントについて
Xにおいてウィンドウの配置は全てWMが取り仕切ることになっているが、クライアント側から配置方法について注文したい場合がある(例:固定サイズウィンドウ)。このようなときにサイズヒントが用いられる。
WMがサイズヒントを無視した場合考えられる弊害:
- 固定サイズのはずのウィンドウがリサイズできてしまう
- UI崩壊
- アスペクト比がクライアントの意図しない値になる
- 動画再生用のウィンドウとかだと困る
- ウィンドウ位置が少しおかしくなる
サイズヒントに関連する資料:
- ICCCM 4.1.2.3
- サイズヒントの実体であるWM_NORMAL_HINTSの説明
- EWMH Implementation NotesのWindow Geometryの項
- ICCCMがあまりにも分かりにくいので補足がなされた
- Xlib - C Language Interface 3.2.3 Gravity Attributes
- gravityの意味
EWMH Other Propertiesの_NET_WM_FULL_PLACEMENT
- WMがクライアントによる座標指定を制限することをクライアントに対して示す
- WMが十分な配置能力を備えていることを明示する効果がある
WM_NORMAL_HINTSプロパティの型はWM_SIZE_HINTSで、そのメンバは以下の通り:
フィールド |
型 |
対応するフラグ |
意味 |
備考 |
min_width |
INT32 |
PMinSize |
最小幅 |
存在しなければbase_width |
min_height |
INT32 |
PMinSize |
最小高さ |
存在しなければbase_height |
max_width |
INT32 |
PMaxSize |
最大幅 |
|
max_height |
INT32 |
PMaxSize |
最大高さ |
|
width_inc |
INT32 |
PResizeInc |
幅の増分 |
|
height_inc |
INT32 |
PResizeInc |
高さの増分 |
|
min_aspect |
(INT32,INT32) |
PAspect |
最小アスペクト比 |
(1つめの値/2つめの値)で表される |
max_aspect |
(INT32,INT32) |
PAspect |
最大アスペクト比 |
同上 |
base_width |
INT32 |
PBaseSize |
基底幅 |
存在しなければmin_width |
base_height |
INT32 |
PBaseSize |
基底高さ |
存在しなければmin_height |
win_gravity |
INT32 |
PWinGravity |
ウィンドウグラビティ |
存在しなければNorthWest |
さらに、対応するメンバが存在しないフラグが存在する:
フラグ |
意味 |
USPosition |
ウィンドウの座標がユーザによって指定された |
USSize |
上のサイズ版 |
PPosition |
ウィンドウの座標が(ユーザの操作なしに)プログラムによって指定された |
PSize |
上のサイズ版 |
- 座標とサイズはウィンドウ自体のもの
- 昔はサイズヒントにメンバがあったが、今はウィンドウ自体の値を使うことになっている