Использование GTK+ в системе X Window
Использование GTK+ в системе X Window — аспекты использования GTK+, специфичные для X11
GTK+ для системы X Window
В UNIX-подобных системах X-бэкэнд является стандартным для GTK+. Поэтому вам не нужно делать ничего особенного при его компиляции, и всё должно работать «из коробки».
Чтобы интегрировать низкоуровневые функции Xlib в программу GTK, обратитесь к разделу
GTK+ включает механизм встраивания между процессами в виде виджетов #GtkSocket и #GtkPlug. Они специфичны для X11, и вам необходимо включить заголовок gtk/gtkx.h, чтобы использовать их.
Параметры командной строки, специфичные для X11
X-бэкэнд понимает некоторые дополнительные аргументы командной строки.
--display . Имя дисплея X для открытия вместо дисплея, указанного в переменной окружения displayDISPLAY.
Переменные окружения, специфичные для X11
Бэкэнд GDK для X11 можно настроить с помощью дополнительных переменных окружения.
GDK_SYNCHRONIZE. Если установлена, GDK выполняет все запросы X синхронно. Это полезно для отладки, но значительно замедляет производительность.
GDK_CORE_DEVICE_EVENTS. Если установлена, GDK не использует расширение XInput и реагирует только на стандартные события ввода X.
GDK_SCALE. Должна быть установлена как целое число, обычно 2. Если установлена, GDK масштабирует все окна на указанный множитель. Масштабированное отображение предназначено для использования на дисплеях с высокой плотностью пикселей. Обычно GDK определяет подходящий множитель масштаба для каждого монитора из системы отображения. Эта переменная окружения позволяет переопределить это.
GDK_DPI_SCALE. Это может быть полезно при использовании масштабируемых приложений GTK вместе с не масштабируемыми приложениями на дисплеях с высокой плотностью пикселей. В этом случае разрешение шрифтов можно удвоить, чтобы сделать не масштабируемые приложения читаемыми, и GDK_DPI_SCALE=0.5 может быть установлена для компенсации этого в приложениях GTK, которые уже масштабированы, установив GDK_SCALE=2.
Архитектура X11
Пользователи, приходящие из среды Windows или macOS, часто сталкиваются с некоторыми особенностями системы X Window System. Этот раздел кратко знакомит с основными понятиями X. Более подробная информация содержится в книге Руководство по программированию Xlib Адриана Най; это первая книга серии O'Reilly по системе X Window.
Стандарты — ещё один важный ресурс, если вы работаете с низкоуровневыми деталями X11, в частности спецификации ICCCM и Extended Window Manager Hints. На freedesktop.org вы найдете ссылки на многие соответствующие спецификации.
В руководстве GDK описывается
Сервер, клиент, диспетчер окон
В других системах окон обычно вся функциональность находится в самом приложении. В X, каждое приложение включает в себя три различных программы: сервер X, приложение (называемое клиентом, потому что оно является клиентом сервера X), и специальный клиент, называемый менеджером окон.
Сервер X отвечает за управление ресурсами, обработку запросов на отрисовку и рассылку событий, таких как события клавиатуры и мыши, заинтересованным приложениям. Поэтому клиентские приложения могут попросить сервер X создать окно, нарисовать окружность или переместить окна.
Диспетчер окон отвечает за отображение рамки или границ вокруг окон; он также имеет окончательное слово в отношении размера каждого окна и состояния окна, например, минимизированное, максимизированное и так далее. В Windows и macOS приложение обрабатывает большинство этих задач. В X11, если вы хотите изменить состояние окна или изменить его рамку, вы должны попросить диспетчер окон сделать это от вашего имени, используя установленную конвенцию.
GTK+ имеет функции для запроса у диспетчера окон выполнения различных действий; например, gtk_window_iconify(), gtk_window_maximize() или gtk_window_set_decorated(). Имейте в виду, что gtk_window_move() и изменение размера окна в конечном итоге контролируется диспетчером окон, и большинство диспетчеров окон будут игнорировать некоторые запросы время от времени в интересах хорошего пользовательского интерфейса.
© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer.gnome.org/gtk3/3.22/gtk-x11.html