Desenvolvimento de extensões de shell do Gnome

4

Eu faço meus primeiros passos no desenvolvimento de extensões de shell do gnome 3. Na verdade eu tento perceber isso simples: Eu quero suprimir a notificação irritante "Aplicativo xyz está pronto". Depois de um pouco de pesquisa, descobri que essa classe é responsável:

WindowAttentionHandler from /usr/share/gnome-shell/js/ui/windowAttentionHandler.js

Isso inclui um método manipulador de eventos chamado " _onWindowDemandsAttention " que envia a notificação. Um teste rápido e sujo comentando o código responsável neste método leva ao que eu quero: não há mais a notificação " Application xyz is ready " por mais tempo.

Para não ficar tão sujo cortando as fontes originais, quero escrever uma pequena extensão de shell que sobrecarregue o método " WindowAttentionHandler._onWindowDemandsAttention " com nada mais do que um simples " return ".

Ele pode ser lido aqui - em "Como estende a funcionalidade", é possível simplesmente sobrecarregar uma função usando o .prototype. Depois de pesquisar a sintaxe correta, agora tenho uma extensão com esse código simples em extension.js apenas para testar se funciona:

const WindowAttentionHandler = imports.ui.windowAttentionHandler;

function init() {
}

function enable() {
WindowAttentionHandler.WindowAttentionHandler.prototype._onWindowDemandsAttention=function(display, window) { 
                return;
        }
}

function disable() {
}

Ativar a extensão e reiniciar o shell do gnome não gera erros (nada nos logs de sessão do gnome ou no LookingGlass) MAS também não funciona: As notificações " Application xyz is ready " ainda estão aparecendo.

Eu posso ter certeza de que a extensão está realmente carregada adicionando alguma saída de depuração (log ("BLAA")) nas funções "init" ou "enable".

Alguma dica do que estou fazendo errado? Ou eu tenho que usar uma solução diferente?

    
por user278978 07.05.2014 / 13:24

1 resposta

0

O mais provável é que o manipulador já esteja instanciado no momento em que sua extensão substitui o modelo do qual ele já foi construído. Você precisará procurar a instância em execução e substituí-la, não o modelo da biblioteca.

    
por aquaherd 10.12.2014 / 23:26