Como faço para que a barra de progresso do iniciador funcione com meu aplicativo?

10

Pesquisa de Antecedentes

Estou tentando atualizar a barra de progresso no iniciador do Unity para um python/Gtkaplicativo simples criado usando o Quicklychamado test; no entanto, seguindo as instruções deste vídeo , não consegui atualizar com êxito a barra de progresso no Unityiniciador . No vídeo do Unity Integration, Quicklynão foi usado; portanto, a maneira como o aplicativo foi estruturado era um pouco diferente, e o código usado no vídeo parece não funcionar corretamente sem modificação em um Quickly ubuntu-applicationaplicativo de modelo padrão .


Screenshots

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

Ícone de aplicativo embaçado sem uma barra de progresso visível

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

Funcionalidade da barra de progresso do iniciador do Unity


Código do projeto

Um .ziparquivo contendo os arquivos do projeto pode ser encontrado aqui .


Comportamento esperado

Eu esperaria que o código acima mostrasse uma barra de progresso 75% completa sobreposta no ícone do aplicativo de teste no Unity Launcher , mas o aplicativo é executado apenas 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 uma referência adequada à janela principal do aplicativo, no entanto, não tenho certeza de como corrigir esse problema corretamente. 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 Quicklycria .desktop.inarquivos em vez de .desktoparquivos comuns , então não tenho certeza se isso também pode estar causando problemas.

Talvez, outra fonte do problema seja que eu não entendo completamente a diferença entre .desktope .desktop.inarquivos. Será que faz sentido fazer uma cópia do test.desktop.inarquivo e renomeá-lo test.desktope colocá-lo /usr/share/applicationsem ordem para get_for_desktop_id("test,desktop")fazer referência ao .desktoparquivo correto ?


Links de pesquisa relacionados

Embora ainda não esteja claro a diferença entre os arquivos .desktop e .desktop.in, pesquisei sobre os arquivos .desktop e deparei com alguns links:


Editar

Depois de executar python setup.py builde, em seguida, navegar /build/share/applicationse mover o test.desktoparquivo criado para ~/.local/share/applications, e finalmente executar quickly run, apenas um ponto de interrogação para um ícone está sendo exibido, sem barra de progresso visível .

Ponto de interrogação para o ícone do aplicativo exibido


Editar 2

Após uma investigação mais aprofundada do .desktoparquivo criado , verifica-se que a linha: Icon=/usr/share/test/media/test.svgdentro do .desktoparquivo estava apontando para um arquivo de ícone chamado test.svgque não existia.

A fim de resolver este problema, eu criei uma nova pasta chamada testem /usr/share/utilizar o comando sudo mkdir teste, em seguida, criou um outro dentro da pasta da pasta de teste chamado mediausando o comando sudo mkdir media, e depois me mudei o test.svgarquivo de ícone localizado no meu diretório de projeto rapidamente em test/data/media/test.svgpara /usr/share/test/media/. O .svgícone do aplicativo agora é exibido corretamente na barra do iniciador do Unity e na visualização da guia alt, no entanto , ainda não existe uma barra de progresso visível, como mostra a captura de tela abaixo.

Somente ícone do aplicativo exibido


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.destkopdeveria estar test.desktop.

Alterei esse erro de digitação e nenhuma alteração visível ocorreu quando o aplicativo foi executado quickly run. No entanto, depois de adicionar a linha print('Integrating with launcher')para add_launcher_integration()não havia 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 uma investigação mais aprofundada, acontece que add_launcher_integration()é chamado de fato quando o aplicativo é iniciado. Com a adição da linha:

os.system("clear")

antes da linha

print("Integrating with launcher")

a mensagem "Integrando ao iniciador" agora é exibida no terminal.

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


Editar 5

Depois de reconstruir o Quicklyprojeto executando python setup.py builde movendo o .desktoparquivo construído dentro do Quicklyprojeto localizado em /build/share/applications/para ~/.local/share/applications, o ícone do aplicativo e a barra de progresso agora são exibidos corretamente na barra do iniciador do Unity. Uma captura de tela da integração do iniciador pode ser vista abaixo.

Ícone do aplicativo e barra de progresso exibida

Kevin Gurney
fonte

Respostas:

8

O arquivo .desktop deve ser instalado no local em que a bamfbiblioteca o conhece.

Você deve poder testar copiando o arquivo .desktop incorporado (que deve ser criado a partir do .desktop.in), para sua ~/.local/share/applicationspasta e executando update-desktop-database ~/.local/share/applications, embora a execução desse comando possa não ser necessária se o aplicativo não manipular nenhum tipo MIME .

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

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" vs. "desktop" que deveria ser. Talvez seja isso, se não for um erro de redigitação. Supondo que seu código esteja realmente sendo executado, isso é um problema. Se não for executado, esse é o problema. Você pode adicionar um print('Integrating with launcher')à função add_launcher_integration para ver. Ele deve aparecer no terminal quando executado.

dobey
fonte
Quando o arquivo .desktop criado é criado? É construído quando a execução rápida é executada e onde está localizada?
21412 Kevin Kurney
Eu não uso rapidamente e não sei quando exatamente o compilaria, mas normalmente com uma biblioteca / aplicativo python padrão, usando setup.py com DistUtilsExtra, isso aconteceria ao executar "./setup.py build" ou Comando setup.py que também executa a compilação.
Dobey
Consegui executar sucessivamente o python setup.py build. Então, agora eu simplesmente movo o arquivo test.desktop para ~ / .local / share / applications e a barra de progresso deve simplesmente ser exibida quando eu executo uma execução rápida?
precisa
Eu construí o projeto python e, em seguida, movi o arquivo .desktop para ~ / usr / share / applications e executei update-desktop-database ~ / .local / share / applications como você sugeriu, mas agora estou recebendo apenas um ponto de interrogação para um ícone de aplicativo, como mostrado aqui: i.stack.imgur.com/RWYud.png .
21812 Kevin Kurney
O que diz a linha Icon = no arquivo test.desktop?
Dobey