Свойство есть набор данных, ассоциированных с окном. Они хранятся в специальных таблицах в памяти компьютера, на котором работает сервер. Каждое свойство имеет имя. Разные окна могут иметь свойства с одинаковыми именами.
Поскольку передача имен - строк произвольной длины - от клиента к серверу может увеличить нагрузку на сеть, X идентифицирует свойства с помощью целых чисел - атомов. Функция XInternAtom()
включает свойство с указанным именем в таблицу сервера и возвращает соответствующий атом. Полный список реализуемых X протоколом атомов можно найти в файле /usr/include/X11/Xatom.h
.
Данные свойства рассматриваются сервером как массив единиц длиной 8, 16 или 32 бита. Их конкретная интерпретация осуществляется программами-клиентами.
Каждое свойство имеет тип, который, в свою очередь, также задается тем или иным свойством. Например, свойство, соответствующее атому XA_STRING
, задает тип "строка".
Для работы со свойствами кроме XInternAtom()
используются следующие функции: XChangeProperty()
- меняет данные свойства: XGetWindowProperty()
- позволяет получить данные свойства.
Особую роль играют свойства, данные которых содержат строки текста. Они так и называются текстовыми и имеют тип "TEXT
". Таковыми являются, например, имена (заголовки) окно, имена пиктограмм и т.д. Данные текстового свойства описываются структурой XTextProperty
. Функция XStringListToTextProperty()
переводит список строк в набор данных типа XTextProperty
:
/* Эта переменная будет хранить созданное свойство. */ XTextProperty title_property; /* Строка, преобразуемая в свойство. */ char* title = "hello"; /* перевод строки в свойство X. */ int rc = XStringListToTextProperty(&title, 1, &title_property); /* проверка успешности преобразования. */ if (rc == 0) { fprintf(stderr, "XStringListToTextProperty - нет памяти\n"); exit(1); }
XTextPropertyToString()
выполняет обратное преобразование.