В ряде случаев стоит сообщить оконному менеджеру о том, какой размер окна мы хотим получить, и в каких пределах будут изменяться его размеры. Например, для терминальной программы (такой, как xterm), хотелось бы, чтобы окно всегда содержало полное количество строк и столбцов. В других случаях нежелательно давать возможность менять размер окна (например, в диалоговых окнах). Эти пожелания можно передать оконному менеджеру, хотя ничто не помешает ему их проигнорировать. Для этого необходимо создать структуру данных, заполнить ее необходимыми данными и затем использовать функцию XSetWMNormalHints:
var
win_size_hints: PXSizeHints;
win_size_hints:= XAllocSizeHints;
if (win_size_hints=nil) then begin
writeln('XAllocSizeHints - нет памяти');
halt(1);
end;
win_size_hints^.flags:= PSize OR PMinSize;
win_size_hints^.min_width:= 300;
win_size_hints^.min_height:= 200;
win_size_hints^.base_width:= 400;
win_size_hints^.base_height:= 250;
XSetWMNormalHints(display, win, win_size_hints);
XFree(win_size_hints);
var
win_hints: PXWMHints;
icon_pixmap: TPixmap;
const
icon_bitmap_width=20;
icon_bitmap_height=20;
icon_bitmap_bits: array [0…59] of byte = (
$60, $00, $01, $b0, $00, $07, $0c, $03, $00, $04, $04, $00,
$c2, $18, $00, $03, $30, $00, $01, $60, $00, $f1, $df, $00,
$c1, $f0, $01, $82, $01, $00, $02, $03, $00, $02, $0c, $00,
$02, $38, $00, $04, $60, $00, $04, $e0, $00, $04, $38, $00,
$84, $06, $00, $14, $14, $00, $0c, $34, $00, $00, $00, $00
);
win_hints:= XAllocWMHints;
if (win_hints=nil) then begin
writeln('XAllocWMHints - нет памяти');
halt(1);
end;
win_hints^.flags:= StateHint OR IconPositionHint OR IconPixmapHint;