Я делаю свои первые шаги в разработке расширений оболочки gnome 3. На самом деле я пытаюсь реализовать эту простую вещь: я хочу подавить раздражающее уведомление «Приложение xyz готово». После небольшого исследования я обнаружил, что этот класс ответственен:
WindowAttentionHandler from /usr/share/gnome-shell/js/ui/windowAttentionHandler.js
Это включает в себя метод обработчика событий под названием «_onWindowDemandsAttention
», который отправляет уведомление. Быстрый и грязный тест, закомментировав ответственный код в этом методе, приводит к тому, что я хочу: больше не нужно уведомление «Application xyz is ready
».
Чтобы не быть таким грязным, взломав исходные коды, я хочу написать небольшое расширение оболочки, которое перегружает метод «WindowAttentionHandler._onWindowDemandsAttention
» не более чем простым «return
».
Здесь можно прочитать - в разделе «Как расширяет функциональность» можно просто перегрузить функцию с помощью .prototype. После исследования правильного синтаксиса у меня теперь есть расширение с этим простым кодом в extension.js только для проверки работоспособности:
const WindowAttentionHandler = imports.ui.windowAttentionHandler;
function init() {
}
function enable() {
WindowAttentionHandler.WindowAttentionHandler.prototype._onWindowDemandsAttention=function(display, window) {
return;
}
}
function disable() {
}
Включение расширения и перезапуск оболочки gnome не вызывают ошибок (ничего в журналах сеансов gnome нет). или в LookingGlass) НО это тоже не работает: уведомления «Application xyz is ready
» все еще появляются.
Я могу убедиться, что расширение действительно загружено, добавив некоторые выходные данные отладки (log («BLAA»)) в функции «init» или «enable».
1114 Любой намек на то, что я делаю не так? Или я должен использовать другое решение?
Скорее всего, обработчик уже инстанцируют в то время, когда Ваше расширение переопределяет шаблон, из которого это было уже создано. Необходимо будет выследить рабочий экземпляр и переопределение что, не шаблон библиотеки.