Questão Manipulação correta de URIs de aplicativos do Unity Dash


Em algum momento, o Unity mudou o tipo de Uri que retornou quando ocorreu uma operação de arrastar e soltar de aplicativos do Unity Dash para uma janela do Gtk em um aplicativo que eu escrevi. Em 13.04 (Unity 7.0), a chamada de dados recebeu uma lista de texto / uri com o caminho completo, e. arquivo: //usr/share/applications/APP.desktop

Agora, no entanto, é uma lista de teste / uri como esta: application: //APP.desktop

Como obtenho para me dar o caminho completo para APP.desktop? Ou posso usar o uri para obter um objeto AppInfo?


4
2018-04-21 01:27


origem




Respostas:


Olhando para o documentação, você deve ser capaz de usar o get_path do objeto AppInfoManager

Executando o seguinte no interpretador python:

>>> from gi.repository import Unity
>>> a = Unity.AppInfoManager.get_instance ()
>>> a.get_path ("gedit.desktop")
'/usr/share/applications/gedit.desktop'

Como você pode ver, apenas passando o nome do arquivo da área de trabalho retorna o caminho completo para o nome do arquivo da área de trabalho.

Assim, a partir do seu aplicativo de arrastar e soltar - assegure-se de adicionar o destino uri:

widget.drag_dest_add_uri_targets()

conecte-se ao método drag_data_get

connect("drag-data-get", self.on_drag_data_get)

def on_drag_data_received(self, widget, drag_context, x,y, data,info, time):
    print (data.get_uris())

Separado de application://app.desktop (string.split(str, 1)[1]) e alimentar isso no appinfomanager.get_path() método


4
2018-05-11 23:04