Как мы уже упоминали ранее, свойство есть набор данных,
ассоциированных с окном. Они хранятся в специальных таблицах в памяти
компьютера, на котором работает сервер. Каждое свойство имеет имя.
Разные окна могут иметь свойства с одинаковыми именами.
Поскольку передача имен - строк произвольной длины - от клиента
к серверу может увеличить нагрузку на сеть, X идентифицирует свойства с
помощью целых чисел - атомов. Процедура XInternAtom()
включает свойство с указанным именем в таблицу сервера и возвращает
соответствующий атом. Полный список реализуемых X протоколом атомов
можно найти в файле /usr/include/X11/Xatom.h.
Данные свойства рассматриваются сервером как массив единиц длиной
8, 16 или 32 бита. Их конкретная интерпретация осуществляется
программами-клиентами.
Каждое свойство имеет тип, который, в свою очередь, также задается
тем или иным свойством. Например, свойство, соответствующее атому
XA_STRING, задает тип "строка".
Для работы со свойствами кроме XInternAtom()
используются следующие процедуры: XChangeProperty() -
меняет данные свойства: XGetWindowProperty() -
позволяет получить данные свойства.
Особую роль играют свойства, данные которых содержат строки текста.
Они так и называются текстовыми и имеют тип "TEXT".
Таковыми являются, например, имена (заголовки) окно, имена пиктограмм и т.д.
Данные текстового свойства описываются структурой TXTextProperty.
Процедура XStringListToTextProperty() переводит список строк
в набор данных типа TXTextProperty:
(* Эта переменная будет хранить созданное свойство. *)
var
window_title_property : TXTextProperty ;
rc : TStatus;
(* Строка, преобразуемая в свойство. *)
const
window_title : PChar = 'hello, world';
(* перевод строки в свойство X. *)
rc := XStringListToTextProperty(@window_title,
1,
@window_title_property);
(* проверка успешности преобразования. *)
if (rc = 0) then begin
writeln( 'XStringListToTextProperty - нет памяти');
halt(1);
end;
XTextPropertyToString() выполняет обратное преобразование.