1.5.2 Общение с менеджером окон
Менеджер окон - это специальный клиент, в задачи которого входит интерактивное перемещение окон по экрану, изменение их размеров, минимизация (превращение в пиктограмму) и многое другое. Чтобы облегчить менеджеру его нелегкую жизнь, программам рекомендуется при инициализации сообщить о себе определенную информацию. Передается она через предопределенные свойства, которые известны менеджеру и могут быть им прочитаны. Некоторые из свойств (так называемые стандартные) задавать обязательно. Все остальное определяется по усмотрению программы. Наиболее простой способ задать стандартные свойства - обратиться к процедурам XSetStandardProperties() или XSetWMProperties().
Ниже перечисляются свойства, создаваемые для менеджера окон программами, а также процедуры для работы с ними.
В ряде случаев стоит сообщить оконному менеджеру о том, какой размер окна мы хотим получить, и в каких пределах будут изменяться его размеры. Например, для терминальной программы (такой, как 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,