Контекст приложения (Xt)
Контейнер Xt для всего, что принадлежит программе, а не окну: соединения с дисплеями, очередь событий, таймеры и фоновая работа; введён, чтобы избавиться от глобальных переменных.
Первая версия X Toolkit Intrinsics предполагала одну программу с одним дисплеем и одним циклом событий и хранила состояние в глобальных переменных: вызывали XtInitialize и XtMainLoop и мирились с тем, что библиотеку нельзя использовать дважды в одном процессе. X11R3 в 1988 году ввёл тип XtAppContext как явного владельца всего этого. Программа создаёт контекст, открывает в нём дисплеи, регистрирует таймеры через XtAppAddTimeOut, файловые дескрипторы через XtAppAddInput и фоновую работу через XtAppAddWorkProc и запускает XtAppMainLoop, который ждёт всё это одновременно. В R4 настройку свернули в XtAppInitialize, а база ресурсов из Xresources загружается для каждого дисплея внутри контекста.
Старые вызовы сохранили, пометили устаревшими и внутри переписали поверх скрытого контекста по умолчанию, так что примеры в учебниках годами продолжали ими пользоваться. Возможность иметь несколько контекстов — например, библиотека со своим Xt внутри чужой Xt-программы — применялась редко. Настоящий выигрыш в другом: цикл событий стало можно держать и вращать самому через XtAppPending и XtAppProcessEvent, а не отдавать программу XtMainLoop без возврата. Сам шаблон — один объект, владеющий таймерами, источниками ввода и главным циклом, — дожил до GMainContext в GLib и QCoreApplication в Qt.