Como faço a barra de progresso do ativador funcionar com meu aplicativo?

10

Pesquisa de antecedentes

Estou tentando atualizar a barra de progresso no iniciador do Unity para um aplicativo python/Gtk simples criado usando Quickly chamado test ; no entanto, seguindo as instruções em este vídeo , < strong> Não consegui atualizar com êxito a barra de progresso no Unity launcher . No vídeo Unity Integration, Quickly não foi usado, então a maneira como o aplicativo foi estruturado foi um pouco diferente, e o código usado no vídeo parece não funcionar adequadamente sem modificação em um aplicativo padrão Quickly ubuntu-application template. / p>

Screenshots

Aqui está uma captura de tela do ícone do aplicativo, conforme exibido atualmente no Unity Launcher.

Aqui está uma captura de tela do tipo de funcionalidade da barra de progresso do iniciador do Unity que gostaria de ter (sobreposta no ícone de email: wiki.ubuntu. com ).

Código do Projeto

Um arquivo .zip contendo os arquivos do projeto pode ser encontrado aqui .

Comportamento esperado

Espero que o código acima mostre uma barra de progresso 75% completa sobreposta ao ícone do aplicativo de teste no Unity Launcher , mas o aplicativo só é executado e não exibe nenhuma barra de progresso quando o comando quickly run é executado.

Investigação de Problemas

Acredito que o problema é que não estou obtendo corretamente uma referência à janela principal do aplicativo, no entanto, não tenho certeza de como corrigir adequadamente esse problema. Eu também acredito que a linha: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop") pode ser outra fonte de complicação porque Quickly cria arquivos .desktop.in em vez de arquivos .desktop comuns, então não tenho certeza se isso pode estar causando problemas também.

Talvez, outra fonte do problema seja que não entendo completamente a diferença entre os arquivos .desktop e .desktop.in . Faz sentido fazer uma cópia do arquivo test.desktop.in e renomeá-lo como test.desktop e colocá-lo em /usr/share/applications para que get_for_desktop_id("test,desktop") faça referência ao arquivo .desktop correto?

Links de pesquisa relacionados

Embora ainda não esteja claro a diferença entre os arquivos .desktop e .desktop.in, fiz algumas pesquisas sobre arquivos .desktop e encontrei alguns links:

Editar

Após executar python setup.py build e, em seguida, navegar para /build/share/applications e mover o arquivo test.desktop incorporado para ~/.local/share/applications e, finalmente, executar quickly run , apenas um ponto de interrogação para um ícone será exibido, nenhuma barra de progresso visível .

Editar 2

Após uma investigação mais detalhada do arquivo .desktop construído, a linha: Icon=/usr/share/test/media/test.svg dentro do arquivo .desktop estava apontando para um arquivo de ícone chamado test.svg que não existia.

Para resolver esse problema, criei uma nova pasta chamada test in /usr/share/ usando o comando sudo mkdir test e criei outra pasta dentro da pasta de teste chamada media usando o comando sudo mkdir media , e, em seguida, movi o arquivo de ícone test.svg localizado no meu diretório de projeto Rápido em test/data/media/test.svg to /usr/share/test/media/ . O ícone .svg do aplicativo agora é exibido corretamente na barra do iniciador do Unity e na visualização do separador alt, no entanto, ainda não há barra de progresso visível , conforme mostrado na captura de tela abaixo.

Editar 3

Como @dobey, apontou, houve um erro de digitação no código do arquivo TestWindow.py na linha:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop") ,

onde test.destkop , deve ser test.desktop .

Alterei este erro de digitação e nenhuma alteração visível ocorreu quando o aplicativo foi executado usando quickly run . No entanto, após adicionar a linha print('Integrating with launcher') a add_launcher_integration() , não houve saída correspondente no terminal quando o aplicativo foi executado, indicando que o problema parece ser que add_launcher_integration() não parece ser chamado corretamente quando o aplicativo é iniciado.

Editar 4

Após investigações posteriores, verifica-se que add_launcher_integration() é de fato chamado quando o aplicativo é iniciado. Com a adição da linha:

os.system("clear")

antes da linha

print("Integrating with launcher")

a mensagem "Integrating with launcher" agora é exibida no terminal .

No entanto, ainda não há barra de progresso visível na barra de inicialização do Unity .

Editar 5

Depois de reconstruir o projeto Quickly executando python setup.py build e movendo o arquivo .desktop incorporado dentro do projeto Quickly localizado em /build/share/applications/ to ~/.local/share/applications , o ícone do aplicativo e a barra de progresso são exibidos corretamente em a barra de iniciação do Unity. Uma captura de tela da integração do lançador pode ser vista abaixo.

    
por Kevin Gurney 13.04.2017 / 14:23

1 resposta

8

O arquivo .desktop precisa ser instalado no local onde a biblioteca bamf o conhece.

Você deve ser capaz de testar copiando o arquivo .desktop construído (que deve ser criado a partir do .desktop.in), para a pasta ~/.local/share/applications e executando update-desktop-database ~/.local/share/applications , embora a execução desse comando não seja necessária se o seu aplicativo não manipular nenhum tipo MIME.

A diferença entre o .desktop e o .desktop.in é que o .desktop.in está configurado para ser traduzido e é processado pelo intltool durante o build, para que as traduções sejam inseridas, criando o arquivo .desktop a partir do arquivo. arquivo desktop.in.

Também notei um erro de digitação no seu código:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

Observe o "destkop" versus "desktop" que deveria ser. Talvez seja isso, se não for um erro de digitação. Supondo que seu código esteja sendo executado, isso é um problema. Se não for executado, então esse é o problema. Você pode adicionar um print('Integrating with launcher') à função add_launcher_integration para ver. Ele deve aparecer no terminal quando for executado.

    
por dobey 02.07.2012 / 16:46