Как мне получить монитор активного окна в GNOME?

Я очень новичок в разработке расширений GNOME, и мне трудно работать с ним из-за глубокого отсутствия документации (или, может быть, мой Интернет тайно подвергается цензуре) API. Я начал с изменения существующего расширения, чтобы его было легче обойти.

Проблема в том, что я могу получить активное окно, используя global.display.focus_window, а также список мониторов, подключенных к компьютеру с помощью Main.layoutManager.monitors, Теперь я хотел бы выяснить, на каком мониторе находится полученное окно (поэтому я могу переместить верхнюю панель на этот монитор, поскольку это, вероятно, означает, что я сейчас работаю с этим монитором). Я пробовал разные вещи, такие как.screen,.monitor и т. Д., Но безуспешно. У меня нет завершения IntelliSense по этому вопросу, и я пытаюсь угадать, какими могут быть участники, так как я не могу найти никаких документов по нему.

Я ценю тот факт, что GNOME гораздо более настраиваемый, чем тот, который я использовал ранее (Unity, который вообще не предоставлял никаких настроек), но я не знаю, как с ним работать, и ресурсов мало. Я попытался изучить исходный код, но я не знаком с тем, как он организован, и я не смог найти соответствующую часть кода, в которой объявлены нужные мне элементы, если они существуют.

Я кодирую файлы.js, поэтому мне нужен код JavaScript, наверное.

Большое спасибо.

1 ответ

Решение

Хотя большинство видимых пользователю частей Gnome Shell написаны на JavaScript, они часто являются просто привязками для базовых библиотек Си. Если вы работаете с Windows, мониторами и экранами, вам нужно обратиться к документации Mutter и, возможно, к документации Shell:

Есть недвижимость на 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, а также некоторые из встроенных модулей, которые стоит того:

Другие вопросы по тегам