Come faccio a far funzionare la barra di avanzamento del launcher con la mia applicazione?


10

Ricerca di fondo

Sto tentando di aggiornare la barra di avanzamento nel programma di avvio di Unity per una semplice python/Gtkapplicazione creata usando Quicklychiamato test; tuttavia, seguendo le istruzioni in questo video , non sono stato in grado di aggiornare correttamente la barra di avanzamento nel programma di Unityavvio . Nel video Unity Integration Quicklynon è stato utilizzato, quindi il modo in cui l'applicazione era strutturata era leggermente diverso e il codice utilizzato nel video non sembra funzionare correttamente senza modifiche in Quickly ubuntu-applicationun'applicazione modello predefinita .


Screenshots

Ecco uno screenshot dell'icona dell'applicazione così come è attualmente visualizzata in Unity Launcher.

Icona dell'applicazione sfocata senza barra di avanzamento visibile

Ecco uno screenshot del tipo di funzionalità della barra di avanzamento del programma di avvio di Unity che vorrei (sovrapposto all'icona della posta: wiki.ubuntu.com ).

Funzionalità della barra di avanzamento di Unity Launcher


Codice del progetto

Un .zipfile contenente i file di progetto è disponibile qui .


Comportamento atteso

Mi aspetto che il codice sopra riportato mostri una barra di avanzamento che è piena al 75% sovrapposta sull'icona per l'applicazione di prova in Unity Launcher , ma l'applicazione viene eseguita e non visualizza alcuna barra di avanzamento quando quickly runviene eseguito il comando .


Indagine sui problemi

Credo che il problema sia che non sto ricevendo correttamente un riferimento alla finestra principale dell'applicazione, tuttavia, non sono sicuro di come risolvere correttamente questo problema. Credo anche che la linea: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")potrebbe essere un'altra fonte di complicazioni perché Quicklycrea .desktop.infile piuttosto che .desktopfile ordinari , quindi non sono sicuro che ciò potrebbe causare problemi.

Forse, un'altra fonte del problema è che non capisco del tutto la differenza tra .desktope i .desktop.infile. Ha forse senso fare una copia del test.desktop.infile e rinominarlo test.desktope posizionarlo /usr/share/applicationsper get_for_desktop_id("test,desktop")fare riferimento al .desktopfile corretto ?


Link di ricerca correlati

Anche se non sono ancora chiaro sulla differenza tra i file .desktop e .desktop.in, ho fatto qualche ricerca sui file .desktop e ho trovato un paio di collegamenti:


modificare

Dopo aver eseguito python setup.py builde quindi /build/share/applicationsspostato e spostato il test.desktopfile creato ~/.local/share/applicationse infine eseguito quickly run, viene visualizzato solo un punto interrogativo per un'icona, senza barra di avanzamento visibile .

Punto interrogativo per l'icona dell'applicazione visualizzata


Modifica 2

Dopo ulteriori indagini sul .desktopfile creato , si scopre che la linea: Icon=/usr/share/test/media/test.svgall'interno del .desktopfile puntava a un file icona chiamato test.svgche non esisteva.

Per risolvere questo problema, ho creato una nuova cartella denominata testin /usr/share/utilizzando il comando sudo mkdir teste poi creato un'altra all'interno della cartella di prova chiamata mediautilizzando il comando sudo mkdir media, e poi mi sono trasferito il test.svgfile di icona si trova nella mia directory del progetto rapidamente al test/data/media/test.svgdi /usr/share/test/media/. L' .svgicona dell'applicazione ora viene visualizzata correttamente nella barra di avvio di Unity e nella vista alt-tab, tuttavia non è ancora presente una barra di avanzamento visibile, come mostrato nella schermata seguente.

Viene visualizzata solo l'icona dell'applicazione


Modifica 3

Come ha sottolineato @dobey, c'era un errore di battitura nel codice del file TestWindow.py alla riga:

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

dove test.destkop, dovrebbe essere test.desktop.

Ho cambiato questo errore di battitura e non si sono verificate modifiche visibili quando l'applicazione è stata eseguita utilizzando quickly run. Tuttavia, dopo aver aggiunto la linea print('Integrating with launcher')al add_launcher_integration()terminale non c'era un output corrispondente quando l'applicazione era in esecuzione, indicando che il problema sembra essere che add_launcher_integration()non sembra essere chiamato correttamente all'avvio dell'applicazione.


Modifica 4

Dopo ulteriori indagini, si scopre che add_launcher_integration()in realtà viene chiamato all'avvio dell'applicazione. Con l'aggiunta della linea:

os.system("clear")

prima della linea

print("Integrating with launcher")

il messaggio "Integrazione con launcher" ora viene visualizzato in terminal.

Tuttavia, nella barra di avvio di Unity non è ancora visibile la barra di avanzamento .


Modifica 5

Dopo aver ricostruito il Quicklyprogetto di esecuzione python setup.py builde spostando il costruito .desktopfile all'interno del Quicklyprogetto situato al /build/share/applications/di ~/.local/share/applications, l'icona dell'applicazione e la barra di avanzamento ora visualizza correttamente nell'Unità launcher bar. Di seguito è possibile vedere uno screenshot dell'integrazione del programma di avvio.

Icona dell'applicazione e barra di avanzamento visualizzate

Risposte:


8

Il file .desktop deve essere installato nella posizione in cui la bamflibreria lo conosce.

Dovresti essere in grado di provare copiando il file .desktop incorporato (che dovrebbe essere creato da .desktop.in), nella tua ~/.local/share/applicationscartella ed eseguendolo update-desktop-database ~/.local/share/applications, anche se eseguire questo comando potrebbe non essere necessario se l'applicazione non gestisce alcun tipo MIME .

La differenza tra .desktop e .desktop.in è che .desktop.in è configurato per essere tradotto e viene elaborato da intltool durante la compilazione, per avere le traduzioni inserite, creando il file .desktop da .desktop.in file.

Inoltre ho appena notato un errore di battitura nel tuo codice:

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

Si noti che "destkop" vs. "desktop" dovrebbe essere. Forse è così, se non è un errore di riscrittura. Supponendo che il tuo codice sia effettivamente in esecuzione, questo è un problema. Se non viene eseguito, questo è il problema. È possibile aggiungere print('Integrating with launcher')a alla funzione add_launcher_integration per vedere. Dovrebbe apparire sul terminale quando eseguito.


Quando viene creato il file .desktop incorporato? Viene creato quando viene eseguita la corsa rapida e dove si trova?
Kevin Gurney,

Non uso rapidamente e non so esattamente quando lo costruirà, ma normalmente con una libreria / applicazione standard di Python, usando setup.py con DistUtilsExtra, accadrà quando si esegue "./setup.py build" o comando setup.py che esegue anche build.
Dobey,

Sono riuscito a eseguire successivamente build python setup.py. Quindi, ora devo semplicemente spostare il file test.desktop in ~ / .local / share / applicazioni e la barra di avanzamento dovrebbe essere semplicemente visualizzata quando eseguo l'esecuzione rapida?
Kevin Gurney,

Ho creato il progetto Python e poi spostato il file .desktop incorporato in ~ / usr / share / applicazioni e poi ho eseguito update-desktop-database ~ / .local / share / applicazioni come hai suggerito, ma ora sto solo ottenendo un punto interrogativo per un'icona dell'applicazione come mostrato qui: i.stack.imgur.com/RWYud.png .
Kevin Gurney,

Cosa dice Icon = line nel file test.desktop?
Dobey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.