Работа с контекстами

Контексты определяют механизм взаимодействия с оконной подсистемой

Контексты используются для считывания и изменения параметров дисплеев и окон. Контекст может быть ассоциирован с одним окном или группой, а также с одним или несколькими дисплеями.

Следующие разделы справки демонстрируют общие практики выполнения типичных операций с контекстами.

Виды контекстов
Создание контекста
Установка параметров контекста

Виды контекстов

При создании контекста должен быть определен его тип. Контекст определяет механизм взаимодействия с оконной подсистемой. В зависимости от потребностей приложения, а также от наличия у пользователя прав, могут быть созданы контексты различных типов

Возможно создание контекстов следующих типов:

Тип Описание Требуются ли привелегии root? Тип поддерживается?
Данный тип контекста предусматривает создание приложением окон и изменение некоторых их параметров.

Приложение не может изменять параметры окон, созданных в других процессах. Контекст приложения не информируется об окнах приложений, а также о более "высокоуровневых" окнах.

Контекст может установить родительские отношения с некоторым окном, даже если оно создано другим контекстом или процессом.
Нет
Да
Контекст может управлять всеми окнами в системе, даже если их процессы будут запущены после текущего.

Контекст получает уведомления о событиях создания или удаления (например, при терминировании процесса-владельца) окон в системе, а также при изменении их параметров.
Да
Да
Контекст получает возможность посылать события произвольным процессам в системе.

Контекст не получает уведомлений, предусмотренных флагом SCREEN_WINDOW_MANAGER_CONTEXT.
Да
Нет
Контекст для управления питанием.
Да
Нет
Контекст, позволяющий получить доступ к параметрам дисплеев.
Да
Нет
Контекст, позволяющий получить доступ к параметрам сессий.
Да
Нет

Создание контекста

Контекст должен быть создан перед созданием окон. При вызове функции screen_create_context() выделяется память для хранения состояния контекста. Также композитным менеджером будет создана очередь событий, ассоциированная с данным процессом

Для создания контекста:

  1. Проинициализируйте переменную соответствующего типа.

    screen_context_t screen_context = 0;

  2. Вызовите функцию screen_create_context(). для создания контекста. Эта функция принимает указатель на переменную типа screen_context_t, а также флаг, определяющий тип создаваемого контекста. В примере ниже создается контекст типа SCREEN_APPLICATION_CONTEXT, что говорит о том, что контекст будет использоваться только для создания и модификации окон в рамках приложения.

    if ( screen_create_context( &screen_context, SCREEN_APPLICATION_CONTEXT ) != 0 )
    return EXIT_FAILURE;

Вам следует уничтожить контекст, когда приложение закончит с ним работать. Для уничтожения контекст предусмотрена функция screen_destroy_context().

screen_destroy_context( screen_context );

Установка параметров контекста

Можно считывать и устанавливать свойства контекста для определения логики функционирования приложения при взаимодействии с окном

В настоящи момент у контекстов нет отдельных параметров, доступных для чтения или установки.




Предыдущий раздел: Оконная подсистема Screen