Как мне получить монитор активного окна в GNOME?
Я очень новичок в разработке расширений GNOME, и мне трудно работать с ним из-за глубокого отсутствия документации (или, может быть, мой Интернет тайно подвергается цензуре) API. Я начал с изменения существующего расширения, чтобы его было легче обойти.
Проблема в том, что я могу получить активное окно, используя global.display.focus_window
, а также список мониторов, подключенных к компьютеру с помощью Main.layoutManager.monitors
, Теперь я хотел бы выяснить, на каком мониторе находится полученное окно (поэтому я могу переместить верхнюю панель на этот монитор, поскольку это, вероятно, означает, что я сейчас работаю с этим монитором). Я пробовал разные вещи, такие как.screen,.monitor и т. Д., Но безуспешно. У меня нет завершения IntelliSense по этому вопросу, и я пытаюсь угадать, какими могут быть участники, так как я не могу найти никаких документов по нему.
Я ценю тот факт, что GNOME гораздо более настраиваемый, чем тот, который я использовал ранее (Unity, который вообще не предоставлял никаких настроек), но я не знаю, как с ним работать, и ресурсов мало. Я попытался изучить исходный код, но я не знаком с тем, как он организован, и я не смог найти соответствующую часть кода, в которой объявлены нужные мне элементы, если они существуют.
Я кодирую файлы.js, поэтому мне нужен код JavaScript, наверное.
Большое спасибо.
1 ответ
Хотя большинство видимых пользователю частей Gnome Shell написаны на JavaScript, они часто являются просто привязками для базовых библиотек Си. Если вы работаете с Windows, мониторами и экранами, вам нужно обратиться к документации Mutter и, возможно, к документации Shell:
- Муттер: https://developer.gnome.org/meta/stable/
- Оболочка: https://developer.gnome.org/shell/stable/
- St (Shell Toolkit): https://developer.gnome.org/st/stable/index.html
Есть недвижимость на global
объект называется screen
(так global.screen
) что без сомнения MetaScreen
которая имеет функцию get_n_monitors()
, так же как get_primary_monitor()
, get_current_monitor()
и другие. MetaWindow
с другой стороны, содержит функцию под названием get_monitor()
который возвращает целое число. Я понимаю, что мониторы обозначаются целым числом, которое передается различным функциям MetaScreen
а также MetaWindow
поскольку в документации Mutter, похоже, нет объекта для этого.
Большая часть связанного JavaScript для того, что вы хотите сделать, кажется, находится в layout.js, который, вероятно, содержит лучшие примеры того, как Mutter используется в Gnome Shell, чем я могу вам дать. Он также включает в себя Monitor
класс, который, кажется, является просто JS-оболочкой для индекса монитора. Этот класс используется здесь в LayoutManager
класс (который является определением экземпляра Main.layoutManager
).
Примечание о документации
Первоначально обоснование отсутствия "правильной" документации оболочки gnome заключалось в том, что (внутренний JavaScript) API был довольно нестабильным. Дело в том, что у вас нет стабильного API, но вы читаете исходный текст на том же языке, на котором собираетесь его написать. В некотором смысле это имеет смысл, учитывая, что вы можете изменить prototype
живых объектов и патч обезьяны на прихоти.
API много успокоился, но пока никто не подошел, чтобы написать скрипт для его автоматического документирования. Мой лучший совет - сделать закладки на документацию Mutter, Shell и St и использовать поиск Github или GitLab, чтобы упростить задачу.
Однако есть документация для API Gnome, а также некоторые из встроенных модулей, которые стоит того:
- API Gnome: https://devdocs.baznga.org/
- Модули: https://gitlab.gnome.org/GNOME/gjs/wikis/Modules
- Общее использование GObject в GJS: https://gitlab.gnome.org/GNOME/gjs/wikis/Mapping