crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Открыть с помощью...
RazrFalcon
  опции профиля:
сообщение 23.11.2011, 19:56
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Есть изображение в программе. Нужно в его контекстное меню добавить: "Открыть с помощью..." и список должен браться из системы. Это вообще реализуемо стандартными средствами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
RazrFalcon
  опции профиля:
сообщение 24.11.2011, 19:17
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Ну я кроме gnome и kde ничего больше не юзал. Так что думал что QDesktopServices справляется везде.

В принципе мне не особо критично. Но на будущее интересно. Слушаю твой вариант ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sokoloff
  опции профиля:
сообщение 25.11.2011, 13:56
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

Спасибо сказали: 50 раз(а)




Репутация:   11  


Цитата(RazrFalcon @ 24.11.2011, 20:17) *
Ну я кроме gnome и kde ничего больше не юзал. Так что думал что QDesktopServices справляется везде.

В принципе мне не особо критично. Но на будущее интересно. Слушаю твой вариант ;)

Я тоже раньше так думал. Но FreeDesktop не опускается до таких "мелочей" а QDesktopServices использует xdg утилиты. Gnome и KDE работают по разному, поэтому вместо спецификации XDG написали костыли в xdg-open и xdg-mime. Алгоритм у них такой:

1. Получаем mime-type для файла.

2. Определяем среду
если установлена переменная окружения $KDE_FULL_SESSION, значит KDE
если GNOME_DESKTOP_SESSION_ID, то Gnome
еще определяются LXDE и XFCE, но ЕМНИП они работают аналогично гному.

3. Если Gnome, то используется его утилита и реестр. На эту ветку я забил.

4. Если KDE, то запускается утилита kfmclient. А ее логику можно эмулировать. Она использует поля MimeType и InitialPreference из desktop-файлов.
Рекурсивно бежим по всем файлам в /usr/share/applications и ищем файлы у которых в MimeType есть искомый тип.
Чем InitialPreference InitialPreference больше, тем приложение выше в списке. Самое верхнее - приложение по умолчанию.

Дефолтное приложение может быть перекрыто в ~/.local/share/applications/defaults.list.

Можешь выдрать куски из https://github.com/Razor-qt/razor-qt/blob/m...desktopfile.cpp метод XdgDesktopFileCache::getDefaultApp. Или используй мою библиотеку, она специально не зависит от razor, и может использоваться отдельно от него. Лицензия LGPL так что можно и в коммерческой программе использовать.

P.S. Пути могут отличатся в соответствии с XDG Base Directory Specification http://standards.freedesktop.org/basedir-s...pec-latest.html.


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 14:31