Вопрос Правильная обработка URI приложений из Unity Dash


В какой-то момент Unity изменил тип Uri, который он вернул, когда была выполнена операция drag-n-drop приложений из Unity Dash в окно Gtk в приложении, которое я написал. В 13.04 (Unity 7.0) обратный вызов данных получил текст / uri-список с полным путем, например. Файл: //usr/share/applications/APP.desktop

Теперь, однако, это тестовый / uri-список, подобный этому: application: //APP.desktop

Как мне получить его, чтобы дать мне полный путь к APP.desktop? Или я могу использовать uri для получения объекта AppInfo?


4
2018-04-21 01:27


происхождения




ответы:


Глядя на документация, вы должны иметь возможность использовать get_path объекта AppInfoManager

Выполнение следующего в интерпретаторе python:

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

Как вы можете видеть, просто передача имени файла рабочего стола возвращает полный путь к файловому имени рабочего стола.

Таким образом, из вашего приложения перетаскивания - убедитесь, что вы добавили цель uri:

widget.drag_dest_add_uri_targets()

подключитесь к методу 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())

Разделить из application://app.desktop (string.split(str, 1)[1]) и подавать это в appinfomanager.get_path() метод


4
2018-05-11 23:04