Книга: Программирование в X Window средствами Free Pascal
1.5 Межклиентское взаимодействие
1.5.1 Механизм свойств
Как мы уже упоминали ранее, свойство есть набор данных, ассоциированных с окном. Они хранятся в специальных таблицах в памяти компьютера, на котором работает сервер. Каждое свойство имеет имя. Разные окна могут иметь свойства с одинаковыми именами.
Поскольку передача имен - строк произвольной длины - от клиента к серверу может увеличить нагрузку на сеть, 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() выполняет обратное преобразование.
- 13.8.3 Взаимодействие клиент
- 1.5.3 Лабораторная работа #5 "Межклиентское взаимодействие"
- Эффективное взаимодействие процессов архитектуры Classic Server
- Взаимодействие Xalan с Java
- Лекция 16. Взаимодействие процессов
- Кросс-функциональное взаимодействие и ответственность
- 5.4.2. Взаимодействие родительского и дочернего процессов
- 9.3. Базовое межпроцессное взаимодействие: каналы и очереди FIFO
- Взаимодействие с DNS-сервером
- Взаимодействие компонентов Kerberos
- Взаимодействие клиента и сервера в системе X Window
- Взаимодействие клиента и сервера VNC