Как мне получить монитор активного окна в GNOME? - PullRequest
0 голосов
/ 28 апреля 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 29 апреля 2018

Хотя большинство видимых пользователю частей Gnome Shell написаны на JavaScript, они часто являются просто привязками для лежащих в основе библиотек C. Если вы работаете с 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 заключалось в том, что API (внутренний JavaScript) был довольно нестабильным. Дело в том, что у вас нет стабильного API, но вы читаете исходный текст на том же языке, на котором собираетесь его написать. В некотором смысле это имеет смысл, учитывая, что вы можете изменить prototype живых объекты и обезьяна-патч по прихоти

API много успокоился, но пока никто не подошел, чтобы написать скрипт для его автоматического документирования. Мой лучший совет - сделать закладки на документацию Mutter, Shell и St и использовать поиск Github или GitLab, чтобы упростить задачу.

Тем не менее, есть документация для API Gnome, а также некоторые из встроенных модулей, которые стоит того:

...