Как приложения KDE работают под Gnome?

19

Если Gnome использует GTK +, а KDE использует Qt, почему приложения KDE могут работать под Gnome?

пс-Окс
источник

Ответы:

30

И GTK, и Qt являются инструментами для создания графических интерфейсов. Каждый инструментарий пользовательского интерфейса предоставляет свои собственные функции программам для создания виджетов (кнопок, текстовых полей ...) и поставляется в виде библиотек, с которыми графическая программа ссылается. Программа, написанная для GNOME, будет использовать GTK ( libgdkи libgtk), в то время как программы KDE используют Qt ( libQtCoreи libQtGui), программы Enlightenment используют EFL и так далее.

Однако все эти наборы инструментов используют одну и ту же систему X Window и один и тот же протокол X11 . Для отображения объектов на экране инструментарий подключается к работающему X-серверу (обычно Xorg, ранее называвшемуся XFree86), отправляет команды X11 (создать окно, нарисовать что-либо в окне) и получает события ввода X11 (мышь, клавиатура, изменение размера окна). и с) назад.

(Большинство современных наборов инструментов, таких как GTK, Qt или EFL, сами выполняют причудливое рисование и просто используют X11 для отправки готового изображения всего окна, а X-сервер просто выводит его на экран. Вместо этого используются более старые наборы инструментов, такие как lXaw или Motif. X11 для рисования примитивов, таких как линии, прямоугольники или текст, а X-сервер выполняет весь рендеринг.)

Затем X-сервер выполняет всю работу, собирая все вместе, разговаривая с вашей видеокартой и так далее. Таким образом, вы можете запускать программы, которые используют различные версии различных наборов инструментов, потому что в итоге они просто используют одни и те же средства ОС.

Механизм, а не политика

Ситуация с несколькими инструментами не уникальна для X - например, вы найдете программы Windows, использующие стандарт, comctl32но также WPF, .NET WinForms, Chrome Aura, Firefox XUL и даже тот же GTK или Qt. Большинство игр используют свои собственные стилизованные элементы управления. Действительно, это возможно в любой графической системе, которая позволяет рисовать изображение по всему окну.

Однако одним из принципов X был «механизм, а не политика». Это означает, что X-сервер предоставляет своим клиентам (графическим программам) только механизм для выполнения различных действий, но налагает столько правил, сколько необходимо . Другими словами, X воспринимает это в большей степени, чем любая другая графическая система.

Например, одной из неотъемлемых частей графической системы является управление окнами - рисование рамок (или декораций) вокруг каждого окна, возможность перемещения и изменения размеров окон и т. Д. В Windows и OS X есть оконный менеджер, встроенный в систему, но в X он работает как отдельная программа - пакет X.Org поставляется с минимальной twm, но почти во всех средах рабочего стола есть свои собственные оконные менеджеры (в GNOME были Sawfish, Metacity, gnome-shell; в KDE есть KWin), обеспечивающая интеграцию с соответствующей средой рабочего стола.

(Как и наборы инструментов, современные «композитные» оконные менеджеры фактически берут на себя работу Xorg по компоновке всех окон на окончательное изображение экрана, позволяя добавлять такие вещи, как тени или эффекты.)

В современных средах рабочего стола это также создает проблемы. Чтобы использовать наиболее распространенный пример: та же функциональность «захватить клавиатуру» используется горячими клавишами; всплывающие меню; и заставки, и только одна программа может использовать его одновременно. Это означает, что вы не можете заблокировать экран, когда открыто всплывающее меню, или пропустить песни, пока экран заблокирован. Это одна из нескольких причин, по которой Wayland создается в качестве замены X11.

Примечание

Технически это даже означает, что вы можете запускать X-программы на другом компьютере, общаясь с X-сервером на вашем компьютере по сети. Действительно, это был основной случай использования в первые дни, и именно отсюда и название «X- сервер ». Можно запустить X-сервер на Mac и отобразить на нем окна, созданные программами, работающими в Linux, FreeBSD и даже OpenVMS.

Однако, как уже упоминалось выше, современные наборы инструментов выполняют все рисование на стороне клиента (причудливую графику и красивые шрифты довольно сложно сделать с примитивами X11), и только передают окончательные изображения на X-сервер, который очень быстрый локально, но требует большая часть пропускной способности сети.

(Другие протоколы, такие как RFB (также известный как VNC) или «Удаленный рабочий стол» Microsoft, предназначены для этого, и у них есть очень эффективные способы сжатия изображений окна.)

grawity
источник
1
Цикл событий Qt оборачивает GTK, так что вы даже можете комбинировать код Qt и GTK в одном приложении (обычно это только с плагинами).
Алекс П
@Alex: Вы имели в виду «можно обернуть» в том, что цикл событий Qt может доставлять события в GTK, или вы говорили, что Qt фактически использует GLib для цикла событий?
grawity
1
Qt также может использовать свою собственную чистую реализацию цикла событий, но она по умолчанию оборачивает Glib (по крайней мере, в Qt4 - я не смотрел, как это делает Qt5). Есть скрытый флаг ($ QT_NO_GLIB), который управляет им во время выполнения.
Алекс П
7

Отчасти ответ заключается в том, что ведущие среды рабочего стола (Gnome, KDE, XFCE, возможно, другие) работают вместе под http://freedesktop.org, чтобы сделать возможным такое взаимодействие. Одной из спецификаций, опубликованных FD.o, является EWMH , которая обеспечивает определенный уровень совместимости между оконными менеджерами (для современных функций, а не только для базового управления окнами).

vonbrand
источник
4

При запуске под GNOME приложения KDE по-прежнему вызывают общие библиотеки Qt, от которых они зависят. То же самое относится к любому запущенному приложению в любой другой среде рабочего стола. Они не ограничивают то, что можно назвать, а что нельзя.

Гассан
источник